src/CoreBundle/EventListener/TwigListener.php line 99

  1. declare(strict_types=1);
  2. /* For licensing terms, see /license.txt */
  3. namespace Chamilo\CoreBundle\EventListener;
  4. use Chamilo\CoreBundle\Repository\ColorThemeRepository;
  5. use Chamilo\CoreBundle\Repository\LanguageRepository;
  6. use Chamilo\CoreBundle\Settings\SettingsManager;
  7. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  8. use Symfony\Component\HttpKernel\Event\ControllerEvent;
  9. use Symfony\Component\Routing\RouterInterface;
  10. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  11. use Symfony\Component\Security\Core\User\UserInterface;
  12. use Symfony\Component\Serializer\SerializerInterface;
  13. use Twig\Environment;
  14. /**
  15.  * Twig-related event listener. For filters, look into ChamiloExtension.php.
  16.  */
  17. class TwigListener implements EventSubscriberInterface
  18. {
  19.     private SerializerInterface $serializer;
  20.     private Environment $twig;
  21.     private TokenStorageInterface $tokenStorage;
  22.     private SettingsManager $settingsManager;
  23.     private LanguageRepository $languageRepository;
  24.     public function __construct(
  25.         Environment $twig,
  26.         SerializerInterface $serializer,
  27.         TokenStorageInterface $tokenStorage,
  28.         SettingsManager $settingsManager,
  29.         LanguageRepository $languageRepository,
  30.         private readonly ColorThemeRepository $colorThemeRepository,
  31.         private readonly RouterInterface $router,
  32.     ) {
  33.         $this->twig $twig;
  34.         $this->tokenStorage $tokenStorage;
  35.         $this->serializer $serializer;
  36.         $this->settingsManager $settingsManager;
  37.         $this->languageRepository $languageRepository;
  38.     }
  39.     public function onControllerEvent(ControllerEvent $event): void
  40.     {
  41.         $request $event->getRequest();
  42.         $token $this->tokenStorage->getToken();
  43.         $data null;
  44.         $isAuth false;
  45.         if (null !== $token) {
  46.             $user $token->getUser();
  47.             if ($user instanceof UserInterface) {
  48.                 $data $this->serializer->serialize($user'jsonld', [
  49.                     'groups' => ['user_json:read'],
  50.                 ]);
  51.                 $isAuth true;
  52.             }
  53.         }
  54.         $languages $this->languageRepository->getAllAvailable()->getQuery()->getArrayResult();
  55.         // $this->twig->addGlobal('text_direction', api_get_text_direction());
  56.         $this->twig->addGlobal('from_vue'$request->request->get('from_vue') ? 0);
  57.         $this->twig->addGlobal('is_authenticated'json_encode($isAuth));
  58.         $this->twig->addGlobal('user_json'$data ?? json_encode([]));
  59.         $this->twig->addGlobal('access_url_id'$request->getSession()->get('access_url_id'));
  60.         $this->twig->addGlobal('languages_json'json_encode($languages));
  61.         $this->loadColorTheme();
  62.     }
  63.     private function loadColorTheme(): void
  64.     {
  65.         $link null;
  66.         $colorTheme $this->colorThemeRepository->getActiveOne();
  67.         if ($colorTheme) {
  68.             $path $this->router->generate('chamilo_color_theme');
  69.             $link '<link rel="stylesheet" href="'.$path.'">';
  70.         }
  71.         $this->twig->addGlobal('color_theme_link'$link);
  72.     }
  73.     public static function getSubscribedEvents(): array
  74.     {
  75.         return [ControllerEvent::class => 'onControllerEvent'];
  76.     }
  77. }