<?php
namespace App\EventSubscriber\User;
use App\Entity\User\User;
use App\Manager\Boutique\PanierManager;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\Security\Http\Event\SwitchUserEvent;
use Symfony\Component\Security\Http\SecurityEvents;
class SwitchUserSubscriber implements EventSubscriberInterface
{
protected $em;
protected $session;
protected $panierManager;
public function __construct(EntityManagerInterface $entityManager, SessionInterface $session, PanierManager $panierManager)
{
$this->em = $entityManager;
$this->session = $session;
$this->panierManager = $panierManager;
}
public function onSwitchUser(SwitchUserEvent $event)
{
$token = $event->getToken();
// On reload l'objet user complet pour avoir les groupes
$user = $this->em->getRepository(User::class)->findOneById($token->getUser()->getId());
// On MAJ le client du panier si on en a un et le pays de livraison
$panierId = $this->session->get('panierId');
if (!is_null($panierId)) {
$this->panierManager->modifierUser($user);
if (!is_null($user->getPays())) {
$this->panierManager->modifierLivraisonPays($user, $user->getPays());
}
}
}
public static function getSubscribedEvents()
{
return [
// constant for security.switch_user
SecurityEvents::SWITCH_USER => 'onSwitchUser',
];
}
}