<?php
namespace AdminBundle\Admin;
use AdminBundle\Form\Type\ContentType;
use DcSiteBundle\Entity\Project;
use DcSiteBundle\Entity\ProjectContent;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Form\FormMapper;
use Sonata\AdminBundle\Route\RouteCollectionInterface;
use Sonata\AdminBundle\Form\Type\ModelListType;
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
class ProjectAdmin extends BaseAdmin
{
protected function configureRoutes(RouteCollectionInterface $collection): void
{
}
/**
* @param Project $object
*/
public function prePersist($object): void
{
$this->preSave($object);
$object->setUrl($this->slugify($object->getUrl()));
$User = $this->security->getUser();
if(!$User->getDealer() && !$object->getDealer()) {
throw new AccessDeniedException('User without dealer');
}
/** @var ProjectContent $content */
foreach ($object->getContent() as $content) {
$content->setProject($object);
}
$object->setDealer($User->getDealer());
}
public function preUpdate($object): void
{
$this->preSave($object);
$object->setUrl($this->slugify($object->getUrl()));
parent::preUpdate($object);
}
private function preSave($object): void
{
if (empty($object->getUrl())) {
/** @var ProjectContent $content */
if (count($object->getContent()) > 0) {
$content = $object->getContent()[0];
$object->setUrl(strtolower($content->getH1()));
}
}
}
protected function configureBatchActions($actions): array
{
return [];
}
protected function configureFormFields(FormMapper $formMapper): void
{
$formMapper
->tab('Контент')
->with('Контент', ['class' => 'col-lg-12'])
->add('url', null, ['label' => 'URL'])
->add('content', ContentType::class, ['label' => false], [
'edit' => 'inline',
'sortable' => 'position',
'admin_code' => 'admin.vehicles.special_projects_content',
])
->end()
->end()
->tab('Галерея')
->add('is_first_video',ChoiceType::class, ['label' => 'Що перше показувати', 'choices' => array_flip([
1 => 'Відео',
0 => 'Фото',
null => 'Фото',
])])
->add('gallery', ModelListType::class, [
'label' => 'Галерея',
'btn_list' => false,
'required' => false,
], [
'edit' => 'inline',
'inline' => 'table',
'sortable' => 'position',
'link_parameters' => [
'context' => 'dc_car_gallery',
'provider' => 'sonata.media.provider.image'
],
'admin_code' => 'sonata.media.admin.gallery',
])
->add('video', ModelListType::class, [
'label' => 'Галерея видео',
'btn_list' => false,
'required' => false,
], [
'edit' => 'inline',
'inline' => 'table',
'sortable' => 'position',
'link_parameters' => [
'context' => 'dc_car_video',
'provider' => 'sonata.media.provider.youtube'
],
'admin_code' => 'sonata.media.admin.gallery',
])
->end()
->end()
;
}
/**
* @param ListMapper $listMapper
*/
protected function configureListFields(ListMapper $listMapper): void
{
$listMapper->addIdentifier('id')
->add('title',null, ['label' => 'Назва проекту'])
->add('_action', 'actions', [
'label' => 'Действия',
'actions' => [
'edit' => [],
'delete' => [],
]
])
;
}
}