src/AdminBundle/Admin/DCAutoSite/MainSliderAdmin.php line 22

Open in your IDE?
  1. <?php
  2. namespace AdminBundle\Admin\DCAutoSite;
  3. use Sonata\AdminBundle\Datagrid\ProxyQueryInterface;
  4. use CoreBundle\Entity\Vehicles\Vehicle;
  5. use DcSiteBundle\Entity\MainSlider;
  6. use Sonata\AdminBundle\Admin\AbstractAdmin;
  7. use Sonata\AdminBundle\Datagrid\DatagridMapper;
  8. use Sonata\AdminBundle\Datagrid\ListMapper;
  9. use Sonata\AdminBundle\Form\FormMapper;
  10. use Sonata\AdminBundle\Form\Type\ModelType;
  11. use Sonata\AdminBundle\Route\RouteCollectionInterface;
  12. use Sonata\Form\Validator\ErrorElement;
  13. use Sonata\MediaBundle\Form\Type\MediaType;
  14. use Symfony\Component\Finder\Exception\AccessDeniedException;
  15. use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
  16. use Symfony\Component\Form\FormError;
  17. use Symfony\Component\Security\Core\Security;
  18. class MainSliderAdmin extends AbstractAdmin
  19. {
  20.     protected Security $security;
  21.     public function setContainerServices(Security $security): void
  22.     {
  23.         $this->security $security;
  24.     }
  25.     /**
  26.      * @param RouteCollectionInterface $collection
  27.      */
  28.     protected function configureRoutes(RouteCollectionInterface $collection): void
  29.     {
  30.         $collection->remove('view');
  31.         //$collection->remove('delete');
  32.     }
  33.     /**
  34.      * @param MainSlider $object
  35.      */
  36.     public function prePersist($object): void
  37.     {
  38.         $user $this->security->getUser();
  39.         $dealer $user->getDealer();
  40.         if(!$dealer) throw new AccessDeniedException();
  41.         $this->updateObject($object);
  42.         $object->setDealer($dealer);
  43.     }
  44.     /**
  45.      * @param $object
  46.      */
  47.     public function preUpdate($object): void
  48.     {
  49.         $this->updateObject($object);
  50.         parent::preUpdate($object);
  51.     }
  52.     /**
  53.      * @param MainSlider $object
  54.      */
  55.     private function  updateObject($object) {
  56.         $object->setState((int) $object->getState());
  57.     }
  58.     /**
  59.      * @param DatagridMapper $datagridMapper
  60.      */
  61.     protected function configureDatagridFilters(DatagridMapper $datagridMapper): void
  62.     {
  63.         $datagridMapper->add('id')
  64.             ->add('dealer'null, ['label' => 'Дилерский центр'])
  65.         ;
  66.     }
  67.     /**
  68.      * @param FormMapper $formMapper
  69.      */
  70.     protected function configureFormFields(FormMapper $formMapper): void
  71.     {
  72.         $User $this->security->getUser();
  73.         if(!$Dealer $User->getDealer()) {
  74.             throw new AccessDeniedException('User without dealer');
  75.         }
  76.         $queryBuilder $this->getModelManager()
  77.             ->getEntityManager(Vehicle::class)
  78.             ->createQueryBuilder('v')
  79.             ->select('v')
  80.             ->from(Vehicle::class,'v')
  81.             ->where('v.dealer = :dealer')
  82.             ->andWhere('v.is_used = 0')
  83.             ->setParameter('dealer'$Dealer)
  84.         ;
  85.         $formMapper
  86.             ->tab('Слайдер на главной')
  87.                 ->with('Заголовок', ['class' => 'col-lg-6'])
  88.                     ->add('state_title'CheckboxType::class, ['label' => 'Показывать заголовок''required' => false])
  89.                     ->add('title_ru'null, ['label' => 'Заголовок (Ru)'])
  90.                     ->add('title_ua'null, ['label' => 'Заголовок (Ua)'])
  91.                 ->end()
  92.                 ->with('Подзаголовок', ['class' => 'col-lg-6'])
  93.                     ->add('state_sub_title'CheckboxType::class, ['label' => 'Показывать подзгаловок''required' => false])
  94.                     ->add('sub_title_ru'null, ['label' => 'Подзаголовок (Ru)'])
  95.                     ->add('sub_title_ua'null, ['label' => 'Подзаголовок (Ua)'])
  96.                 ->end()
  97.                 ->add('btn_fst_title_ru'null, ['label' => 'Название кнопки-1 (Ru)'])
  98.                 ->add('btn_fst_title_ua'null, ['label' => 'Название кнопки-1 (Ua)'])
  99.                 ->add('url'null, ['label' => 'URL'])
  100.                 ->add('btn_sec_title_ru'null, ['label' => 'Название кнопки-2 (Ru)'])
  101.                 ->add('btn_sec_title_ua'null, ['label' => 'Название кнопки-2 (Ua)'])
  102.                 ->add('url_sec'null, ['label' => 'URL-2'])
  103.                 ->add('image'MediaType::class, [
  104.                     'label' => 'Изображение',
  105.                     'required' => true,
  106.                     'provider' => 'sonata.media.provider.image',
  107.                     'context'  => 'dc_site'
  108.                 ])
  109.                 ->add('image_mobile'MediaType::class, [
  110.                     'label' => 'Изображение для мобильных устройств(400px*400px)',
  111.                     'required' => false,
  112.                     'provider' => 'sonata.media.provider.image',
  113.                     'context'  => 'dc_site'
  114.                 ]);
  115.                 $formMapper->add('on_portal'CheckboxType::class, ['label' => 'Показывать на портале''required' => false]);
  116.                 $formMapper->add('state'CheckboxType::class, ['label' => 'Отображать на сайте','required' => false])
  117.                 ->add('position'null, ['label' => 'Порядковый номер'])
  118.             ->add('vehicle'ModelType::class, ['label' => 'Автомобиль''btn_add' => false'query' => $queryBuilder'required' => false], [
  119.                 'admin_code' => 'admin.vehicles.passenger_vehicle',
  120.             ])
  121.             ->end()
  122.         ;
  123.     }
  124.     /**
  125.      * @param string $context
  126.      * @return ProxyQueryInterface
  127.      */
  128.     public function configureQuery($context 'list'): ProxyQueryInterface
  129.     {
  130.         $user $this->security->getUser();
  131.         $query parent::configureQuery($context);
  132.         $dealer $user->getDealer();
  133.         if(!$dealer) {
  134.             throw new AccessDeniedException();
  135.         }
  136.         $query->andWhere(
  137.             $query->expr()->eq($query->getRootAliases()[0] . '.dealer'':dealer')
  138.         );
  139.         $query->setParameter('dealer'$user->getDealer());
  140.         return $query;
  141.     }
  142.     /**
  143.      * @param ErrorElement $errorElement
  144.      * @param MainSlider $object
  145.      */
  146.     public function validate(ErrorElement $errorElement$object)
  147.     {
  148.         parent::validate($errorElement$object);
  149.         $imageMobile $object->getImageMobile();
  150.         $imageDescktop $object->getImage();
  151.         if ($imageMobile) {
  152.             if ($imageMobile->getWidth() != 400 || $imageMobile->getHeight() != 400) {
  153.                 $this->getForm()->addError(new FormError('Мобильное изображение, должно быть размером 400px*400px'));
  154.             }
  155.         }
  156.         if ($imageDescktop) {
  157.             if ($imageDescktop->getWidth() != 1440 || $imageDescktop->getHeight() != 575) {
  158.                 $this->getForm()->addError(new FormError('Не вірний розмір зображення. Завантажте зображення в розмірі 1440px*575px'));
  159.             }
  160.         }
  161.     }
  162.     /**
  163.      * @param ListMapper $listMapper
  164.      */
  165.     protected function configureListFields(ListMapper $listMapper): void
  166.     {
  167.         $listMapper->addIdentifier('id')
  168.             ->add('title_ru',null, ['label' => 'Название'])
  169.             ->add('dealer',null, ['label' => 'Дилерский центр'])
  170.             ->add('image',null, ['label' => 'Изображение'])
  171.             ->add('position'null, ['label' => 'Позиция''editable' => true])
  172.             ->add('state','choice', ['label' => 'Показывать на сайте''editable' => true'choices' => [
  173.                 => 'Да',
  174.                 => 'Нет',
  175.             ]])
  176.             ->add('_action''actions', [
  177.                 'label' => 'Действия',
  178.                 'actions' => [
  179.                     'edit' => [],
  180.                 ]
  181.             ])
  182.         ;
  183.     }
  184. }