<?php
// App/EventListener/RequestListener.php
namespace App\EventListener;
use App\Entity\SessionInfos;
use App\Entity\VisitedPages;
use App\Kernel;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
use Symfony\Component\HttpKernel\HttpKernelInterface;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\Routing\RouterInterface;
use Symfony\Component\Security\Core\Authorization\AuthorizationChecker;
use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\Validator\Constraints\DateTime;
class RequestListener
{
private $entityManager;
private $tokenStorage;
private $router;
private $securityChecker;
private $session;
private $kernel;
public function __construct
(
RouterInterface $router,
Kernel $kernel,
SessionInterface $session,
EntityManagerInterface $entityManager,
TokenStorageInterface $tokenStorage,
AuthorizationCheckerInterface $authorizationChecker
)
{
$this->entityManager = $entityManager;
$this->tokenStorage = $tokenStorage;
$this->router = $router;
$this->securityChecker = $authorizationChecker;
$this->session = $session;
$this->kernel = $kernel;
}
public function onKernelTerminate()
{
$token = $this->tokenStorage->getToken();
$user = ($token) ? $token->getUser() : null;
if(null != $user && 'anon.' != $user){
$session = $this->entityManager->getRepository(SessionInfos::class)->findTodaySession($user->getId());
if(!empty($session)){
$session->setLastActivityDate(new \DateTime('now'));
$this->entityManager->persist($session);
$this->entityManager->flush();
}else{
$session = new SessionInfos();
$session->setXutilisateur($user->getId());
$session->setXprofile($user->getProfil());
$this->entityManager->persist($session);
$this->entityManager->flush();
}
}
}
}