src/V4/EventSubscriber/CustomEventTrigger/CustomEventTriggerPostPersistSubscriber.php line 86

Open in your IDE?
  1. <?php
  2. namespace App\V4\EventSubscriber\CustomEventTrigger;
  3. use App\Service\PreSendSerializer;
  4. use App\V4\Builder\CustomEventTrigger\CustomEventTriggerBuilder;
  5. use App\V4\Entity\CustomEventTrigger;
  6. use App\V4\Event\PostPersistEvent;
  7. use App\V4\EventSubscriber\AbstractSubscriber;
  8. use App\V4\Model\ChildrenAwareInterface;
  9. use App\V4\Model\Prospect\Prospect;
  10. use App\V4\Model\Quote\Quote;
  11. use App\V4\Model\Tab\Tab;
  12. use App\V4\Model\Task\Task;
  13. use App\V4\Repository\CustomEventTriggerRepository;
  14. use App\V4\Transformer\FQCNToShortNameTransformer;
  15. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  16. use Symfony\Component\HttpFoundation\Request;
  17. use Symfony\Component\HttpFoundation\RequestStack;
  18. use Symfony\Component\Serializer\Exception\ExceptionInterface;
  19. class CustomEventTriggerPostPersistSubscriber extends AbstractSubscriber implements EventSubscriberInterface
  20. {
  21.     /**
  22.      * @var CustomEventTriggerRepository
  23.      */
  24.     private $customEventTriggerRepository;
  25.     /**
  26.      * @var CustomEventTriggerBuilder
  27.      */
  28.     private $customEventTriggerBuilder;
  29.     /**
  30.      * @var PreSendSerializer
  31.      */
  32.     private $serializer;
  33.     /**
  34.      * @var RequestStack
  35.      */
  36.     private $requestStack;
  37.     public function __construct(
  38.         customEventTriggerRepository $customEventTriggerRepository,
  39.         CustomEventTriggerBuilder $customEventTriggerBuilder,
  40.         PreSendSerializer $serializer,
  41.         RequestStack $requestStack
  42.     ) {
  43.         $this->customEventTriggerRepository $customEventTriggerRepository;
  44.         $this->customEventTriggerBuilder $customEventTriggerBuilder;
  45.         $this->serializer $serializer;
  46.         $this->requestStack $requestStack;
  47.     }
  48.     /**
  49.      * @return string[]
  50.      */
  51.     public static function getSubscribedEvents(): array
  52.     {
  53.         return [
  54.             PostPersistEvent::NAME => 'onPostPersist',
  55.         ];
  56.     }
  57.     /**
  58.      * @param $entity
  59.      *
  60.      * @return bool
  61.      */
  62.     public function supports($entity): bool
  63.     {
  64.         if (!$entity instanceof Quote && !$entity instanceof Prospect && !$entity instanceof Task) {
  65.             return false;
  66.         }
  67.         if ($entity instanceof ChildrenAwareInterface && $entity->isSplit()) {
  68.             return false;
  69.         }
  70.         return true;
  71.     }
  72.     /**
  73.      * @throws ExceptionInterface
  74.      */
  75.     public function onPostPersist(PostPersistEvent $event): void
  76.     {
  77.         $entity $event->getAfter();
  78.         if (!$this->supports($entity) || $this->isIdAlreadyManaged($entity->getId(), get_class($this))) {
  79.             return;
  80.         }
  81.         if (method_exists($entity'getCustomerFiles')) {
  82.             $files $entity->getCustomerFiles();
  83.             $entity->setCustomerFiles([]);
  84.         }
  85.         $customEventTriggers $this
  86.             ->customEventTriggerRepository
  87.             ->searchByEntityAndWhenApply(
  88.                 (new FQCNToShortNameTransformer())->transform(get_class($entity)),
  89.                 CustomEventTrigger::WHEN_POST_PERSIST
  90.             )
  91.         ;
  92.         $request $this->requestStack->getCurrentRequest();
  93.         $currentTab Tab::NATIVE;
  94.         if ($request instanceof Request && $request->query->get('tabId')) {
  95.             $currentTab $request->query->get('tabId');
  96.         }
  97.         foreach ($customEventTriggers as $customEventTrigger) {
  98.             if (empty($customEventTrigger->getTabs()) || in_array($currentTab$customEventTrigger->getTabs(), true)) {
  99.                 $entitySerialized $this->serializer->serialize($entity);
  100.                 $this
  101.                     ->customEventTriggerBuilder
  102.                     ->getBuilder($entitySerialized$customEventTrigger)
  103.                     ->apply($entitySerialized$customEventTrigger);
  104.             }
  105.         }
  106.         if (isset($files)) {
  107.             $entity->setCustomerFiles($files);
  108.         }
  109.     }
  110. }