src/EventListener/EmailConfirmationListener.php line 61

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use App\Controller\Site\MPSH\IndexController;
  4. use App\Controller\Site\MPSH\ProfileController;
  5. use App\Entity\CommonData\User;
  6. use Doctrine\ORM\EntityManagerInterface;
  7. use Symfony\Bundle\FrameworkBundle\Controller\RedirectController;
  8. use Symfony\Component\HttpFoundation\RedirectResponse;
  9. use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
  10. use Symfony\Component\HttpKernel\HttpKernel;
  11. use Symfony\Component\Routing\RouterInterface;
  12. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  13. /**
  14.  * Class EmailConfirmationListener
  15.  *
  16.  * @package App\EventListener
  17.  */
  18. class EmailConfirmationListener
  19. {
  20.     /**
  21.      * @var EntityManagerInterface
  22.      */
  23.     private $em;
  24.     /**
  25.      * @var TokenStorageInterface
  26.      */
  27.     private $security;
  28.     /**
  29.      * @var RouterInterface
  30.      */
  31.     private $router;
  32.     /**
  33.      * EmailConfirmationListener constructor.
  34.      *
  35.      * @param EntityManagerInterface $em
  36.      * @param TokenStorageInterface  $security
  37.      * @param RouterInterface        $router
  38.      */
  39.     public function __construct(
  40.         EntityManagerInterface $em,
  41.         TokenStorageInterface  $security,
  42.         RouterInterface        $router
  43.     ) {
  44.         $this->em       $em;
  45.         $this->security $security;
  46.         $this->router   $router;
  47.     }
  48.     /**
  49.      * @param FilterControllerEvent $event
  50.      *
  51.      * @return null
  52.      * @throws \Exception
  53.      */
  54.     public function onKernelController(FilterControllerEvent $event)
  55.     {
  56.         if ($event->getRequestType() !== HttpKernel::MASTER_REQUEST) {
  57.             return null;
  58.         }
  59.         if ($this->security->getToken()) {
  60.             $request $event->getRequest();
  61.             $user    $this
  62.                 ->security
  63.                 ->getToken()
  64.                 ->getUser();
  65.             if (strpos($request->getRequestUri(), '/admin/') === false &&
  66.                 strpos($request->getRequestUri(), '/api/') === false
  67.             ) {
  68.                 if (is_array($event->getController())) {
  69.                     list($controller$methodName) = $event->getController();
  70.                     if (($user instanceof User) && ($user->getEmailConfirmationToken())) {
  71.                         if (!($controller instanceof ProfileController)) {
  72.                             $redirectUrl $this
  73.                                 ->router
  74.                                 ->generate('mpsh_profile_personal_information');
  75.                             $event->setController(function () use ($redirectUrl) {
  76.                                 return new RedirectResponse($redirectUrl);
  77.                             });
  78.                         }
  79.                     }
  80.                 }
  81.             }
  82.         }
  83.     }
  84. }