<?php
namespace MedBrief\MSR\EventListener;
//use Symfony\Component\Security\Core\User\UserInterface;
use DateTime;
use Doctrine\ORM\EntityManagerInterface;
use MedBrief\MSR\Entity\User;
use Symfony\Component\HttpKernel\Event\ControllerEvent;
use Symfony\Component\HttpKernel\HttpKernel;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
/**
* Listener that updates the last activity of the authenticated user
*/
class ActivityListener
{
public function __construct(protected TokenStorageInterface $tokenStorage, protected EntityManagerInterface $entityManager)
{
}
/**
* Update the user "lastActivity" on each request
*
* @param ControllerEvent $event
*/
public function onCoreController(ControllerEvent $event): void
{
// Check that the current request is a "MASTER_REQUEST"
// Ignore any sub-request
if ($event->getRequestType() !== HttpKernel::MASTER_REQUEST) {
return;
}
// Check token authentication availability
if ($this->tokenStorage->getToken()) {
$user = $this->tokenStorage->getToken()->getUser();
if (($user instanceof User)) {
$user->setLastActivity(new DateTime('now'));
$this->entityManager->flush($user);
}
}
}
}