src/Service/EventSubscriber/DirectorySubscriber.php line 58

Open in your IDE?
  1. <?php
  2. namespace Harmonizely\Service\EventSubscriber;
  3. use Harmonizely\Background\Data\DirectoryDeleteCompanyEventData;
  4. use Harmonizely\Background\Data\DirectorySaveCompanyEventData;
  5. use Harmonizely\Core\BackgroundWork\Contract\IClient;
  6. use Harmonizely\Core\Security\Contract\ISecurityHelper;
  7. use Harmonizely\Model\EventTypeInterface;
  8. use Harmonizely\Service\Core\Contract\ICompanySelector;
  9. use Harmonizely\Service\Event\CreateEventTypeEvent;
  10. use Harmonizely\Service\Event\DeleteEventTypeEvent;
  11. use Harmonizely\Service\Event\UpdateEventTypeEvent;
  12. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  13. class DirectorySubscriber implements EventSubscriberInterface
  14. {
  15.     /**
  16.      * @var IClient
  17.      */
  18.     private IClient $backgroundClient;
  19.     /**
  20.      * @var ISecurityHelper
  21.      */
  22.     private ISecurityHelper $securityHelper;
  23.     /**
  24.      * @var ICompanySelector
  25.      */
  26.     private ICompanySelector $companySelector;
  27.     /**
  28.      * @param IClient $backgroundClient
  29.      * @param ISecurityHelper $securityHelper
  30.      * @param ICompanySelector $companySelector
  31.      */
  32.     public function __construct(
  33.         IClient $backgroundClient,
  34.         ISecurityHelper $securityHelper,
  35.         ICompanySelector $companySelector
  36.     )
  37.     {
  38.         $this->backgroundClient $backgroundClient;
  39.         $this->securityHelper $securityHelper;
  40.         $this->companySelector $companySelector;
  41.     }
  42.     /**
  43.      * @return string[]
  44.      */
  45.     public static function getSubscribedEvents(): array
  46.     {
  47.         return [
  48.             CreateEventTypeEvent::NAME => 'createEventType',
  49.             UpdateEventTypeEvent::NAME => 'updateEventType',
  50.             DeleteEventTypeEvent::NAME => 'deleteEventType',
  51.         ];
  52.     }
  53.     /**
  54.      * @param CreateEventTypeEvent $event
  55.      * @return void
  56.      */
  57.     public function createEventType(CreateEventTypeEvent $event): void
  58.     {
  59.         $this->saveOrDeleteEventType($event->getEventType());
  60.     }
  61.     /**
  62.      * @param UpdateEventTypeEvent $event
  63.      * @return void
  64.      */
  65.     public function updateEventType(UpdateEventTypeEvent $event): void
  66.     {
  67.         $this->saveOrDeleteEventType($event->getEventType());
  68.     }
  69.     /**
  70.      * @param DeleteEventTypeEvent $event
  71.      * @return void
  72.      */
  73.     public function deleteEventType(DeleteEventTypeEvent $event): void
  74.     {
  75.         $user $this->securityHelper->getUser();
  76.         $this->backgroundClient->add(new DirectoryDeleteCompanyEventData(
  77.             $user->getId(),
  78.             $event->getEventTypeId(),
  79.             $this->companySelector->getCompany()
  80.         ));
  81.         $this->backgroundClient->runJobs();
  82.     }
  83.     /**
  84.      * @param EventTypeInterface $eventType
  85.      * @return void
  86.      */
  87.     private function saveOrDeleteEventType(EventTypeInterface $eventType): void
  88.     {
  89.         $user $this->securityHelper->getUser();
  90.         if ($eventType->isEnabled() && !$eventType->isSecret()) {
  91.             $this->backgroundClient->add(new DirectorySaveCompanyEventData(
  92.                 $user->getId(),
  93.                 $eventType->getId(),
  94.                 $this->companySelector->getCompany()
  95.             ));
  96.         } else {
  97.             $this->backgroundClient->add(new DirectoryDeleteCompanyEventData(
  98.                 $user->getId(),
  99.                 $eventType->getId(),
  100.                 $this->companySelector->getCompany()
  101.             ));
  102.         }
  103.         $this->backgroundClient->runJobs();
  104.     }
  105. }