src/CoreBundle/EventSubscriber/LoginSubscriber.php line 42

Open in your IDE?
  1. <?php
  2. namespace CoreBundle\EventSubscriber;
  3. use Doctrine\ORM\EntityManagerInterface;
  4. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  5. use Symfony\Component\Security\Core\Security;
  6. use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
  7. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  8. use Symfony\Component\Security\Http\SecurityEvents;
  9. use CoreBundle\Entity\Tutor;
  10. use CoreBundle\Entity\Student;
  11. class LoginSubscriber implements EventSubscriberInterface
  12. {
  13.     /** @var Security  */
  14.     protected $security;
  15.     /** @var EntityManagerInterface  */
  16.     protected $entityManager;
  17.     /** @var SessionInterface  */
  18.     protected $session;
  19.     public function __construct(
  20.         Security $security,
  21.         EntityManagerInterface $entityManager,
  22.         SessionInterface $session
  23.     ) {
  24.         $this->security     $security;
  25.         $this->entityManager    $entityManager;
  26.         $this->session          $session;
  27.     }
  28.     public static function getSubscribedEvents()
  29.     {
  30.         return [
  31.             SecurityEvents::INTERACTIVE_LOGIN => 'onSecurityInteractiveLogin'
  32.         ];
  33.     }
  34.     public function onSecurityInteractiveLogin(InteractiveLoginEvent $event)
  35.     {
  36.         // Check token authentication availability
  37.         if (null !== $this->security->getToken()) {
  38.             $user $this->security->getToken()->getUser();
  39.             if ( ($user instanceof Student) || ($user instanceof Tutor)) {
  40.                 $lastactivity $user->getLastActivity();
  41.                 if (null === $lastactivity) {
  42.                     $lastactivity = new \DateTime();
  43.                 }
  44.                 $this->session->set('lastactivity'$lastactivity);
  45.                 $user->setLoggedOn(new \DateTime());
  46.                 $this->entityManager->persist($user);
  47.                 $this->entityManager->flush();
  48.             }
  49.         }
  50.         return true;
  51.     }
  52. }