src/EventListener/ControllerListener.php line 44

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use App\EventListener\FilterControllerEvent;
  4. use App\EventListener\Router;
  5. use App\EventListener\TokenStorage;
  6. use App\Controller\Front\UserController;
  7. use App\Controller\ResettingController;
  8. use App\Controller\SecurityController;
  9. use App\Entity\User;
  10. use Symfony\Component\HttpFoundation\RedirectResponse;
  11. use Symfony\Component\HttpKernel\Event\ControllerEvent;
  12. use Symfony\Component\HttpKernel\HttpKernelInterface;
  13. use Symfony\Component\HttpKernel\KernelEvents;
  14. use Symfony\Component\Routing\RouterInterface;
  15. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  16. class ControllerListener
  17. {
  18.     /** @var null TokenStorage */
  19.     protected $tokenStorage;
  20.     /** @var null RouterInterface */
  21.     protected $router;
  22.     private $authorizationChecker;
  23.     /**
  24.      * ControllerListener constructor.
  25.      *
  26.      * @param TokenStorage $tokenStorage
  27.      * @param Router $router
  28.      */
  29.     public function __construct(TokenStorageInterface $tokenStorageRouterInterface $router$authorizationChecker)
  30.     {
  31.         $this->tokenStorage         $tokenStorage;
  32.         $this->router               $router;
  33.         $this->authorizationChecker $authorizationChecker;
  34.     }
  35.     /**
  36.      * @param FilterControllerEvent $event
  37.      */
  38.     public function onCoreController(ControllerEvent $event)
  39.     {
  40.         if (HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) {
  41.             return;
  42.         }
  43.         $controller $event->getController();
  44.         if (! is_array($controller)) {
  45.             return;
  46.         }
  47.         $controller $controller[0];
  48.         $excludedControllers = [
  49.             'App\Controller\Admin\\',
  50.             SecurityController::class,
  51.             ResettingController::class,
  52.             \FOS\UserBundle\Controller\ResettingController::class,
  53.             'FOS\JsRoutingBundle\Controller\\',
  54.             'Symfony\\',
  55.         ];
  56.         if ($event->getRequest()->get('_route') === 'malys_front_user_cgs_accept') {
  57.             $excludedControllers[] = UserController::class;
  58.         }
  59.         $controllerClass get_class($controller);
  60.         foreach ($excludedControllers as $excludedController) {
  61.             if (strpos($controllerClass$excludedController) !== false || $excludedController === $controllerClass) {
  62.                 return;
  63.             }
  64.         }
  65.         if ($this->tokenStorage->getToken() == null) {
  66.             return;
  67.         }
  68.         /** @var User $user */
  69.         $user $this->tokenStorage->getToken()->getUser();
  70.         // If user is not logged
  71.         if (! $user instanceof User) {
  72.             return;
  73.         }
  74.         // If this is an admin impersonating a customer, we bypass CGS agreement
  75.         if ($this->authorizationChecker->isGranted('ROLE_PREVIOUS_ADMIN')) {
  76.             return;
  77.         }
  78.         if (! $user->getCgs() || empty($user->getCgs())) {
  79.             $route 'malys_front_user_cgs_accept';
  80.             if ($route !== $event->getRequest()->get('_route')) {
  81.                 $url $this->router->generate($route);
  82.                 $event->setController(
  83.                     function () use ($url) {
  84.                         return new RedirectResponse($url);
  85.                     }
  86.                 );
  87.                 return;
  88.             }
  89.         }
  90.     }
  91.     /**
  92.      * @return array<string, mixed>
  93.      */
  94.     public static function getSubscribedEvents(): array
  95.     {
  96.         return [KernelEvents::CONTROLLER => 'onCoreController'];
  97.     }
  98. }