src/EventListener/EventCanceledListener.php line 91

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Harmonizely\EventListener;
  4. use Exception;
  5. use Harmonizely\Background\Data\EventMailManagerData;
  6. use Harmonizely\Calendar\ExternalCalendarManager;
  7. use Harmonizely\EmailManager\EventEmailManagerInterface;
  8. use Harmonizely\Mailer\AllowedSendingEmailNotificationToInviteePolicy;
  9. use Harmonizely\Model\EventInterface;
  10. use Harmonizely\Service\Core\Contract\ICompanySelector;
  11. use Psr\Log\LoggerInterface;
  12. use Symfony\Component\EventDispatcher\GenericEvent;
  13. use Webmozart\Assert\Assert;
  14. final class EventCanceledListener
  15. {
  16.     private $externalCalendarManager;
  17.     private $logger;
  18.     private AllowedSendingEmailNotificationToInviteePolicy $allowedSendingEmailNotificationToInviteePolicy;
  19.     private ICompanySelector $companySelector;
  20.     private EventEmailManagerInterface $eventEmailManager;
  21.     public function __construct(
  22.         ExternalCalendarManager $externalCalendarManager,
  23.         LoggerInterface $logger,
  24.         AllowedSendingEmailNotificationToInviteePolicy $allowedSendingEmailNotificationToInviteePolicy,
  25.         ICompanySelector $companySelector,
  26.         EventEmailManagerInterface $eventEmailManager
  27.     ) {
  28.         $this->externalCalendarManager $externalCalendarManager;
  29.         $this->logger $logger;
  30.         $this->allowedSendingEmailNotificationToInviteePolicy $allowedSendingEmailNotificationToInviteePolicy;
  31.         $this->companySelector $companySelector;
  32.         $this->eventEmailManager $eventEmailManager;
  33.     }
  34.     public function sendEmail(GenericEvent $event): void
  35.     {
  36.         $isCancelFollowing $event->hasArgument('isCancelFollowing') && $event->getArgument('isCancelFollowing');
  37.         /** @var EventInterface $event */
  38.         $event $event->getSubject();
  39.         Assert::isInstanceOf($eventEventInterface::class);
  40.         if ($event->getCancellation() && !$event->getCancellation()->isSendNotification()) {
  41.             return;
  42.         }
  43.         $this->eventEmailManager->sendBackgroundNotification(new EventMailManagerData(
  44.             $event->getId(),
  45.             EventMailManagerData::CANCELLATION_NOTIFY,
  46.             $this->companySelector->getCompany(),
  47.             [
  48.                 'isCancelFollowing' => $isCancelFollowing,
  49.             ]
  50.         ));
  51.     }
  52.     public function sendCancellationNotifyToInvitee(GenericEvent $event): void
  53.     {
  54.         $isCancelFollowing $event->hasArgument('isCancelFollowing') && $event->getArgument('isCancelFollowing');
  55.         /** @var EventInterface $event */
  56.         $event $event->getSubject();
  57.         Assert::isInstanceOf($eventEventInterface::class);
  58.         if (false === ($this->allowedSendingEmailNotificationToInviteePolicy)($event)) {
  59.             return;
  60.         }
  61.         if ($event->getCancellation() && !$event->getCancellation()->isSendNotification()) {
  62.             return;
  63.         }
  64.         $this->eventEmailManager->sendBackgroundNotification(new EventMailManagerData(
  65.             $event->getId(),
  66.             EventMailManagerData::CANCELLATION_NOTIFY_TO_INVITEE,
  67.             $this->companySelector->getCompany(),
  68.             [
  69.                 'isCancelFollowing' => $isCancelFollowing,
  70.             ]
  71.         ));
  72.     }
  73.     public function calDavCancel(GenericEvent $event): void
  74.     {
  75.         //TODO - не вызывать при отмене через гугл или аутблук
  76.         /** @var EventInterface $event */
  77.         $event $event->getSubject();
  78.         Assert::isInstanceOf($eventEventInterface::class);
  79.         try {
  80.             $this->externalCalendarManager->remove($event);
  81.         } catch (Exception $e) {
  82.             $this->logger->error($e->getMessage());
  83.         }
  84.     }
  85. }