<?php
namespace App\EventListener;
use App\Entity\User;
use App\Repository\UserRepository;
use App\Repository\DatedocumentRepository;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
class SecurityListener implements EventSubscriberInterface
{
private $session;
private $dateDocRepo;
private $userRepo;
private $tokenStorage;
public function __construct(
SessionInterface $session,
DatedocumentRepository $dateDocRepo,
UserRepository $userRepo,
TokenStorageInterface $tokenStorage
) {
$this->session = $session;
$this->dateDocRepo = $dateDocRepo;
$this->userRepo = $userRepo;
$this->tokenStorage = $tokenStorage;
}
public function onKernelRequest(RequestEvent $event)
{
// Utiliser TokenStorage au lieu de unserialize
$token = $this->tokenStorage->getToken();
if ($token && $token->getUser() instanceof User) {
$user = $token->getUser();
$userFound = $this->userRepo->findOneById($user->getId());
$dateAccepted = null;
$plateform = 1;
// Vérifier que l'utilisateur a des rôles
$roles = $userFound->getRoles();
if (!empty($roles)) {
switch ($roles[0]) {
case 'ROLE_PHARMACIE':
$plateform = 3;
break;
case 'ROLE_GROSSISTE':
$plateform = 4;
break;
case 'ROLE_PRESCRIPTEUR':
$plateform = 5;
break;
default:
$plateform = 1;
break;
}
}
$dateModifCGU = $this->dateDocRepo->findDateModificationCGU($plateform);
if (!is_null($dateModifCGU)) {
$dateModifCGU = $dateModifCGU[0]['datemodification']->format('d-m-Y');
}
if (!is_null($userFound->isCguaccepted())) {
$dateAccepted = $userFound->isCguaccepted()->format('d-m-Y');
}
if ($dateAccepted < $dateModifCGU) {
$this->session->set('cgu_session', true);
} else {
$this->session->set('cgu_session', false);
}
}
}
public static function getSubscribedEvents()
{
return [
KernelEvents::REQUEST => 'onKernelRequest',
];
}
}