<?php
namespace App\EventSubscriber;
use App\Entity\User;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpKernel\Event\ControllerEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\Routing\RouterInterface;
use Symfony\Component\Security\Core\Security;
use Symfony\Contracts\Service\Attribute\Required;
/**
* Si l'utilisateur connecté, on le redirige vers la page RGPD tant qu'il ne la pas accepté.
*
* @package App\EventSubscriber
*/
class RgpdUserSubscriber implements EventSubscriberInterface
{
#[Required]
public Security $security;
#[Required]
public RouterInterface $router;
public static function getSubscribedEvents(): array
{
return [
KernelEvents::CONTROLLER => 'onKernelController',
];
}
public function onKernelController(ControllerEvent $event)
{
if ($event->isMainRequest()) {
$controller = $event->getController();
if (is_array($controller) && isset($controller[1]) && $controller[1] != 'checkRGPD') {
/** @var User $user */
$user = $this->security->getUser();
// Si je suis connecté en tant que Conseiller ou EPCI, et que je n'ai pas déjà validé mon RPGD, je suis redir
if ($user && $user->getLastRgpdValidation() === null) {
$rgpdRoute = $this->router->generate('check_rgpd');
$event->setController(function () use ($rgpdRoute) {
return new RedirectResponse($rgpdRoute);
});
}
}
}
}
}