From 14e7466f9561a804101881dc5a4fb09d965f3165 Mon Sep 17 00:00:00 2001
From: Tim van Dijen <tvdijen@gmail.com>
Date: Wed, 20 Mar 2019 21:14:18 +0100
Subject: [PATCH] Twig namespaces (#1082)

---
 lib/SimpleSAML/XHTML/Template.php | 61 +++++++++++++++++--------------
 1 file changed, 34 insertions(+), 27 deletions(-)

diff --git a/lib/SimpleSAML/XHTML/Template.php b/lib/SimpleSAML/XHTML/Template.php
index edb4b200c..f55f68e0d 100644
--- a/lib/SimpleSAML/XHTML/Template.php
+++ b/lib/SimpleSAML/XHTML/Template.php
@@ -12,7 +12,14 @@ namespace SimpleSAML\XHTML;
 use JaimePerez\TwigConfigurableI18n\Twig\Environment as Twig_Environment;
 use JaimePerez\TwigConfigurableI18n\Twig\Extensions\Extension\I18n as Twig_Extensions_Extension_I18n;
 use Symfony\Component\HttpFoundation\Response;
+
+use SimpleSAML\Configuration;
+use SimpleSAML\Utils\HTTP;
+use SimpleSAML\Locale\Language;
 use SimpleSAML\Locale\Localization;
+use SimpleSAML\Locale\Translate;
+use SimpleSAML\Logger;
+use SimpleSAML\Module;
 
 class Template extends Response
 {
@@ -54,7 +61,7 @@ class Template extends Response
     /**
      * The twig environment.
      *
-     * @var false|Twig_Environment
+     * @var false|\JaimePerez\TwigConfigurableI18n\Twig\Environment
      */
     private $twig = false;
 
@@ -108,7 +115,7 @@ class Template extends Response
      * @param string                   $template Which template file to load
      * @param string|null              $defaultDictionary The default dictionary where tags will come from.
      */
-    public function __construct(\SimpleSAML\Configuration $configuration, $template, $defaultDictionary = null)
+    public function __construct(Configuration $configuration, $template, $defaultDictionary = null)
     {
         $this->configuration = $configuration;
         $this->template = $template;
@@ -124,8 +131,8 @@ class Template extends Response
         );
 
         // initialize internationalization system
-        $this->translator = new \SimpleSAML\Locale\Translate($configuration, $defaultDictionary);
-        $this->localization = new \SimpleSAML\Locale\Localization($configuration);
+        $this->translator = new Translate($configuration, $defaultDictionary);
+        $this->localization = new Localization($configuration);
 
         // check if we are supposed to use the new UI
         $this->useNewUI = $this->configuration->getBoolean('usenewui', false);
@@ -134,7 +141,7 @@ class Template extends Response
             // check if we need to attach a theme controller
             $controller = $this->configuration->getString('theme.controller', false);
             if ($controller && class_exists($controller) &&
-                in_array('SimpleSAML\XHTML\TemplateControllerInterface', class_implements($controller))
+                in_array(TemplateControllerInterface::class, class_implements($controller))
             ) {
                 $this->controller = new $controller();
             }
@@ -211,7 +218,7 @@ class Template extends Response
      * Set up the places where twig can look for templates.
      *
      * @return TemplateLoader The twig template loader or false if the template does not exist.
-     * @throws \Twig_Error_Loader In case a failure occurs.
+     * @throws \Twig\Error\LoaderError In case a failure occurs.
      */
     private function setupTwigTemplatepaths()
     {
@@ -239,7 +246,7 @@ class Template extends Response
 
         // default, themeless templates are checked last
         $templateDirs[] = [
-            \Twig_Loader_Filesystem::MAIN_NAMESPACE => $this->configuration->resolvePath('templates')
+            \Twig\Loader\FilesystemLoader::MAIN_NAMESPACE => $this->configuration->resolvePath('templates')
         ];
         foreach ($templateDirs as $entry) {
             $loader->addPath($entry[key($entry)], key($entry));
@@ -250,7 +257,7 @@ class Template extends Response
 
     /**
      * Setup twig.
-     * @return \Twig_Environment|false
+     * @return Twig_Environment|false
      */
     private function setupTwig()
     {
@@ -275,8 +282,8 @@ class Template extends Response
         $options = [
             'cache' => $cache,
             'auto_reload' => $auto_reload,
-            'translation_function' => ['\SimpleSAML\Locale\Translate', 'translateSingularGettext'],
-            'translation_function_plural' => ['\SimpleSAML\Locale\Translate', 'translatePluralGettext'],
+            'translation_function' => [Translate::class, 'translateSingularGettext'],
+            'translation_function_plural' => [Translate::class, 'translatePluralGettext'],
         ];
 
         $twig = new Twig_Environment($loader, $options);
@@ -302,15 +309,15 @@ class Template extends Response
 
         // add a filter for translations out of arrays
         $twig->addFilter(
-            new \Twig_SimpleFilter(
+            new \Twig\TwigFilter(
                 'translateFromArray',
-                ['\SimpleSAML\Locale\Translate', 'translateFromArray'],
+                [Translate::class, 'translateFromArray'],
                 ['needs_context' => true]
             )
         );
 
         // add an asset() function
-        $twig->addFunction(new \Twig_SimpleFunction('asset', [$this, 'asset']));
+        $twig->addFunction(new \Twig\TwigFunction('asset', [$this, 'asset']));
 
         if ($this->controller !== null) {
             $this->controller->setUpTwig($twig);
@@ -332,12 +339,12 @@ class Template extends Response
         }
 
         // setup directories & namespaces
-        $themeDir = \SimpleSAML\Module::getModuleDir($this->theme['module']).'/themes/'.$this->theme['name'];
+        $themeDir = Module::getModuleDir($this->theme['module']).'/themes/'.$this->theme['name'];
         $subdirs = scandir($themeDir);
         if (empty($subdirs)) {
             // no subdirectories in the theme directory, nothing to do here
             // this is probably wrong, log a message
-            \SimpleSAML\Logger::warning('Empty theme directory for theme "'.$this->theme['name'].'".');
+            Logger::warning('Empty theme directory for theme "'.$this->theme['name'].'".');
             return [];
         }
 
@@ -349,7 +356,7 @@ class Template extends Response
             }
 
             // set correct name for the default namespace
-            $ns = ($entry === 'default') ? \Twig_Loader_Filesystem::MAIN_NAMESPACE : $entry;
+            $ns = ($entry === 'default') ? \Twig\Loader\FilesystemLoader::MAIN_NAMESPACE : $entry;
             $themeTemplateDirs[] = [$ns => $themeDir.'/'.$entry];
         }
         return $themeTemplateDirs;
@@ -366,10 +373,10 @@ class Template extends Response
      */
     private function getModuleTemplateDir($module)
     {
-        if (!\SimpleSAML\Module::isModuleEnabled($module)) {
+        if (!Module::isModuleEnabled($module)) {
             throw new \InvalidArgumentException('The module \''.$module.'\' is not enabled.');
         }
-        $moduledir = \SimpleSAML\Module::getModuleDir($module);
+        $moduledir = Module::getModuleDir($module);
         // check if module has a /templates dir, if so, append
         $templatedir = $moduledir.'/templates';
         if (!is_dir($templatedir)) {
@@ -391,7 +398,7 @@ class Template extends Response
     public function addTemplatesFromModule($module)
     {
         $dir = TemplateLoader::getModuleTemplateDir($module);
-        /** @var \Twig_Loader_Filesystem $loader */
+        /** @var \Twig\Loader\FilesystemLoader $loader */
         $loader = $this->twig->getLoader();
         $loader->addPath($dir, $module);
     }
@@ -416,7 +423,7 @@ class Template extends Response
                 $langname = $this->translator->getLanguage()->getLanguageLocalizedName($lang);
                 $url = false;
                 if (!$current) {
-                    $url = htmlspecialchars(\SimpleSAML\Utils\HTTP::addURLParameters(
+                    $url = htmlspecialchars(HTTP::addURLParameters(
                         '',
                         [$parameterName => $lang]
                     ));
@@ -555,11 +562,11 @@ class Template extends Response
         if ($this->theme['module'] !== null) {
             // .../module/<themeModule>/themes/<themeName>/<templateModule>/<templateName>
 
-            $filename = \SimpleSAML\Module::getModuleDir($this->theme['module']).
+            $filename = Module::getModuleDir($this->theme['module']).
                 '/themes/'.$this->theme['name'].'/'.$templateModule.'/'.$templateName;
         } elseif ($templateModule !== 'default') {
             // .../module/<templateModule>/templates/<templateName>
-            $filename = \SimpleSAML\Module::getModuleDir($templateModule).'/templates/'.$templateName;
+            $filename = Module::getModuleDir($templateModule).'/templates/'.$templateName;
         } else {
             // .../templates/<theme>/<templateName>
             $filename = $this->configuration->getPathValue('templatedir', 'templates/').$templateName;
@@ -570,7 +577,7 @@ class Template extends Response
         }
 
         // not found in current theme
-        \SimpleSAML\Logger::debug(
+        Logger::debug(
             $_SERVER['PHP_SELF'].' - Template: Could not find template file ['.$template.'] at ['.
             $filename.'] - now trying the base template'
         );
@@ -578,7 +585,7 @@ class Template extends Response
         // try default theme
         if ($templateModule !== 'default') {
             // .../module/<templateModule>/templates/<templateName>
-            $filename = \SimpleSAML\Module::getModuleDir($templateModule).'/templates/'.$templateName;
+            $filename = Module::getModuleDir($templateModule).'/templates/'.$templateName;
         } else {
             // .../templates/<templateName>
             $filename = $this->configuration->getPathValue('templatedir', 'templates/').'/'.$templateName;
@@ -592,7 +599,7 @@ class Template extends Response
         if ($throw_exception) {
             // log error and throw exception
             $error = 'Template: Could not find template file ['.$template.'] at ['.$filename.']';
-            \SimpleSAML\Logger::critical($_SERVER['PHP_SELF'].' - '.$error);
+            Logger::critical($_SERVER['PHP_SELF'].' - '.$error);
 
             throw new \Exception($error);
         } else {
@@ -685,7 +692,7 @@ class Template extends Response
      */
     public static function getLanguageCookie()
     {
-        return \SimpleSAML\Locale\Language::getLanguageCookie();
+        return Language::getLanguageCookie();
     }
 
 
@@ -698,7 +705,7 @@ class Template extends Response
      */
     public static function setLanguageCookie($language)
     {
-        \SimpleSAML\Locale\Language::setLanguageCookie($language);
+        Language::setLanguageCookie($language);
     }
 
 
-- 
GitLab