src/AdminBundle/Admin/Vehicles/Special/VehicleAdmin.php line 23

Open in your IDE?
  1. <?php
  2. namespace AdminBundle\Admin\Vehicles\Special;
  3. use AdminBundle\Admin\Vehicles\BaseVehicleAdmin;
  4. use AdminBundle\Form\Type\ContentType;
  5. use CoreBundle\Entity\Dealer;
  6. use CoreBundle\Entity\Model;
  7. use CoreBundle\Entity\Vehicles\RecommendGroup;
  8. use CoreBundle\Model\Vehicles\VehicleType;
  9. use Sonata\AdminBundle\Form\FormMapper;
  10. use Sonata\AdminBundle\Form\Type\ModelListType;
  11. use Sonata\AdminBundle\Form\Type\AdminType;
  12. use Sonata\AdminBundle\Form\Type\ModelType;
  13. use Sonata\Form\Type\CollectionType;
  14. use Sonata\MediaBundle\Form\Type\MediaType;
  15. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  16. use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
  17. use Symfony\Component\Form\Extension\Core\Type\NumberType;
  18. use Symfony\Component\Form\Extension\Core\Type\TextType;
  19. use Symfony\Component\Security\Core\Exception\AccessDeniedException;
  20. class VehicleAdmin extends BaseVehicleAdmin
  21. {
  22.     protected $baseRouteName 'vehicle-special';
  23.     protected $baseRoutePattern 'vehicle-special-action';
  24.     protected function getVehicleType(): int
  25.     {
  26.         return VehicleType::SPECIAL_TYPE;
  27.     }
  28.     public function getVariationAdminCode()
  29.     {
  30.         return 'admin.vehicles.special_variation';
  31.     }
  32.     protected function getModelDealer(Dealer $Dealer)
  33.     {
  34.         $queryBuilder $this->getModelManager()
  35.             ->getEntityManager(Model::class)
  36.             ->createQueryBuilder('m')
  37.             ->select('m')
  38.             ->from('CoreBundle:Model''m');
  39.         return $queryBuilder;
  40.     }
  41.     protected function configureFormFields(FormMapper $formMapper): void
  42.     {
  43.         $this->checkByRole(['ROLE_SUPER_ADMIN''ROLE_CONTENT_MANAGER''ROLE_DC_MANAGER']);
  44.         $User $this->getUser();
  45.         if (!$Dealer $User->getDealer()) {
  46.             throw new AccessDeniedException();
  47.         }
  48.         $vehicleId null;
  49.         if ($this->getSubject()) {
  50.             $vehicleId $this->getSubject()->getId();
  51.         }
  52.         $queryBuilder $this->getModelDealer($Dealer);
  53.         $queryBuilderCategory $this->getCategoryByVehicleType();
  54.         $queryBuilderGroup $this->getModelGrouplDealer($Dealer);
  55.         $formMapper
  56.             ->tab('Основная информация')
  57.             ->with('Контент', ['class' => 'col-lg-6'])
  58.             ->add('content'ContentType::class, ['label' => false], [
  59.                 'edit' => 'inline',
  60.                 'sortable' => 'position',
  61.             ])
  62.             ->end()
  63.             ->with('Доп. информация', ['class' => 'col-lg-6'])
  64.             ->add('adminName'TextType::class, ['label' => 'Внутреннее название''required' => false])
  65.             ->add(
  66.                 'model',
  67.                 ModelType::class,
  68.                 ['label' => 'Модель''required' => true'query' => $queryBuilder]
  69.             )
  70.             ->add('recommend_group'EntityType::class, [
  71.                 'class' => RecommendGroup::class,
  72.                 'label' => 'Входит в подборки',
  73.                 'multiple' => true,
  74.                 'required' => false,
  75.             ])
  76.             ->add('category'ModelType::class, ['label' => 'Категория''required' => true'query' => $queryBuilderCategory])
  77.             ->add('group'ModelType::class, ['label' => 'Группа''required' => false'query' => $queryBuilderGroup])
  78.             ->add('url'null, ['label' => 'URL'])
  79.             ->add('image'MediaType::class, [
  80.                 'provider' => 'sonata.media.provider.image',
  81.                 'context'  => 'dc_site',
  82.                 'label' => 'Изображение'
  83.             ])
  84.             ->add('state'CheckboxType::class, ['label' => 'Отображать на сайте''required' => false])
  85.             ->add('is_new_model'CheckboxType::class, ['label' => 'Новая модель''required' => false])
  86.             ->add(
  87.                 'is_pre_order',
  88.                 CheckboxType::class,
  89.                 ['label' => 'Доступно под заказ''required' => false'value' => 1]
  90.             )
  91.             ->add(
  92.                 'show_disabled',
  93.                 CheckboxType::class,
  94.                 ['label' => 'Сохранить активность ссылки(Архивная модель)''required' => false]
  95.             )
  96.             ->add('position'NumberType::class, ['label' => 'Позиция'])
  97.             ->add('test_drive'CheckboxType::class, ['label' => 'Доступна на тест драйв''required' => false])
  98.             ->add(
  99.                 'credit_available',
  100.                 CheckboxType::class,
  101.                 ['label' => 'Доступна в кредит''required' => false'value' => 1]
  102.             )
  103.             ->add(
  104.                 'school_available',
  105.                 CheckboxType::class,
  106.                 ['label' => 'Доступна для школы''required' => false'value' => 1]
  107.             )
  108.             ->add('vehicleCardType'AdminType::class, [
  109.                 'label' => false,
  110.                 'required' => false,
  111.             ])
  112.             ->end()
  113.             ->end()
  114.             ->tab('Видео')
  115.             ->with('', ['class' => 'col-lg12'])
  116.             ->add(
  117.                 'video',
  118.                 ModelListType::class,
  119.                 [
  120.                     'label' => 'Галерея видео',
  121.                     'btn_list' => false,
  122.                     'required' => false,
  123.                 ],
  124.                 [
  125.                     'edit' => 'inline',
  126.                     'inline' => 'table',
  127.                     'sortable' => 'position',
  128.                     'link_parameters' => [
  129.                         'context' => 'dc_car_video',
  130.                         'provider' => 'sonata.media.provider.youtube'
  131.                     ],
  132.                     'admin_code' => 'sonata.media.admin.gallery',
  133.                 ]
  134.             )
  135.             ->end()
  136.             ->end()
  137.             ->tab('Прайсы и брошюры')
  138.             ->with('', ['class' => 'col-lg-12'])
  139.             ->add('files'CollectionType::class, [
  140.                 'label' => 'Файлы',
  141.                 'by_reference' => false,
  142.                 'required' => false,
  143.             ], [
  144.                 'edit' => 'inline',
  145.                 'inline' => 'table',
  146.             ])
  147.             ->end()
  148.             ->end()
  149.             ->tab('Особенности')
  150.             ->with('', ['class' => 'col-lg-12'])
  151.             ->add('features'CollectionType::class, [
  152.                 'label' => false,
  153.                 'by_reference' => false,
  154.                 'required' => false,
  155.             ], [
  156.                 'edit' => 'inline',
  157.                 'inline' => 'table',
  158.             ])
  159.             ->end()
  160.             ->end()
  161.             ->tab('Комплектации')
  162.             ->with('', ['class' => 'col-lg-12'])
  163.             ->add('equipments'CollectionType::class, [
  164.                 'label' => 'Комплектации',
  165.                 'by_reference' => false,
  166.                 'required' => false,
  167.             ], [
  168.                 'edit' => 'inline',
  169.                 'inline' => 'table',
  170.             ])
  171.             ->end()
  172.             ->end()
  173.             ->tab('FAQ')
  174.             ->with('', ['class' => 'col-lg-12'])
  175.             ->add('faqs'CollectionType::class, [
  176.                 'label' => false,
  177.                 'by_reference' => false,
  178.                 'required' => false,
  179.             ], [
  180.                 'edit' => 'inline',
  181.                 'inline' => 'table',
  182.             ])
  183.             ->end()
  184.             ->end();
  185.         if ($vehicleId) {
  186.             $formMapper->tab('Цены')
  187.                 ->with('', ['class' => 'col-lg-12'])
  188.                 ->add('vehicle_items'CollectionType::class, [
  189.                     'label' => 'Цены',
  190.                     'by_reference' => false,
  191.                     'required' => false,
  192.                 ], [
  193.                     'edit' => 'inline',
  194.                     'inline' => 'table',
  195.                 ])
  196.                 ->end()
  197.                 ->end();
  198.         }
  199.     }
  200.     public function preUpdate($object): void
  201.     {
  202.         parent::preUpdate($object);
  203.     }
  204. }