<?php
namespace App\EventListener;
use App\Application\Sonata\UserBundle\Entity\User;
use App\Repository\PraxisRepository;
use Psr\Log\LoggerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
use Symfony\Component\Security\Http\SecurityEvents;
class PraxisRelatedEntityListener implements EventSubscriberInterface
{
private SessionInterface $session;
private LoggerInterface $logger;
/**
* @var PraxisRepository
*/
private PraxisRepository $praxisRepository;
public function __construct(SessionInterface $session, LoggerInterface $logger, PraxisRepository $praxisRepository)
{
$this->session = $session;
$this->logger = $logger;
$this->praxisRepository = $praxisRepository;
}
public static function getSubscribedEvents()
{
return [
SecurityEvents::INTERACTIVE_LOGIN => 'onLogin'
];
}
public function onLogin(InteractiveLoginEvent $event)
{
$user = $event->getAuthenticationToken()->getUser();
if ($user instanceof User) {
$praxis = $this->praxisRepository->findOneBy(['user' => $user]);
$this->session->set('praxis', $praxis);
if ($praxis) {
$this->logger->info('Praxis was set', ['praxis' => $praxis->getId(), 'user' => $user->getId()]);
}
}
}
}