<?php
namespace App\EventListener;
use App\Controller\Site\MPSH\IndexController;
use App\Controller\Site\MPSH\ProfileController;
use App\Entity\CommonData\User;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\RedirectController;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
use Symfony\Component\HttpKernel\HttpKernel;
use Symfony\Component\Routing\RouterInterface;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
/**
* Class EmailConfirmationListener
*
* @package App\EventListener
*/
class EmailConfirmationListener
{
/**
* @var EntityManagerInterface
*/
private $em;
/**
* @var TokenStorageInterface
*/
private $security;
/**
* @var RouterInterface
*/
private $router;
/**
* EmailConfirmationListener constructor.
*
* @param EntityManagerInterface $em
* @param TokenStorageInterface $security
* @param RouterInterface $router
*/
public function __construct(
EntityManagerInterface $em,
TokenStorageInterface $security,
RouterInterface $router
) {
$this->em = $em;
$this->security = $security;
$this->router = $router;
}
/**
* @param FilterControllerEvent $event
*
* @return null
* @throws \Exception
*/
public function onKernelController(FilterControllerEvent $event)
{
if ($event->getRequestType() !== HttpKernel::MASTER_REQUEST) {
return null;
}
if ($this->security->getToken()) {
$request = $event->getRequest();
$user = $this
->security
->getToken()
->getUser();
if (strpos($request->getRequestUri(), '/admin/') === false &&
strpos($request->getRequestUri(), '/api/') === false
) {
if (is_array($event->getController())) {
list($controller, $methodName) = $event->getController();
if (($user instanceof User) && ($user->getEmailConfirmationToken())) {
if (!($controller instanceof ProfileController)) {
$redirectUrl = $this
->router
->generate('mpsh_profile_personal_information');
$event->setController(function () use ($redirectUrl) {
return new RedirectResponse($redirectUrl);
});
}
}
}
}
}
}
}