<?php
/*
* This file is part of the nellapp-manage package.
*
* (c) Benjamin Georgeault <https://www.drosalys.fr/>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace App\EventSubscriber;
use App\Entity\Channel\Group;
use App\Event\EventPersistEvent;
use App\Service\Sign\SignService;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
/**
* Class GroupEventAssociationSubscriber
*
* @author Benjamin Georgeault
*/
class GroupEventAssociationSubscriber implements EventSubscriberInterface
{
public function __construct(
private EntityManagerInterface $em,
private SignService $signService
)
{}
public static function getSubscribedEvents(): array
{
return [
EventPersistEvent::NAME => 'createGroupMemberAssociations',
];
}
public function createGroupMemberAssociations(EventPersistEvent $eventPersistEvent): void
{
$event = $eventPersistEvent->getEvent();
foreach ($event->getPlanningResourceAssociations() as $pra) {
$resource = $pra->getPlanningResource();
if ($resource instanceof Group) {
foreach ($resource->getUsers() as $user) {
$event->createPlanningResourceAssociation($user, false, true, $pra);
}
}
}
$needToGenerateUserSigns = $this->signService->areUserSignsToGenerate($event);
if (count($event->getUserSigns()) > 0 && !$needToGenerateUserSigns) {
$event->getUserSigns()->clear();
$event->setIsUserSignEntityGenerated(false);
} else if ($needToGenerateUserSigns) {
$this->signService->clearEventUserSignsOfRemovedUser($event);
$this->signService->clearEventUserSignsOfNotConfirmed($event);
$this->signService->generateUserSignEntityByEvent($event);
}
$this->em->persist($event);
$this->em->flush();
}
}