<?phpnamespace App\V4\EventSubscriber\CustomEventTrigger;use App\Service\PreSendSerializer;use App\V4\Builder\CustomEventTrigger\CustomEventTriggerBuilder;use App\V4\Entity\CustomEventTrigger;use App\V4\Event\PostPersistEvent;use App\V4\EventSubscriber\AbstractSubscriber;use App\V4\Model\ChildrenAwareInterface;use App\V4\Model\Prospect\Prospect;use App\V4\Model\Quote\Quote;use App\V4\Repository\CustomEventTriggerRepository;use App\V4\Transformer\FQCNToShortNameTransformer;use Symfony\Component\EventDispatcher\EventSubscriberInterface;use Symfony\Component\Serializer\Exception\ExceptionInterface;class CustomEventTriggerPostPersistSubscriber extends AbstractSubscriber implements EventSubscriberInterface{ /** * @var CustomEventTriggerRepository */ private $customEventTriggerRepository; /** * @var CustomEventTriggerBuilder */ private $customEventTriggerBuilder; /** * @var PreSendSerializer */ private $serializer; /** * @param CustomEventTriggerRepository $customEventTriggerRepository * @param CustomEventTriggerBuilder $customEventTriggerBuilder * @param PreSendSerializer $serializer */ public function __construct( customEventTriggerRepository $customEventTriggerRepository, CustomEventTriggerBuilder $customEventTriggerBuilder, PreSendSerializer $serializer ) { $this->customEventTriggerRepository = $customEventTriggerRepository; $this->customEventTriggerBuilder = $customEventTriggerBuilder; $this->serializer = $serializer; } /** * @return string[] */ public static function getSubscribedEvents(): array { return [ PostPersistEvent::NAME => 'onPostPersist', ]; } /** * @param $entity * * @return bool */ public function supports($entity): bool { if (!$entity instanceof Quote && !$entity instanceof Prospect) { return false; } if ($entity instanceof ChildrenAwareInterface && $entity->isSplit()) { return false; } return true; } /** * @throws ExceptionInterface */ public function onPostPersist(PostPersistEvent $event): void { $entity = $event->getAfter(); if (!$this->supports($entity) || $this->isIdAlreadyManaged($entity->getId(), get_class($this))) { return; } if (method_exists($entity, 'getCustomerFiles')) { $files = $entity->getCustomerFiles(); $entity->setCustomerFiles([]); } $customEventTriggers = $this ->customEventTriggerRepository ->searchByEntityAndWhenApply( (new FQCNToShortNameTransformer())->transform(get_class($entity)), CustomEventTrigger::WHEN_POST_PERSIST ) ; foreach ($customEventTriggers as $customEventTrigger) { $entitySerialized = $this->serializer->serialize($entity); $this ->customEventTriggerBuilder ->getBuilder($entitySerialized, $customEventTrigger) ->apply($entitySerialized, $customEventTrigger) ; } if (isset($files)) { $entity->setCustomerFiles($files); } }}