src/EventListener/RequestListener.php line 36

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use App\Entity\User;
  4. use App\Repository\SystemActionRepository;
  5. use App\Security\Voter\UserVoter;
  6. use DateTime;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Symfony\Component\HttpFoundation\RedirectResponse;
  9. use Symfony\Component\HttpKernel\Event\RequestEvent;
  10. use Symfony\Component\Routing\RouterInterface;
  11. use Symfony\Component\Security\Core\Authentication\Token\SwitchUserToken;
  12. use Symfony\Component\Security\Core\Security;
  13. class RequestListener
  14. {
  15.     private SystemActionRepository $systemActionRepository;
  16.     private Security $security;
  17.     private RouterInterface $router;
  18.     private EntityManagerInterface $em;
  19.     public function __construct(
  20.         SystemActionRepository $systemActionRepository,
  21.         Security $security,
  22.         RouterInterface $router,
  23.         EntityManagerInterface $em
  24.     )
  25.     {
  26.         $this->systemActionRepository $systemActionRepository;
  27.         $this->security $security;
  28.         $this->router $router;
  29.         $this->em $em;
  30.     }
  31.     public function onKernelRequest(RequestEvent $event)
  32.     {
  33.         if (!$event->isMasterRequest()) {
  34.             // don't do anything if it's not the master request
  35.             return;
  36.         }
  37.         /** @var User $user */
  38.         $user $this->security->getUser();
  39.         if(!$user) {
  40.             // only for authorised users
  41.             return;
  42.         }
  43.         // request identificator
  44.         $request $event->getRequest();
  45.         $requestId = (new \Monolog\Processor\UidProcessor(16))->getUid();uniqid('req_'true);
  46.         
  47.         $request->attributes->set('request_id'$requestId);
  48.         $urlCodexIndex $this->router->generate('app_codex_index');
  49.         if (
  50.             $this->security->isGranted(UserVoter::SHOW_FULLY_STUDENT)
  51.             && !$user->getIsCheckCodex()
  52.             && $event->getRequest()->getPathInfo() !== $this->router->generate('app_codex_index')
  53.         ) {
  54.             $event->setResponse(new RedirectResponse($urlCodexIndex));
  55.         }
  56.         if (!($this->security->getToken() instanceof SwitchUserToken)) {
  57.             $user->setLastActivityAt(new DateTime());
  58.         }
  59.         $this->em->persist($user);
  60.         $this->em->flush();
  61.         $this->systemActionRepository->saveByRequest($event->getRequest(), $this->security);
  62.     }
  63. }