<?php
namespace CoreBundle\EventSubscriber;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\Security\Core\Security;
use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Security\Http\SecurityEvents;
use CoreBundle\Entity\Tutor;
use CoreBundle\Entity\Student;
class LoginSubscriber implements EventSubscriberInterface
{
/** @var Security */
protected $security;
/** @var EntityManagerInterface */
protected $entityManager;
/** @var SessionInterface */
protected $session;
public function __construct(
Security $security,
EntityManagerInterface $entityManager,
SessionInterface $session
) {
$this->security = $security;
$this->entityManager = $entityManager;
$this->session = $session;
}
public static function getSubscribedEvents()
{
return [
SecurityEvents::INTERACTIVE_LOGIN => 'onSecurityInteractiveLogin'
];
}
public function onSecurityInteractiveLogin(InteractiveLoginEvent $event)
{
// Check token authentication availability
if (null !== $this->security->getToken()) {
$user = $this->security->getToken()->getUser();
if ( ($user instanceof Student) || ($user instanceof Tutor)) {
$lastactivity = $user->getLastActivity();
if (null === $lastactivity) {
$lastactivity = new \DateTime();
}
$this->session->set('lastactivity', $lastactivity);
$user->setLoggedOn(new \DateTime());
$this->entityManager->persist($user);
$this->entityManager->flush();
}
}
return true;
}
}