src/Service/EventSubscriber/ApproveEventSubscriber.php line 100

Open in your IDE?
  1. <?php
  2. namespace Harmonizely\Service\EventSubscriber;
  3. use Harmonizely\Background\Data\EventMailManagerData;
  4. use Harmonizely\CalendarEvents;
  5. use Harmonizely\EmailManager\EventEmailManagerInterface;
  6. use Harmonizely\Entity\Company\ApproveEventEntity;
  7. use Harmonizely\Model\Event;
  8. use Harmonizely\Model\EventInterface;
  9. use Harmonizely\Repository\Company\Contract\IApproveEventRepository;
  10. use Harmonizely\Service\Core\Contract\ICompanySelector;
  11. use Harmonizely\Service\Panel\Api\ApproveEvent\Contract\IIsApproveEventRequired;
  12. use Harmonizely\Types\Company\ApproveEventStatus;
  13. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  14. use Symfony\Component\EventDispatcher\GenericEvent;
  15. class ApproveEventSubscriber implements EventSubscriberInterface
  16. {
  17.     /**
  18.      * @var IIsApproveEventRequired
  19.      */
  20.     private IIsApproveEventRequired $isApproveEventRequired;
  21.     /**
  22.      * @var IApproveEventRepository
  23.      */
  24.     private IApproveEventRepository $approveEventRepository;
  25.     /**
  26.      * @var ICompanySelector
  27.      */
  28.     private ICompanySelector $companySelector;
  29.     /**
  30.      * @var EventEmailManagerInterface
  31.      */
  32.     private EventEmailManagerInterface $eventEmailManager;
  33.     /**
  34.      * @param IIsApproveEventRequired $isApproveEventRequired
  35.      * @param IApproveEventRepository $approveEventRepository
  36.      * @param ICompanySelector $companySelector
  37.      * @param EventEmailManagerInterface $eventEmailManager
  38.      */
  39.     public function __construct(
  40.         IIsApproveEventRequired $isApproveEventRequired,
  41.         IApproveEventRepository $approveEventRepository,
  42.         ICompanySelector $companySelector,
  43.         EventEmailManagerInterface $eventEmailManager
  44.     )
  45.     {
  46.         $this->isApproveEventRequired $isApproveEventRequired;
  47.         $this->approveEventRepository $approveEventRepository;
  48.         $this->companySelector $companySelector;
  49.         $this->eventEmailManager $eventEmailManager;
  50.     }
  51.     /**
  52.      * @return string[]
  53.      */
  54.     public static function getSubscribedEvents(): array
  55.     {
  56.         return [
  57.             CalendarEvents::EVENT_AFTER_PERSIST => 'afterPersistEvent',
  58.             CalendarEvents::EVENT_POST_CREATE => 'eventPostCreate',
  59.         ];
  60.     }
  61.     /**
  62.      * @param GenericEvent $genericEvent
  63.      * @return void
  64.      */
  65.     public function afterPersistEvent(GenericEvent $genericEvent): void
  66.     {
  67.         /** @var Event $event */
  68.         $event $genericEvent->getSubject();
  69.         if (!$this->isApproveEventRequired->perform($eventtrue)) {
  70.             return;
  71.         }
  72.         $approveEvent = new ApproveEventEntity($event);
  73.         $this->approveEventRepository->save($approveEvent);
  74.         $event->setApproveEvent($approveEvent);
  75.         $this->eventEmailManager->sendBackgroundNotification(new EventMailManagerData(
  76.             $event->getId(),
  77.             EventMailManagerData::NEW_EVENT_EMAIL_CONFIRMATION,
  78.             $this->companySelector->getCompany()
  79.         ));
  80.     }
  81.     /**
  82.      * @param GenericEvent $genericEvent
  83.      * @return void
  84.      */
  85.     public function eventPostCreate(GenericEvent $genericEvent)
  86.     {
  87.         /** @var EventInterface $event */
  88.         $event $genericEvent->getSubject();
  89.         $approveEvent $event->getApproveEvent();
  90.         if ($approveEvent && $approveEvent->getStatus() === ApproveEventStatus::STATUS_NEW) {
  91.             $approveEvent->approve();
  92.             $this->approveEventRepository->save($approveEvent);
  93.         }
  94.     }
  95. }