src/V4/EventSubscriber/CustomEventTrigger/CustomEventTriggerPreSubmitSubscriber.php line 54

Open in your IDE?
  1. <?php
  2. namespace App\V4\EventSubscriber\CustomEventTrigger;
  3. use App\V4\Builder\CustomEventTrigger\CustomEventTriggerBuilder;
  4. use App\V4\Entity\CustomEventTrigger;
  5. use App\V4\Model\Tab\Tab;
  6. use App\V4\Repository\CustomEventTriggerRepository;
  7. use App\V4\Transformer\FQCNToShortNameTransformer;
  8. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  9. use Symfony\Component\Form\FormEvent;
  10. use Symfony\Component\Form\FormEvents;
  11. use Symfony\Component\HttpFoundation\Request;
  12. use Symfony\Component\HttpFoundation\RequestStack;
  13. class CustomEventTriggerPreSubmitSubscriber implements EventSubscriberInterface
  14. {
  15.     /**
  16.      * @var CustomEventTriggerRepository
  17.      */
  18.     private $customEventTriggerRepository;
  19.     /**
  20.      * @var CustomEventTriggerBuilder
  21.      */
  22.     private $customEventTriggerBuilder;
  23.     /**
  24.      * @var RequestStack
  25.      */
  26.     private $requestStack;
  27.     public function __construct(
  28.         CustomEventTriggerRepository $customEventTriggerRepository,
  29.         CustomEventTriggerBuilder $customEventTriggerBuilder,
  30.         RequestStack $requestStack
  31.     ) {
  32.         $this->customEventTriggerRepository $customEventTriggerRepository;
  33.         $this->customEventTriggerBuilder $customEventTriggerBuilder;
  34.         $this->requestStack $requestStack;
  35.     }
  36.     public static function getSubscribedEvents(): array
  37.     {
  38.         return [
  39.             FormEvents::PRE_SUBMIT => 'onPreSubmit',
  40.         ];
  41.     }
  42.     /**
  43.      * @param FormEvent $event
  44.      *
  45.      * @return void
  46.      */
  47.     public function onPreSubmit(FormEvent $event): void
  48.     {
  49.         $data $event->getData();
  50.         $needToUnsetDataId false;
  51.         if (!isset($data['id'])) {
  52.             $entity $event->getForm()->getData();
  53.             if (method_exists($entity'getId')) {
  54.                 $data['id'] = $entity->getId();
  55.                 $needToUnsetDataId true;
  56.             }
  57.         }
  58.         $customEventTriggers $this
  59.             ->customEventTriggerRepository
  60.             ->searchByEntityAndWhenApply(
  61.                 (new FQCNToShortNameTransformer())->transform($event->getForm()->getConfig()->getDataClass()),
  62.                 CustomEventTrigger::WHEN_PRE_SUBMIT
  63.             )
  64.         ;
  65.         $request $this->requestStack->getCurrentRequest();
  66.         $currentTab Tab::NATIVE;
  67.         if ($request instanceof Request && $request->query->get('tabId')) {
  68.             $currentTab $request->query->get('tabId');
  69.         }
  70.         foreach ($customEventTriggers as $customEventTrigger) {
  71.             if (empty($customEventTrigger->getTabs()) || in_array($currentTab$customEventTrigger->getTabs(), true)) {
  72.                 $data $this
  73.                     ->customEventTriggerBuilder
  74.                     ->getBuilder($data$customEventTrigger)
  75.                     ->apply($data$customEventTrigger);
  76.             }
  77.         }
  78.         if ($needToUnsetDataId) {
  79.             unset($data['id']);
  80.         }
  81.         $event->setData($data);
  82.     }
  83. }