src/EventSubscriber/ContainerSubscriber.php line 79

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\JobQueue;
  4. use App\Service\EsJobQueue;
  5. use App\Handler\ContainerHandler;
  6. use App\Event\ContainerPreRemoveEvent;
  7. use App\Event\ContainerPreUpdateEvent;
  8. use App\Event\ContainerPrePersistEvent;
  9. use App\Event\ContainerPostPersistEvent;
  10. use Doctrine\ORM\EntityManagerInterface;
  11. use Symfony\Contracts\Cache\TagAwareCacheInterface;
  12. use App\Service\JobQueueAction\CloneContainerAction;
  13. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  14. class ContainerSubscriber implements EventSubscriberInterface
  15. {
  16.     public function __construct(
  17.         private EntityManagerInterface $_em,
  18.         private ContainerHandler $containerHandler,
  19.         private TagAwareCacheInterface $esComCache,
  20.         private EsJobQueue $esJobQueue,
  21.     ) {
  22.     }
  23.     public static function getSubscribedEvents(): array
  24.     {
  25.         return [
  26.             ContainerPrePersistEvent::NAME => 'preCreate',
  27.             ContainerPostPersistEvent::NAME => 'onCreate',
  28.             ContainerPreUpdateEvent::NAME => 'onUpdate',
  29.             ContainerPreRemoveEvent::NAME => 'onPreRemove'
  30.         ];
  31.     }
  32.     public function preCreate(ContainerPrePersistEvent $event)
  33.     {
  34.         $object $event->getObject();
  35.         if ($object->getCloneId() < 1) {
  36.             $object $this->containerHandler->createDefaultNavigation($object);
  37.             $object $this->containerHandler->createDefaultUserStaticFields($object);
  38.         }
  39.         $event->setObject($object);
  40.     }
  41.     public function onCreate(ContainerPostPersistEvent $event)
  42.     {
  43.         $object $event->getObject();
  44.         $oldId $object->getOldId();
  45.         if ($oldId 1) {
  46.             $this->containerHandler->createDefaultLanguage($object);
  47.             // $this->containerHandler->createDefaultEmailTemplate($object);
  48.         } else {
  49.             $this->containerHandler->copyLanguage($object$oldId);
  50.             $this->containerHandler->copyBackground($object$oldId);
  51.             $this->containerHandler->copyEmailTemplate($object$oldId);
  52.             // $this->containerHandler->copyInfoPage($object, $oldId);
  53.             $object->removeAllUserGroups();
  54.         }
  55.         $this->containerHandler->createContainerUserGroup($object);
  56.         $this->containerHandler->attachSuperAdminToContainer($object);
  57.         if ($object->getClient()->getIsCommunitySharingEnable()) {
  58.             $this->containerHandler->assignUserGroupAllUser($object);
  59.         }
  60.         if ($oldId 0) {
  61.             $this->esJobQueue->create(
  62.                 CloneContainerAction::NAME,
  63.                 json_encode([
  64.                     'containerId' => $object->getId()
  65.                 ]),
  66.                 JobQueue::PRIORITY_LOW,
  67.                 $object
  68.             );
  69.         }
  70.     }
  71.     public function onUpdate(ContainerPreUpdateEvent $event)
  72.     {
  73.         $object $event->getObject();
  74.         //$this->esComCache->invalidateTags(['ES_CONTAINER_'.$object->getId(), 'ES_MY_CONTAINER_'.$object->getId()]);
  75.         $this->esComCache->invalidateTags(['ES_CONTAINER''ES_MY_CONTAINER''ES_CLIENT_CID']);
  76.     }
  77.     public function onPreRemove(ContainerPreRemoveEvent $event)
  78.     {
  79.         $object $event->getObject();
  80.         $userGroups $object->getUserGroups();
  81.         if ($userGroups) {
  82.             foreach ($userGroups as $userGroup) {
  83.                 if ($userGroup->getIsGenerated()) {
  84.                     $this->_em->remove($userGroup);
  85.                 }
  86.             }
  87.             $this->_em->flush();
  88.         }
  89.     }
  90. }