Deprecated: Constant E_STRICT is deprecated in /home/pastorz/old-espace-client/vendor/symfony/error-handler/ErrorHandler.php on line 58

Deprecated: Constant E_STRICT is deprecated in /home/pastorz/old-espace-client/vendor/symfony/error-handler/ErrorHandler.php on line 76
Symfony Profiler

src/EventSubscriber/RequestSubscriber.php line 83

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\User;
  4. use Doctrine\ORM\EntityManagerInterface;
  5. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  6. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  7. use Symfony\Component\HttpFoundation\RequestStack;
  8. use Symfony\Component\HttpFoundation\Response;
  9. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  10. use Symfony\Component\HttpKernel\Event\RequestEvent;
  11. use Symfony\Component\HttpKernel\KernelEvents;
  12. use Symfony\Component\Security\Core\Security;
  13. use Symfony\Component\Security\Http\Util\TargetPathTrait;
  14. use Twig\Environment;
  15. class RequestSubscriber implements EventSubscriberInterface
  16. {
  17.     use TargetPathTrait;
  18.     public function __construct(
  19.         private SessionInterface $session,
  20.         private Security         $security,
  21.         private Environment $twig,
  22.         private ParameterBagInterface  $parameterBag,
  23.         private EntityManagerInterface $em,
  24.         private RequestStack           $requestStack
  25.     )
  26.     {
  27.     }
  28.     public static function getSubscribedEvents(): array
  29.     {
  30.         return [
  31.             KernelEvents::REQUEST => [['onKernelRequest'], ['onMaintenance'\PHP_INT_MAX 1000]]
  32.         ];
  33.     }
  34.     public function onKernelRequest(RequestEvent $event): void
  35.     {
  36.         $request $event->getRequest();
  37.         $locale $request->getLocale();
  38.         if($request->attributes->get('_route') != 'app_home'){
  39.             setcookie('_locale'$locale, [
  40.                 'expires' => time() + 60*60*24*30,
  41.                 'path' => '/',
  42.                 'samesite' => 'Strict',
  43.             ]);
  44.         }
  45.         $excludedRoutes = array(
  46.             'app_home',
  47.             'app_login',
  48.             'app_reset_password',
  49.             'app_check_email',
  50.             'app_forgot_password_request'
  51.         );
  52.         if (!$event->isMainRequest() || $request->isXmlHttpRequest() || in_array($request->attributes->get('_route'), $excludedRoutes) || str_contains($request->getUri(), '/api')) {
  53.             return;
  54.         }
  55.         /** @var User $user */
  56.         if ($user $this->security->getUser()) {
  57.             $this->removeTargetPath($this->session'user_secured_area');
  58.             $this->removeTargetPath($this->session'admin_secured_area');
  59.             if ((!$user->getPreferredLocale() || $user->getPreferredLocale() != $locale) && in_array(strtolower($locale), explode('|'$this->parameterBag->get('app.supported_locales')))) {
  60.                 $user->setPreferredLocale($locale);
  61.                 $this->em->persist($user);
  62.                 $this->em->flush();
  63.             }
  64.             return;
  65.         }
  66.         $this->saveTargetPath($this->sessionstr_contains($request->getUri(), '/admin') ? 'admin' 'user' '_secured_area'$request->getUri());
  67.     }
  68.     public function onMaintenance(RequestEvent $event): void
  69.     {
  70.         /** @var bool $isMaintenance */
  71.         $isMaintenance \filter_var($_ENV['MAINTENANCE_MODE'] ?? '0'\FILTER_VALIDATE_BOOLEAN);
  72.         if ($isMaintenance) {
  73.             $event->setResponse(new Response(
  74.                 $this->twig->render('admin/maintenance.html.twig'),
  75.                 Response::HTTP_SERVICE_UNAVAILABLE,
  76.             ));
  77.             $event->stopPropagation();
  78.         }
  79.     }
  80. }