src/EventSubscriber/GroupEventAssociationSubscriber.php line 40

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of the nellapp-manage package.
  4.  *
  5.  * (c) Benjamin Georgeault <https://www.drosalys.fr/>
  6.  *
  7.  * For the full copyright and license information, please view the LICENSE
  8.  * file that was distributed with this source code.
  9.  */
  10. namespace App\EventSubscriber;
  11. use App\Entity\Channel\Group;
  12. use App\Event\EventPersistEvent;
  13. use App\Service\Sign\SignService;
  14. use Doctrine\ORM\EntityManagerInterface;
  15. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  16. /**
  17.  * Class GroupEventAssociationSubscriber
  18.  *
  19.  * @author Benjamin Georgeault
  20.  */
  21. class GroupEventAssociationSubscriber implements EventSubscriberInterface
  22. {
  23.     public function __construct(
  24.         private EntityManagerInterface $em,
  25.         private SignService $signService
  26.     )
  27.     {}
  28.     public static function getSubscribedEvents(): array
  29.     {
  30.         return [
  31.             EventPersistEvent::NAME => 'createGroupMemberAssociations',
  32.         ];
  33.     }
  34.     public function createGroupMemberAssociations(EventPersistEvent $eventPersistEvent): void
  35.     {
  36.         $event $eventPersistEvent->getEvent();
  37.         foreach ($event->getPlanningResourceAssociations() as $pra) {
  38.             $resource $pra->getPlanningResource();
  39.             if ($resource instanceof Group) {
  40.                 foreach ($resource->getUsers() as $user) {
  41.                     $event->createPlanningResourceAssociation($userfalsetrue$pra);
  42.                 }
  43.             }
  44.         }
  45.         $needToGenerateUserSigns $this->signService->areUserSignsToGenerate($event);
  46.         if (count($event->getUserSigns()) > && !$needToGenerateUserSigns) {
  47.             $event->getUserSigns()->clear();
  48.             $event->setIsUserSignEntityGenerated(false);
  49.         } else if ($needToGenerateUserSigns) {
  50.             $this->signService->clearEventUserSignsOfRemovedUser($event);
  51.             $this->signService->clearEventUserSignsOfNotConfirmed($event);
  52.             $this->signService->generateUserSignEntityByEvent($event);
  53.         }
  54.         $this->em->persist($event);
  55.         $this->em->flush();
  56.     }
  57. }