src/EventListener/ActivityListener.php line 27

Open in your IDE?
  1. <?php
  2. namespace MedBrief\MSR\EventListener;
  3. //use Symfony\Component\Security\Core\User\UserInterface;
  4. use DateTime;
  5. use Doctrine\ORM\EntityManagerInterface;
  6. use MedBrief\MSR\Entity\User;
  7. use Symfony\Component\HttpKernel\Event\ControllerEvent;
  8. use Symfony\Component\HttpKernel\HttpKernel;
  9. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  10. /**
  11. * Listener that updates the last activity of the authenticated user
  12. */
  13. class ActivityListener
  14. {
  15. public function __construct(protected TokenStorageInterface $tokenStorage, protected EntityManagerInterface $entityManager)
  16. {
  17. }
  18. /**
  19. * Update the user "lastActivity" on each request
  20. *
  21. * @param ControllerEvent $event
  22. */
  23. public function onCoreController(ControllerEvent $event): void
  24. {
  25. // Check that the current request is a "MASTER_REQUEST"
  26. // Ignore any sub-request
  27. if ($event->getRequestType() !== HttpKernel::MASTER_REQUEST) {
  28. return;
  29. }
  30. // Check token authentication availability
  31. if ($this->tokenStorage->getToken()) {
  32. $user = $this->tokenStorage->getToken()->getUser();
  33. if (($user instanceof User)) {
  34. $user->setLastActivity(new DateTime('now'));
  35. $this->entityManager->flush($user);
  36. }
  37. }
  38. }
  39. }