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

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\Repository\CustomEventTriggerRepository;
  12. use App\V4\Transformer\FQCNToShortNameTransformer;
  13. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  14. use Symfony\Component\Serializer\Exception\ExceptionInterface;
  15. class CustomEventTriggerPostPersistSubscriber extends AbstractSubscriber implements EventSubscriberInterface
  16. {
  17.     /**
  18.      * @var CustomEventTriggerRepository
  19.      */
  20.     private $customEventTriggerRepository;
  21.     /**
  22.      * @var CustomEventTriggerBuilder
  23.      */
  24.     private $customEventTriggerBuilder;
  25.     /**
  26.      * @var PreSendSerializer
  27.      */
  28.     private $serializer;
  29.     /**
  30.      * @param CustomEventTriggerRepository $customEventTriggerRepository
  31.      * @param CustomEventTriggerBuilder    $customEventTriggerBuilder
  32.      * @param PreSendSerializer            $serializer
  33.      */
  34.     public function __construct(
  35.         customEventTriggerRepository $customEventTriggerRepository,
  36.         CustomEventTriggerBuilder $customEventTriggerBuilder,
  37.         PreSendSerializer $serializer
  38.     ) {
  39.         $this->customEventTriggerRepository $customEventTriggerRepository;
  40.         $this->customEventTriggerBuilder $customEventTriggerBuilder;
  41.         $this->serializer $serializer;
  42.     }
  43.     /**
  44.      * @return string[]
  45.      */
  46.     public static function getSubscribedEvents(): array
  47.     {
  48.         return [
  49.             PostPersistEvent::NAME => 'onPostPersist',
  50.         ];
  51.     }
  52.     /**
  53.      * @param $entity
  54.      *
  55.      * @return bool
  56.      */
  57.     public function supports($entity): bool
  58.     {
  59.         if (!$entity instanceof Quote && !$entity instanceof Prospect) {
  60.             return false;
  61.         }
  62.         if ($entity instanceof ChildrenAwareInterface && $entity->isSplit()) {
  63.             return false;
  64.         }
  65.         return true;
  66.     }
  67.     /**
  68.      * @throws ExceptionInterface
  69.      */
  70.     public function onPostPersist(PostPersistEvent $event): void
  71.     {
  72.         $entity $event->getAfter();
  73.         if (!$this->supports($entity) || $this->isIdAlreadyManaged($entity->getId(), get_class($this))) {
  74.             return;
  75.         }
  76.         if (method_exists($entity'getCustomerFiles')) {
  77.             $files $entity->getCustomerFiles();
  78.             $entity->setCustomerFiles([]);
  79.         }
  80.         $customEventTriggers $this
  81.             ->customEventTriggerRepository
  82.             ->searchByEntityAndWhenApply(
  83.                 (new FQCNToShortNameTransformer())->transform(get_class($entity)),
  84.                 CustomEventTrigger::WHEN_POST_PERSIST
  85.             )
  86.         ;
  87.         foreach ($customEventTriggers as $customEventTrigger) {
  88.             $entitySerialized $this->serializer->serialize($entity);
  89.             $this
  90.                 ->customEventTriggerBuilder
  91.                 ->getBuilder($entitySerialized$customEventTrigger)
  92.                 ->apply($entitySerialized$customEventTrigger)
  93.             ;
  94.         }
  95.         if (isset($files)) {
  96.             $entity->setCustomerFiles($files);
  97.         }
  98.     }
  99. }