src/Listener/DtvRequestListener.php line 33

Open in your IDE?
  1. <?php
  2.     namespace App\Listener;
  3.     use App\Entity\User;
  4.     use Symfony\Component\HttpFoundation\RedirectResponse;
  5.     use Symfony\Component\HttpKernel\Event\RequestEvent;
  6.     use Symfony\Component\Routing\RouterInterface;
  7.     use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  8.     class DtvRequestListener
  9.     {
  10.         private RouterInterface       $router;
  11.         private TokenStorageInterface $tokenStorage;
  12.         /**
  13.          * @param RouterInterface       $router
  14.          * @param TokenStorageInterface $tokenStorage
  15.          */
  16.         public function __constructRouterInterface $routerTokenStorageInterface $tokenStorage )
  17.         {
  18.             $this->router       $router;
  19.             $this->tokenStorage $tokenStorage;
  20.         }
  21.         /**
  22.          * @param RequestEvent $event
  23.          *
  24.          * @return void
  25.          */
  26.         public function onKernelRequestRequestEvent $event ): void
  27.         {
  28.             $currentRoute $event->getRequest()->get'_route' );
  29.             if ( str_contains$currentRoute'dtv_back_platform' ) ) {
  30.                 $session $event->getRequest()->getSession();
  31.                 $project $session->get'project' );
  32.                 $safeRoute = [
  33.                     'dtv_back_platform_project_list',
  34.                     'dtv_back_platform_users',
  35.                     'dtv_back_platform_settings_delete',
  36.                     'app_login',
  37.                     'dtv_back_platform_project_log_show',
  38.                     'dtv_back_platform_project_cache_clear',
  39.                     'dtv_back_platform_project_catalogue_renew',
  40.                     'dtv_back_platform_project_log_clear',
  41.                 ];
  42.                 $routeOk array_filter$safeRoute, static function ( $v ) use ( $currentRoute ) {
  43.                     return str_contains$currentRoute$v );
  44.                 } );
  45.                 // redirection si pas de project sélectionné
  46.                 if ( $project === NULL && count$routeOk ) === ) {
  47.                     $url      $this->router->generate'dtv_back_platform_project_list' );
  48.                     $response = new RedirectResponse$url );
  49.                     $event->setResponse$response );
  50.                 }
  51.                 // redirection si viewOnly, que le user n'est pas dev et qu'il a une requete sur les pages de design et de contenu
  52.                 if ( !is_null$this->tokenStorage->getToken() ) ) {
  53.                     /** @var User $user */
  54.                     $user $this->tokenStorage->getToken()->getUser();
  55.                     // dtv_back_platform_content
  56.                     // dtv_back_platform_design
  57.                     if ( $project !== NULL &&
  58.                          $project->isViewOnly() &&
  59.                          !$user->isDeveloper() &&
  60.                          ( str_contains$currentRoute'dtv_back_platform_design' ) or str_contains$currentRoute'dtv_back_platform_content' ) )
  61.                     ) {
  62.                         $url      $this->router->generate'dtv_back_platform_project_list' );
  63.                         $response = new RedirectResponse$url );
  64.                         $event->setResponse$response );
  65.                     }
  66.                 }
  67.             }
  68.         }
  69.     }