From 387774a09c788f4f609ed3ffd7cb6be855de4342 Mon Sep 17 00:00:00 2001
From: Jaime Perez Crespo <jaime.perez@uninett.no>
Date: Fri, 5 Feb 2016 14:26:48 +0100
Subject: [PATCH] Reformat \SimpleSAML\Locale\Translate.

---
 lib/SimpleSAML/Locale/Translate.php | 229 ++++++++++++++++------------
 1 file changed, 128 insertions(+), 101 deletions(-)

diff --git a/lib/SimpleSAML/Locale/Translate.php b/lib/SimpleSAML/Locale/Translate.php
index 9d192185d..4740e8f67 100644
--- a/lib/SimpleSAML/Locale/Translate.php
+++ b/lib/SimpleSAML/Locale/Translate.php
@@ -10,7 +10,8 @@
 
 namespace SimpleSAML\Locale;
 
-class Translate {
+class Translate
+{
 
     private $configuration = null;
 
@@ -26,25 +27,29 @@ class Translate {
     /**
      * The default dictionary.
      */
-    private $defaultDictionary = NULL;
+    private $defaultDictionary = null;
 
 
     /**
      * Constructor
      *
      * @param \SimpleSAML_Configuration $configuration Configuration object
-     * @param string|null $defaultDictionary The default dictionary where tags will come from.
+     * @param string|null               $defaultDictionary The default dictionary where tags will come from.
      */
-    function __construct(\SimpleSAML_Configuration $configuration, $defaultDictionary = NULL) {
+    public function __construct(\SimpleSAML_Configuration $configuration, $defaultDictionary = null)
+    {
         $this->configuration = $configuration;
         $this->language = new Language($configuration);
 
-        if($defaultDictionary !== NULL && substr($defaultDictionary, -4) === '.php') {
-            /* For backwards compatibility - print warning. */
+        if ($defaultDictionary !== null && substr($defaultDictionary, -4) === '.php') {
+            // TODO: drop this entire if clause for 2.0
+            // for backwards compatibility - print warning
             $backtrace = debug_backtrace();
-            $where = $backtrace[0]['file'] . ':' . $backtrace[0]['line'];
-            \SimpleSAML_Logger::warning('Deprecated use of new SimpleSAML\Locale\Translate(...) at ' . $where .
-                '. The last parameter is now a dictionary name, which should not end in ".php".');
+            $where = $backtrace[0]['file'].':'.$backtrace[0]['line'];
+            \SimpleSAML_Logger::warning(
+                'Deprecated use of new SimpleSAML\Locale\Translate(...) at '.$where.
+                '. The last parameter is now a dictionary name, which should not end in ".php".'
+            );
 
             $this->defaultDictionary = substr($defaultDictionary, 0, -4);
         } else {
@@ -58,23 +63,25 @@ class Translate {
      *
      * @param string $name The name of the dictionary, as the filename in the dictionary directory, without the
      * '.php' ending.
+     *
      * @return array An associative array with the dictionary.
      */
-    private function getDictionary($name) {
+    private function getDictionary($name)
+    {
         assert('is_string($name)');
 
-        if(!array_key_exists($name, $this->dictionaries)) {
+        if (!array_key_exists($name, $this->dictionaries)) {
             $sepPos = strpos($name, ':');
-            if($sepPos !== FALSE) {
+            if ($sepPos !== false) {
                 $module = substr($name, 0, $sepPos);
                 $fileName = substr($name, $sepPos + 1);
-                $dictDir = \SimpleSAML_Module::getModuleDir($module) . '/dictionaries/';
+                $dictDir = \SimpleSAML_Module::getModuleDir($module).'/dictionaries/';
             } else {
                 $dictDir = $this->configuration->getPathValue('dictionarydir', 'dictionaries/');
                 $fileName = $name;
             }
 
-            $this->dictionaries[$name] = $this->readDictionaryFile($dictDir . $fileName);
+            $this->dictionaries[$name] = $this->readDictionaryFile($dictDir.$fileName);
         }
 
         return $this->dictionaries[$name];
@@ -86,31 +93,33 @@ class Translate {
      *
      * @param string $tag The tag name. The tag name can also be on the form '{<dictionary>:<tag>}', to retrieve a tag
      * from the specific dictionary.
+     *
      * @return array An associative array with language => string mappings, or null if the tag wasn't found.
      */
-    public function getTag($tag) {
+    public function getTag($tag)
+    {
         assert('is_string($tag)');
 
-        /* First check translations loaded by the includeInlineTranslation and includeLanguageFile methods. */
-        if(array_key_exists($tag, $this->langtext)) {
+        // first check translations loaded by the includeInlineTranslation and includeLanguageFile methods
+        if (array_key_exists($tag, $this->langtext)) {
             return $this->langtext[$tag];
         }
 
-        /* Check whether we should use the default dictionary or a dictionary specified in the tag. */
-        if(substr($tag, 0, 1) === '{' && preg_match('/^{((?:\w+:)?\w+?):(.*)}$/D', $tag, $matches)) {
+        // check whether we should use the default dictionary or a dictionary specified in the tag
+        if (substr($tag, 0, 1) === '{' && preg_match('/^{((?:\w+:)?\w+?):(.*)}$/D', $tag, $matches)) {
             $dictionary = $matches[1];
             $tag = $matches[2];
         } else {
             $dictionary = $this->defaultDictionary;
-            if($dictionary === NULL) {
-                /* We don't have any dictionary to load the tag from. */
-                return NULL;
+            if ($dictionary === null) {
+                // we don't have any dictionary to load the tag from
+                return null;
             }
         }
 
         $dictionary = $this->getDictionary($dictionary);
-        if(!array_key_exists($tag, $dictionary)) {
-            return NULL;
+        if (!array_key_exists($tag, $dictionary)) {
+            return null;
         }
 
         return $dictionary[$tag];
@@ -121,37 +130,39 @@ class Translate {
      * Retrieve the preferred translation of a given text.
      *
      * @param array $translations The translations, as an associative array with language => text mappings.
+     *
      * @return string The preferred translation.
-     * 
+     *
      * @throws \Exception If there's no suitable translation.
      */
-    public function getPreferredTranslation($translations) {
+    public function getPreferredTranslation($translations)
+    {
         assert('is_array($translations)');
 
-        /* Look up translation of tag in the selected language. */
+        // look up translation of tag in the selected language
         $selected_language = $this->language->getLanguage();
         if (array_key_exists($selected_language, $translations)) {
             return $translations[$selected_language];
         }
 
-        /* Look up translation of tag in the default language. */
+        // look up translation of tag in the default language
         $default_language = $this->language->getDefaultLanguage();
-        if(array_key_exists($default_language, $translations)) {
+        if (array_key_exists($default_language, $translations)) {
             return $translations[$default_language];
         }
 
-        /* Check for english translation. */
-        if(array_key_exists('en', $translations)) {
+        // check for english translation
+        if (array_key_exists('en', $translations)) {
             return $translations['en'];
         }
 
-        /* Pick the first translation available. */
-        if(count($translations) > 0) {
+        // pick the first translation available
+        if (count($translations) > 0) {
             $languages = array_keys($translations);
             return $translations[$languages[0]];
         }
 
-        /* We don't have anything to return. */
+        // we don't have anything to return
         throw new \Exception('Nothing to return from translation.');
     }
 
@@ -160,30 +171,31 @@ class Translate {
      * Translate the name of an attribute.
      *
      * @param string $name The attribute name.
+     *
      * @return string The translated attribute name, or the original attribute name if no translation was found.
      */
-    public function getAttributeTranslation($name) {
-
-        /* Normalize attribute name. */
+    public function getAttributeTranslation($name)
+    {
+        // normalize attribute name
         $normName = strtolower($name);
         $normName = str_replace(":", "_", $normName);
 
-        /* Check for an extra dictionary. */
-        $extraDict = $this->configuration->getString('attributes.extradictionary', NULL);
-        if ($extraDict !== NULL) {
+        // check for an extra dictionary
+        $extraDict = $this->configuration->getString('attributes.extradictionary', null);
+        if ($extraDict !== null) {
             $dict = $this->getDictionary($extraDict);
             if (array_key_exists($normName, $dict)) {
                 return $this->getPreferredTranslation($dict[$normName]);
             }
         }
 
-        /* Search the default attribute dictionary. */
+        // search the default attribute dictionary
         $dict = $this->getDictionary('attributes');
-        if (array_key_exists('attribute_' . $normName, $dict)) {
-            return $this->getPreferredTranslation($dict['attribute_' . $normName]);
+        if (array_key_exists('attribute_'.$normName, $dict)) {
+            return $this->getPreferredTranslation($dict['attribute_'.$normName]);
         }
 
-        /* No translations found. */
+        // no translations found
         return $name;
     }
 
@@ -201,11 +213,12 @@ class Translate {
      * This function can also do replacements into the translated tag. It will search the translated tag for the keys
      * provided in $replacements, and replace any found occurrences with the value of the key.
      *
-     * @param string|array $tag  A tag name for the translation which should be looked up, or an array with
+     * @param string|array $tag A tag name for the translation which should be looked up, or an array with
      * (language => text) mappings.
-     * @param array $replacements  An associative array of keys that should be replaced with values in the translated
-     * string.
-     * @param boolean $fallbackdefault Default translation to use as a fallback if no valid translation was found.
+     * @param array        $replacements An associative array of keys that should be replaced with values in the
+     *     translated string.
+     * @param boolean      $fallbackdefault Default translation to use as a fallback if no valid translation was found.
+     *
      * @return string  The translated tag, or a placeholder value if the tag wasn't found.
      */
     public function t(
@@ -213,60 +226,67 @@ class Translate {
         $replacements = array(),
         $fallbackdefault = true,
         $oldreplacements = array(), // TODO: remove this for 2.0
-        $striptags = FALSE // TODO: remove this for 2.0
+        $striptags = false // TODO: remove this for 2.0
     ) {
-        if(!is_array($replacements)) {
+        if (!is_array($replacements)) {
+            // TODO: remove this entire if for 2.0
 
-            /* Old style call to t(...). Print warning to log. */
+            // old style call to t(...). Print warning to log
             $backtrace = debug_backtrace();
-            $where = $backtrace[0]['file'] . ':' . $backtrace[0]['line'];
-            \SimpleSAML_Logger::warning('Deprecated use of SimpleSAML_Template::t(...) at ' . $where .
-                '. Please update the code to use the new style of parameters.');
-
-            /* For backwards compatibility. */
-            if(!$replacements && $this->getTag($tag) === NULL) {
-                \SimpleSAML_Logger::warning('Code which uses $fallbackdefault === FALSE should be' .
-                    ' updated to use the getTag() method instead.');
-                return NULL;
+            $where = $backtrace[0]['file'].':'.$backtrace[0]['line'];
+            \SimpleSAML_Logger::warning(
+                'Deprecated use of SimpleSAML_Template::t(...) at '.$where.
+                '. Please update the code to use the new style of parameters.'
+            );
+
+            // for backwards compatibility
+            if (!$replacements && $this->getTag($tag) === null) {
+                \SimpleSAML_Logger::warning(
+                    'Code which uses $fallbackdefault === FALSE should be updated to use the getTag() method instead.'
+                );
+                return null;
             }
 
             $replacements = $oldreplacements;
         }
 
-        if(is_array($tag)) {
+        if (is_array($tag)) {
             $tagData = $tag;
         } else {
             $tagData = $this->getTag($tag);
-            if($tagData === NULL) {
-                /* Tag not found. */
-                \SimpleSAML_Logger::info('Template: Looking up [' . $tag . ']: not translated at all.');
+            if ($tagData === null) {
+                // tag not found
+                \SimpleSAML_Logger::info('Template: Looking up ['.$tag.']: not translated at all.');
                 return $this->t_not_translated($tag, $fallbackdefault);
             }
         }
 
         $translated = $this->getPreferredTranslation($tagData);
 
-#        if (!empty($replacements)){        echo('<pre> [' . $tag . ']'); print_r($replacements); exit; }
         foreach ($replacements as $k => $v) {
-            /* try to translate if no replacement is given */
-            if ($v == NULL) $v = $this->t($k);
+            // try to translate if no replacement is given
+            if ($v == null) {
+                $v = $this->t($k);
+            }
             $translated = str_replace($k, $v, $translated);
         }
         return $translated;
     }
 
+
     /**
      * Return the string that should be used when no translation was found.
      *
-     * @param string $tag A name tag of the string that should be returned.
+     * @param string  $tag A name tag of the string that should be returned.
      * @param boolean $fallbacktag If set to true and string was not found in any languages, return the tag itself. If
      * false return null.
      *
      * @return string The string that should be used, or the tag name if $fallbacktag is set to false.
      */
-    private function t_not_translated($tag, $fallbacktag) {
+    private function t_not_translated($tag, $fallbacktag)
+    {
         if ($fallbacktag) {
-            return 'not translated (' . $tag . ')';
+            return 'not translated ('.$tag.')';
         } else {
             return $tag;
         }
@@ -278,34 +298,35 @@ class Translate {
      * used ONLU from variable data, or when the translation is already provided by an external source, as a database
      * or in metadata.
      *
-     * @param string $tag The tag that has a translation
+     * @param string       $tag The tag that has a translation
      * @param array|string $translation The translation array
      *
      * @throws \Exception If $translation is neither a string nor an array.
      */
-    public function includeInlineTranslation($tag, $translation) {
-
+    public function includeInlineTranslation($tag, $translation)
+    {
         if (is_string($translation)) {
             $translation = array('en' => $translation);
         } elseif (!is_array($translation)) {
-            throw new \Exception("Inline translation should be string or array. Is " . gettype($translation) . " now!");
+            throw new \Exception("Inline translation should be string or array. Is ".gettype($translation)." now!");
         }
 
-        \SimpleSAML_Logger::debug('Template: Adding inline language translation for tag [' . $tag . ']');
+        \SimpleSAML_Logger::debug('Template: Adding inline language translation for tag ['.$tag.']');
         $this->langtext[$tag] = $translation;
     }
 
+
     /**
      * Include a language file from the dictionaries directory.
      *
-     * @param string $file File name of dictionary to include
+     * @param string                         $file File name of dictionary to include
      * @param \SimpleSAML_Configuration|null $otherConfig Optionally provide a different configuration object than the
      * one provided in the constructor to be used to find the directory of the dictionary. This allows to combine
      * dictionaries inside the SimpleSAMLphp main code distribution together with external dictionaries. Defaults to
      * null.
      */
-    public function includeLanguageFile($file, $otherConfig = null) {
-
+    public function includeLanguageFile($file, $otherConfig = null)
+    {
         $filebase = null;
         if (!empty($otherConfig)) {
             $filebase = $otherConfig->getPathValue('dictionarydir', 'dictionaries/');
@@ -313,9 +334,8 @@ class Translate {
             $filebase = $this->configuration->getPathValue('dictionarydir', 'dictionaries/');
         }
 
-
-        $lang = $this->readDictionaryFile($filebase . $file);
-        \SimpleSAML_Logger::debug('Template: Merging language array. Loading [' . $file . ']');
+        $lang = $this->readDictionaryFile($filebase.$file);
+        \SimpleSAML_Logger::debug('Template: Merging language array. Loading ['.$file.']');
         $this->langtext = array_merge($this->langtext, $lang);
     }
 
@@ -324,24 +344,26 @@ class Translate {
      * Read a dictionary file in JSON format.
      *
      * @param string $filename The absolute path to the dictionary file, minus the .definition.json ending.
+     *
      * @return array An array holding all the translations in the file.
      */
-    private function readDictionaryJSON($filename) {
-        $definitionFile = $filename . '.definition.json';
+    private function readDictionaryJSON($filename)
+    {
+        $definitionFile = $filename.'.definition.json';
         assert('file_exists($definitionFile)');
 
         $fileContent = file_get_contents($definitionFile);
-        $lang = json_decode($fileContent, TRUE);
+        $lang = json_decode($fileContent, true);
 
         if (empty($lang)) {
-            \SimpleSAML_Logger::error('Invalid dictionary definition file [' . $definitionFile . ']');
+            \SimpleSAML_Logger::error('Invalid dictionary definition file ['.$definitionFile.']');
             return array();
         }
 
-        $translationFile = $filename . '.translation.json';
+        $translationFile = $filename.'.translation.json';
         if (file_exists($translationFile)) {
             $fileContent = file_get_contents($translationFile);
-            $moreTrans = json_decode($fileContent, TRUE);
+            $moreTrans = json_decode($fileContent, true);
             if (!empty($moreTrans)) {
                 $lang = self::lang_merge($lang, $moreTrans);
             }
@@ -355,13 +377,15 @@ class Translate {
      * Read a dictionary file in PHP format.
      *
      * @param string $filename The absolute path to the dictionary file.
+     *
      * @return array An array holding all the translations in the file.
      */
-    private function readDictionaryPHP($filename) {
-        $phpFile = $filename . '.php';
+    private function readDictionaryPHP($filename)
+    {
+        $phpFile = $filename.'.php';
         assert('file_exists($phpFile)');
 
-        $lang = NULL;
+        $lang = null;
         include($phpFile);
         if (isset($lang)) {
             return $lang;
@@ -375,37 +399,40 @@ class Translate {
      * Read a dictionary file.
      *
      * @param string $filename The absolute path to the dictionary file.
+     *
      * @return array An array holding all the translations in the file.
      */
-    private function readDictionaryFile($filename) {
+    private function readDictionaryFile($filename)
+    {
         assert('is_string($filename)');
 
-        \SimpleSAML_Logger::debug('Template: Reading [' . $filename . ']');
+        \SimpleSAML_Logger::debug('Template: Reading ['.$filename.']');
 
-        $jsonFile = $filename . '.definition.json';
+        $jsonFile = $filename.'.definition.json';
         if (file_exists($jsonFile)) {
             return $this->readDictionaryJSON($filename);
         }
 
-
-        $phpFile = $filename . '.php';
+        $phpFile = $filename.'.php';
         if (file_exists($phpFile)) {
             return $this->readDictionaryPHP($filename);
         }
 
-        \SimpleSAML_Logger::error($_SERVER['PHP_SELF'].' - Template: Could not find template file [' . $this->template . '] at [' . $filename . ']');
+        \SimpleSAML_Logger::error(
+            $_SERVER['PHP_SELF'].' - Template: Could not find template file ['.$this->template.'] at ['.$filename.']'
+        );
         return array();
     }
 
 
     // Merge two translation arrays.
-    public static function lang_merge($def, $lang) {
-        foreach($def AS $key => $value) {
-            if (array_key_exists($key, $lang))
+    public static function lang_merge($def, $lang)
+    {
+        foreach ($def as $key => $value) {
+            if (array_key_exists($key, $lang)) {
                 $def[$key] = array_merge($value, $lang[$key]);
+            }
         }
         return $def;
     }
-
-
 }
-- 
GitLab