src/EventSubscriber/LoginAtSubscriber.php line 41

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\Log;
  4. use App\Entity\User;
  5. use Doctrine\ORM\EntityManagerInterface;
  6. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  7. use Symfony\Component\HttpFoundation\Response;
  8. use Symfony\Component\HttpKernel\Event\ControllerEvent;
  9. use Symfony\Component\HttpKernel\Event\RequestEvent;
  10. use Symfony\Component\HttpKernel\KernelEvents;
  11. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  12. use Twig\Error\LoaderError;
  13. use Twig\Error\RuntimeError;
  14. use Twig\Error\SyntaxError;
  15. class LoginAtSubscriber implements EventSubscriberInterface
  16. {
  17.     private TokenStorageInterface $tokenStorage;
  18.     private EntityManagerInterface $em;
  19.     public function __construct(TokenStorageInterface $tokenStorage,EntityManagerInterface $em)
  20.     {
  21.         $this->tokenStorage $tokenStorage;
  22.         $this->em $em;
  23.     }
  24.     /**
  25.      * @param RequestEvent $event
  26.      * @return void
  27.      * @throws LoaderError
  28.      * @throws RuntimeError
  29.      * @throws SyntaxError
  30.      */
  31.     public function onKernelRequest(ControllerEvent $event)
  32.     {
  33.         if (!$event->isMainRequest()) {
  34.             // don't do anything if it's not the master request
  35.             return;
  36.         }
  37.         if($this->tokenStorage->getToken()){
  38.             /* @var $user User*/
  39.             $user $this->tokenStorage->getToken()->getUser();
  40.             if($user && $user instanceof User){
  41.                 $lastLoginAt $user->getLastLoginAt();
  42.                 $now = new \DateTime("now", new \DateTimeZone("Europe/Paris"));
  43.                 $diffInSeconds abs($lastLoginAt->getTimestamp() - $now->getTimestamp());
  44.                 if ($diffInSeconds 3600) {
  45.                     //Update loginAt
  46.                     $user->setLastLoginAt($now);
  47.                     $this->em->persist($user);
  48.                     //Create log
  49.                     $log =  new Log();
  50.                     $log->setUser$user );
  51.                     $log->setEvent('login');
  52.                     $log->setSources(['ip'=>!empty($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : "",'date'=>$now->format('Y-m-d H:i'),'login'=>$user->getEmail()]);
  53.                     $this->em->persist($log);
  54.                     $this->em->flush();
  55.                 }
  56.             }
  57.         }
  58.     }
  59.     public static function getSubscribedEvents()
  60.     {
  61.         return [
  62.             KernelEvents::CONTROLLER=> [
  63.                 ['onKernelRequest',10]
  64.             ],
  65.         ];
  66.     }
  67. }