<?php
namespace App\EventSubscriber;
use App\Entity\JobQueue;
use App\Service\EsJobQueue;
use App\Handler\UserHandler;
use App\Handler\ClientHandler;
use App\Event\ClientPreUpdateEvent;
use App\Event\ClientPostUpdateEvent;
use App\Event\ClientPrePersistEvent;
use App\Event\ClientPostPersistEvent;
use Symfony\Contracts\Cache\TagAwareCacheInterface;
use App\Service\JobQueueAction\UserSyncContainerAction;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class ClientSubscriber implements EventSubscriberInterface
{
public function __construct(
private ClientHandler $handler,
private UserHandler $userHandler,
private TagAwareCacheInterface $esComCache,
private EsJobQueue $esJobQueue,
) {
}
public static function getSubscribedEvents(): array
{
return [
ClientPrePersistEvent::NAME => 'preCreate',
ClientPostPersistEvent::NAME => 'onCreate',
ClientPreUpdateEvent::NAME => 'onUpdate',
ClientPostUpdateEvent::NAME => 'onPostUpdate'
];
}
public function preCreate(ClientPrePersistEvent $event)
{
$object = $event->getObject();
$this->updateDisclaimerConfigurations($object);
}
public function onCreate(ClientPostPersistEvent $event)
{
$object = $event->getObject();
$this->handler->createDefaultUser($object);
}
public function onUpdate(ClientPreUpdateEvent $event)
{
$object = $event->getObject();
$this->updateDisclaimerConfigurations($object);
$this->esComCache->invalidateTags(['ES_CLIENT', 'ES_CONTAINER', 'ES_MY_CONTAINER', 'ES_CLIENT_CID']);
}
public function onPostUpdate(ClientPostUpdateEvent $event)
{
$object = $event->getObject();
if ($object->getIsSyncContainerChanged()) {
$this->esJobQueue->create(
UserSyncContainerAction::NAME,
json_encode(['clientId' => $object->getId()]),
JobQueue::PRIORITY_LOW
);
}
}
private function updateDisclaimerConfigurations($object)
{
$configurations = $object->getConfiguration();
if (isset($configurations['isDisclaimerPublish']) && $configurations['isDisclaimerPublish'] === true) {
$configurations['isDisclaimerPublish'] = false;
$object->replaceConfiguration($configurations);
$this->userHandler->resetDisclaimerStatus();
}
}
}