src/EventListener/UserActivityListener.php line 31

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