<?php
namespace App\EventSubscriber;
use App\Entity\LogHistory;
use App\Entity\User;
use App\Repository\LogHistoryCategoryRepository;
use DateTimeImmutable;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
class UserLoginSubscriber implements EventSubscriberInterface
{
public function __construct(
private readonly EntityManagerInterface $entityManager,
private readonly LogHistoryCategoryRepository $logHistoryCategoryRepository,
)
{
}
public static function getSubscribedEvents()
{
return [
'security.interactive_login' => 'onUserLogin',
];
}
public function onUserLogin(InteractiveLoginEvent $event)
{
/** @var User $user */
$user = $event->getAuthenticationToken()->getUser();
$now = new DateTimeImmutable();
$user->setLastConnexionDate($now);
// on persiste
$this->entityManager->persist($user);
// Get logHistory Category from database
$logHistoryCategory = $this->logHistoryCategoryRepository->findOneBy(['slug' => 'security']);
// On enregistre la date de chaque connexion de l'utilisateur
$logHistory = new LogHistory();
$logHistory->setUser($user);
$logHistory->setDate($now);
$logHistory->setStatus('success');
$logHistory->setMessage('Connexion réussie');
$logHistory->setCategory($logHistoryCategory);
$this->entityManager->persist($logHistory);
$this->entityManager->flush();
}
}