src/AdminBundle/Admin/SubAutoSite/MainSliderAdmin.php line 18

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