src/EventListener/ForceRoute/DisclaimerForceRouteListener.php line 54

Open in your IDE?
  1. <?php
  2. namespace App\EventListener\ForceRoute;
  3. use App\Settings\SettingsManager;
  4. use App\Settings\SettingsManagerInterface;
  5. use Symfony\Component\HttpFoundation\Request;
  6. use Symfony\Component\Routing\RouterInterface;
  7. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  8. use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
  9. class DisclaimerForceRouteListener extends AbstractForceRouteListener{
  10.     const DISCLAIMER_COOKIE_NAME 'disclaimer_cookie';
  11.     const REFERER_VARIABLE_NAME 'referer';
  12.     private SettingsManagerInterface $settingsManager;
  13.     public function __construct(
  14.         RouterInterface $router,
  15.         TokenStorageInterface $tokenStorage,
  16.         AuthorizationCheckerInterface $authorizationChecker,
  17.         string $environment,
  18.         SettingsManagerInterface $settingsManager
  19.     ){
  20.         parent::__construct($router$tokenStorage$authorizationChecker$environment);
  21.         $this->settingsManager $settingsManager;
  22.     }
  23.     public function getRouteToForce(): string
  24.     {
  25.         return 'disclaimer';
  26.     }
  27.     public function getRouteParametersToForce(): array
  28.     {
  29.         $request $this->event->getRequest();
  30.         return [
  31.             'referer' => $request->getRequestUri()
  32.         ];
  33.     }
  34.     public function getRoutes(): array
  35.     {
  36.         return [
  37.             'contact',
  38.             'core_page_view',
  39.         ];
  40.     }
  41.     public function mustForceRoute(Request $request): bool{
  42.         // Force the disclaimer display if the disclaimer toggle setting is on and if the user did not accept it within the last expiration period
  43.         return
  44.             $this->settingsManager->getValue(SettingsManager::DISCLAIMER_COOKIE_TOGGLE) == true// Settings saved as string TODO unsafe maybe ?
  45.             && $request->cookies->has(self::DISCLAIMER_COOKIE_NAME) === false
  46.         ;
  47.     }
  48. }