src/EventSubscriber/ClientSubscriber.php line 37

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\JobQueue;
  4. use App\Service\EsJobQueue;
  5. use App\Handler\UserHandler;
  6. use App\Handler\ClientHandler;
  7. use App\Event\ClientPreUpdateEvent;
  8. use App\Event\ClientPostUpdateEvent;
  9. use App\Event\ClientPrePersistEvent;
  10. use App\Event\ClientPostPersistEvent;
  11. use Symfony\Contracts\Cache\TagAwareCacheInterface;
  12. use App\Service\JobQueueAction\UserSyncContainerAction;
  13. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  14. class ClientSubscriber implements EventSubscriberInterface
  15. {
  16.     public function __construct(
  17.         private ClientHandler $handler,
  18.         private UserHandler $userHandler,
  19.         private TagAwareCacheInterface $esComCache,
  20.         private EsJobQueue $esJobQueue,
  21.     ) {
  22.     }
  23.     public static function getSubscribedEvents(): array
  24.     {
  25.         return [
  26.             ClientPrePersistEvent::NAME => 'preCreate',
  27.             ClientPostPersistEvent::NAME => 'onCreate',
  28.             ClientPreUpdateEvent::NAME => 'onUpdate',
  29.             ClientPostUpdateEvent::NAME => 'onPostUpdate'
  30.         ];
  31.     }
  32.     public function preCreate(ClientPrePersistEvent $event)
  33.     {
  34.         $object $event->getObject();
  35.         $this->updateDisclaimerConfigurations($object);
  36.     }
  37.     public function onCreate(ClientPostPersistEvent $event)
  38.     {
  39.         $object $event->getObject();
  40.         $this->handler->createDefaultUser($object);
  41.     }
  42.     public function onUpdate(ClientPreUpdateEvent $event)
  43.     {
  44.         $object $event->getObject();
  45.         $this->updateDisclaimerConfigurations($object);
  46.         $this->esComCache->invalidateTags(['ES_CLIENT''ES_CONTAINER''ES_MY_CONTAINER''ES_CLIENT_CID']);
  47.     }
  48.     public function onPostUpdate(ClientPostUpdateEvent $event)
  49.     {
  50.         $object $event->getObject();
  51.         if ($object->getIsSyncContainerChanged()) {
  52.             $this->esJobQueue->create(
  53.                 UserSyncContainerAction::NAME,
  54.                 json_encode(['clientId' => $object->getId()]),
  55.                 JobQueue::PRIORITY_LOW
  56.             );
  57.         }
  58.     }
  59.     private function updateDisclaimerConfigurations($object)
  60.     {
  61.         $configurations $object->getConfiguration();
  62.         if (isset($configurations['isDisclaimerPublish']) && $configurations['isDisclaimerPublish'] === true) {
  63.             $configurations['isDisclaimerPublish'] = false;
  64.             $object->replaceConfiguration($configurations);
  65.             $this->userHandler->resetDisclaimerStatus();
  66.         }
  67.     }
  68. }