src/AdminBundle/Admin/InnerMailAdmin.php line 14

Open in your IDE?
  1. <?php
  2. namespace AdminBundle\Admin;
  3. use CoreBundle\Entity\Dealer;
  4. use CoreBundle\Entity\InnerMail;
  5. use Sonata\AdminBundle\Datagrid\DatagridMapper;
  6. use Sonata\AdminBundle\Datagrid\ListMapper;
  7. use Sonata\AdminBundle\Datagrid\ProxyQueryInterface;
  8. use Sonata\AdminBundle\Form\FormMapper;
  9. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  10. use Symfony\Component\Form\Extension\Core\Type\CollectionType;
  11. class InnerMailAdmin extends BaseAdmin
  12. {
  13.     private $types = [
  14.         'feedbackType' => 'Обратная связь',
  15.         'serviceType' => 'Запись на сервис',
  16.         'testDriveType' => 'Тест-драйв',
  17.         'creditType' => 'Кредит',
  18.         'orderType' => 'Заказ авто',
  19.         'servicesOrderType' => 'Заказ услуг',
  20.         'corpSale' => 'Корпоративные продажи',
  21.         'buyUsedCar' => 'Заказ авто с пробегом',
  22.         'tradeInType' => 'Трейд-ин',
  23.         'estimateType' => 'Оценка авто',
  24.         'buyPartsType' => 'Заказ запчастей/аксессуаров',
  25.         'findPart' => 'Заявка на подбор запчастей',
  26.         'vacancyType' => 'Вакансии',
  27.         'orderCallType' => 'Обратный звонок',
  28.         'insuranceType' => 'Страхование',
  29.         'leasingCalculatorType' => 'Лизинговый калькулятор',
  30.         'supportType' => 'Поддержка пользователей',
  31.         'repairPhoto' => 'Кузовной ремонт по фото',
  32.         'repairCalc' => 'Кузовной ремонт из кулькулятора',
  33.         'rentType' => 'Аренда техники',
  34.         'configuratorOffer' => 'Заявки конфигуратора',
  35.         'buyInStock' => 'Покупка авто в наличии',
  36.         'insuranceExtend' => 'Продление гарантии',
  37.         'tiresConfigurator' => 'Конфигуратор шин',
  38.         'onlineConsult' => 'Запись на консультацию',
  39.         'qualityControlType' => 'Форма оценки качества',
  40.         'serviceCampaingCarType' => 'Авто наличие сервисных кампаний',
  41.         'saveDesign' => 'Сохранить дизайн выбранной модели',
  42.         'withoutPayOrder' => 'Заказ с корзины без оплати',
  43.         'fleetUpdateType' => 'Обновление автопарка',
  44.         'replacementCar' => 'Підмінне авто після сервісу',
  45.     ];
  46.     protected function configureDatagridFilters(DatagridMapper $datagridMapper): void
  47.     {
  48.         $datagridMapper
  49.             ->add('dealer'null, ['label' => 'Дилер']);
  50.     }
  51.     protected function configureListFields(ListMapper $listMapper): void
  52.     {
  53.         $listMapper
  54.             ->add('dealer')
  55.             ->add('_action'null, [
  56.                 'actions' => [
  57.                     'edit' => [],
  58.                 ],
  59.             ]);
  60.     }
  61.     public function preUpdate($object): void
  62.     {
  63.         $this->updateObj($object);
  64.     }
  65.     public function prePersist($object): void
  66.     {
  67.         $this->updateObj($object);
  68.     }
  69.     private function updateObj(InnerMail $object)
  70.     {
  71.         foreach ($this->types as $type => $label) {
  72.             $getter "get$type";
  73.             $setter "set$type";
  74.             $mail $object->$getter();
  75.             $toInsert = [];
  76.             foreach ($mail as $item) {
  77.                 if (filter_var($itemFILTER_VALIDATE_EMAIL)) {
  78.                     $toInsert[] = $item;
  79.                 }
  80.             }
  81.             $object->$setter($toInsert);
  82.         }
  83.     }
  84.     protected function configureFormFields(FormMapper $formMapper): void
  85.     {
  86.         $options = [
  87.             'required' => false,
  88.             'allow_add' => true,
  89.             'allow_delete' => true,
  90.             'prototype' => true,
  91.             'by_reference' => false,
  92.         ];
  93.         $formMapper
  94.             ->with('Дилер')
  95.             ->add('dealer'EntityType::class, ['class' => Dealer::class])
  96.             ->end();
  97.         $formMapper->with(' ', ['class' => 'col-md-4']);
  98.         $itemCount ceil(count($this->types) / 3);
  99.         $i 1;
  100.         foreach ($this->types as $type => $label) {
  101.             $formMapper->add($typeCollectionType::class, array_merge($options, ['label' => $label,]));
  102.             if ($i $itemCount === 0) {
  103.                 $formMapper->end();
  104.                 $formMapper->with(str_repeat(' '$i), ['class' => 'col-md-4']);
  105.             }
  106.             $i++;
  107.         }
  108.         $formMapper->end();
  109.     }
  110.     public function configureQuery($context 'list'): ProxyQueryInterface
  111.     {
  112.         $user $this->security->getUser();
  113.         $dealer $user->getDealer();
  114.         $query parent::configureQuery($context);
  115.         if (!$user->hasRole('ROLE_SUPER_ADMIN')) {
  116.             $query->andWhere(
  117.                 $query->expr()->eq($query->getRootAliases()[0] . '.dealer'':dealer')
  118.             );
  119.             $query->setParameter('dealer'$dealer);
  120.         }
  121.         return $query;
  122.     }
  123. }