src/EventSubscriber/UserActivitySubscriber.php line 25

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\SonataAdminUser;
  4. use App\Entity\PressSite\AccountManager;
  5. use DateTime;
  6. use Doctrine\ORM\EntityManagerInterface;
  7. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  8. use Symfony\Component\HttpKernel\Event\TerminateEvent;
  9. use Symfony\Component\HttpKernel\KernelEvents;
  10. use Symfony\Component\Security\Core\Security;
  11. class UserActivitySubscriber implements EventSubscriberInterface
  12. {
  13.     private $em;
  14.     private $security;
  15.     public function __construct(EntityManagerInterface $emSecurity $security)
  16.     {
  17.         $this->em $em;
  18.         $this->security $security;
  19.     }
  20.     public function onTerminate(TerminateEvent $event): void
  21.     {
  22.         if (!$event->isMasterRequest()) {
  23.             return;
  24.         }
  25.         /** @var SonataAdminUser $user */
  26.         if ((!$user $this->security->getUser()) || $user instanceof AccountManager) {
  27.             return;
  28.         }
  29.         if (method_exists($user'isActive') && !$user->isActive()) {
  30.             $user->setLastAccess(new DateTime());
  31.             $this->em->persist($user);
  32.             $this->em->flush();
  33.         }
  34.     }
  35.     public static function getSubscribedEvents(): array
  36.     {
  37.         return [
  38.             // must be registered before (i.e. with a higher priority than) the default Locale listener
  39.             KernelEvents::TERMINATE => [['onTerminate'20]],
  40.         ];
  41.     }
  42. }