src/EventSubscriber/ActiveApplicationListener.php line 31

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Controller\District\ApplicationController;
  4. use App\Controller\District\ProjectController;
  5. use App\Controller\Helper\ActiveApplicationController;
  6. use Symfony\Component\HttpFoundation\RedirectResponse;
  7. use Symfony\Component\HttpFoundation\Session\Session;
  8. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  9. use Symfony\Component\HttpKernel\Event\ControllerEvent;
  10. use Symfony\Component\HttpKernel\KernelEvents;
  11. use Symfony\Component\Routing\RouterInterface;
  12. use Symfony\Component\Security\Core\Security;
  13. class ActiveApplicationListener implements \Symfony\Component\EventDispatcher\EventSubscriberInterface
  14. {
  15.     // not needed anymore because of voters ?
  16.     private Security $security;
  17.     private Session $session;
  18.     private RouterInterface $router;
  19.     public function __construct(Security $securitySessionInterface $sessionRouterInterface $router)
  20.     {
  21.         $this->security $security;
  22.         $this->session $session;
  23.         $this->router $router;
  24.     }
  25.     public function onKernelController(ControllerEvent $event)
  26.     {
  27.         $controller $event->getController();
  28.         // when a controller class defines multiple action methods, the controller
  29.         // is returned as [$controllerInstance, 'methodName']
  30.         if (is_array($controller)) {
  31.             $controllerClass $controller[0];
  32.             $controllerMethod $controller[1];
  33.         } else {
  34.             $controllerClass $controller;
  35.         }
  36.         if ($controllerClass instanceof ActiveApplicationController) {
  37.             if (
  38.                 ($controllerClass instanceof ProjectController) ||
  39.                 ($controllerClass instanceof ApplicationController && ($controllerMethod == 'editApplication'))
  40.             ) {
  41.                 if (!$this->security->getUser()->getDistrict()->getActiveApplication()) {
  42.                     $redirectUrl $this->router->generate('app_district');
  43.                     $event->setController(function () use ($redirectUrl) {
  44.                         return new RedirectResponse($redirectUrl);
  45.                     });
  46.                 }
  47.             }
  48.         }
  49.     }
  50.     public static function getSubscribedEvents()
  51.     {
  52.         return [
  53.             KernelEvents::CONTROLLER => 'onKernelController',
  54.         ];
  55.     }
  56. }