<?php
namespace Witalink\StarterBundle\EventSubscriber\Subscriber;
use App\Entity\User;
use DateTime;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\Security\Core\Security;
class UserActivitySubscriber implements EventSubscriberInterface
{
private $em;
private $security;
public function __construct(
EntityManagerInterface $em,
Security $security
) {
$this->em = $em;
$this->security = $security;
}
public static function getSubscribedEvents()
{
return [
// must be registered before (i.e. with a higher priority than) the default Locale listener
KernelEvents::TERMINATE => [['onTerminate', 20]],
];
}
public function onTerminate()
{
if ($this->security->getUser() != null) {
// si l'utilisateur actif n'est pas en impersonisation
if (!$this->security->isGranted('IS_IMPERSONATOR')) {
/** @var User $user */
$user = $this->security->getUser();
if (!$user->isActiveNow()) {
$user->setLastActivityAt(new DateTime());
$this->em->persist($user);
$this->em->flush();
}
}
}
}
}