[TASK] EXT:lang CodeCleanup
[Packages/TYPO3.CMS.git] / typo3 / sysext / lang / Classes / Domain / Repository / LanguageRepository.php
index 4f774ff..281e24e 100644 (file)
 <?php
 namespace TYPO3\CMS\Lang\Domain\Repository;
-/***************************************************************
- *  Copyright notice
- *
- *  (c) 2012 Sebastian Fischer <typo3@evoweb.de>
- *  All rights reserved
- *
- *  This script is part of the TYPO3 project. The TYPO3 project is
- *  free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
+
+/*
+ * This file is part of the TYPO3 CMS project.
  *
- *  The GNU General Public License can be found at
- *  http://www.gnu.org/copyleft/gpl.html.
+ * It is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License, either version 2
+ * of the License, or any later version.
  *
- *  This script is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
+ * For the full copyright and license information, please read the
+ * LICENSE.txt file that was distributed with this source code.
  *
- *  This copyright notice MUST APPEAR in all copies of the script!
- ***************************************************************/
+ * The TYPO3 project - inspiring people to share!
+ */
+
+use TYPO3\CMS\Core\Configuration\ConfigurationManager;
+use TYPO3\CMS\Core\Localization\Locales;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Extbase\Object\ObjectManagerInterface;
+use TYPO3\CMS\Lang\Domain\Model\Language;
+use TYPO3\CMS\Lang\Service\RegistryService;
 
 /**
  * Language repository
- *
- * @author Sebastian Fischer <typo3@evoweb.de>
- * @package lang
- * @subpackage LanguageRepository
  */
-class LanguageRepository {
-
-       /**
-        * @var \TYPO3\CMS\Extbase\Object\ObjectManagerInterface
-        */
-       protected $objectManager;
-
-       /**
-        * @var array
-        */
-       protected $selectedLanguages = array();
-
-       /**
-        * @var \TYPO3\CMS\Core\Localization\Locales
-        */
-       protected $locales;
-
-       /**
-        * @var array
-        */
-       protected $languages = array();
-
-       /**
-        * @var string
-        */
-       protected $configurationPath = 'EXTCONF/lang';
-
-       /**
-        * Constructor of the language repository
-        */
-       public function __construct() {
-               try {
-                       $globalSettings = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Configuration\\ConfigurationManager')->getLocalConfigurationValueByPath($this->configurationPath);
-                       $this->selectedLanguages = (array) $globalSettings['availableLanguages'];
-               } catch (\Exception $e) {
-                       \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Configuration\\ConfigurationManager')->setLocalConfigurationValueByPath(
-                               $this->configurationPath,
-                               array('availableLanguages' => array())
-                       );
-               }
-       }
-
-       /**
-        * Injects the object manager
-        *
-        * @param \TYPO3\CMS\Extbase\Object\ObjectManager $objectManager
-        * @return void
-        */
-       public function injectObjectManager(\TYPO3\CMS\Extbase\Object\ObjectManager $objectManager) {
-               $this->objectManager = $objectManager;
-       }
-
-       /**
-        * Injects the locales
-        *
-        * @param \TYPO3\CMS\Core\Localization\Locales $locales
-        * @return void
-        */
-       public function injectLocales(\TYPO3\CMS\Core\Localization\Locales $locales) {
-               $this->locales = $locales;
-       }
-
-       /**
-        * Returns all objects of this repository.
-        *
-        * @return array
-        */
-       public function findAll() {
-               if (!count($this->languages)) {
-                       $languages = $this->locales->getLanguages();
-                       array_shift($languages);
-
-                       foreach ($languages as $locale => $language) {
-                               $label = htmlspecialchars($GLOBALS['LANG']->sL('LLL:EXT:setup/mod/locallang.xml:lang_' . $locale));
-                               if ($label === '') {
-                                       $label = htmlspecialchars($language);
-                               }
-
-                               $this->languages[$locale] = $this->objectManager->create(
-                                       'TYPO3\CMS\Lang\Domain\Model\Language',
-                                       $locale,
-                                       $label,
-                                       in_array($locale, $this->selectedLanguages)
-                               );
-                       }
-
-                       usort($this->languages, function($a, $b) {
-                               /** @var $a \TYPO3\CMS\Lang\Domain\Model\Language */
-                               /** @var $b \TYPO3\CMS\Lang\Domain\Model\Language */
-                               if ($a->getLanguage() == $b->getLanguage()) {
-                                       return 0;
-                               }
-                               return $a->getLanguage() < $b->getLanguage() ? -1 : 1;
-                       });
-               }
-
-               return $this->languages;
-       }
-
-       /**
-        * Find selected languages
-        *
-        * @return array
-        */
-       public function findSelected() {
-               $languages = $this->findAll();
-
-               $result = array();
-               /** @var $language \TYPO3\CMS\Lang\Domain\Model\Language */
-               foreach ($languages as $language) {
-                       if ($language->getSelected()) {
-                               $result[] = $language;
-                       }
-               }
-
-               return $result;
-       }
-
-       /**
-        * Update selected languages
-        *
-        * @param array $languages
-        * @return array
-        */
-       public function updateSelectedLanguages($languages) {
-                       // Add possible dependencies for selected languages
-               $dependencies = array();
-               foreach ($languages as $language) {
-                       $dependencies = array_merge($dependencies, $this->locales->getLocaleDependencies($language));
-               }
-               if (count($dependencies)) {
-                       $languages = array_unique(array_merge($languages, $dependencies));
-               }
-
-               $dir = count($languages) - count($this->selectedLanguages);
-               $diff = $dir < 0 ? array_diff($this->selectedLanguages, $languages) : array_diff($languages, $this->selectedLanguages);
-
-               \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Configuration\\ConfigurationManager')->setLocalConfigurationValueByPath(
-                       $this->configurationPath,
-                       array('availableLanguages' => $languages)
-               );
-
-               return array(
-                       'success' => count($diff) > 0,
-                       'dir' => $dir,
-                       'diff' => array_values($diff),
-                       'languages' => $languages
-               );
-       }
+class LanguageRepository
+{
+    /**
+     * @var \TYPO3\CMS\Extbase\Object\ObjectManagerInterface
+     */
+    protected $objectManager;
+
+    /**
+     * @var \TYPO3\CMS\Core\Localization\Locales
+     */
+    protected $locales;
+
+    /**
+     * @var \TYPO3\CMS\Lang\Domain\Model\Language[]
+     */
+    protected $selectedLocales = array();
+
+    /**
+     * @var \TYPO3\CMS\Lang\Domain\Model\Language[]
+     */
+    protected $languages = array();
+
+    /**
+     * @var string
+     */
+    protected $configurationPath = 'EXTCONF/lang';
+
+    /**
+     * @var \TYPO3\CMS\Lang\Service\RegistryService
+     */
+    protected $registryService;
+
+    /**
+     * @param \TYPO3\CMS\Extbase\Object\ObjectManagerInterface $objectManager
+     */
+    public function injectObjectManager(ObjectManagerInterface $objectManager)
+    {
+        $this->objectManager = $objectManager;
+    }
+
+    /**
+     * @param \TYPO3\CMS\Core\Localization\Locales $locales
+     */
+    public function injectLocales(Locales $locales)
+    {
+        $this->locales = $locales;
+    }
+
+    /**
+     * @param \TYPO3\CMS\Lang\Service\RegistryService $registryService
+     */
+    public function injectRegistryService(RegistryService $registryService)
+    {
+        $this->registryService = $registryService;
+    }
+
+    /**
+     * Constructor of the language repository
+     */
+    public function __construct()
+    {
+        $configurationManager = GeneralUtility::makeInstance(ConfigurationManager::class);
+        try {
+            $globalSettings = $configurationManager->getLocalConfigurationValueByPath($this->configurationPath);
+            $this->selectedLocales = (array)$globalSettings['availableLanguages'];
+        } catch (\Exception $e) {
+            $configurationManager->setLocalConfigurationValueByPath(
+                $this->configurationPath,
+                array('availableLanguages' => array())
+            );
+        }
+    }
+
+    /**
+     * Returns all objects of this repository
+     *
+     * @return \TYPO3\CMS\Lang\Domain\Model\Language[] The language objects
+     */
+    public function findAll()
+    {
+        if (empty($this->languages)) {
+            $languages = $this->locales->getLanguages();
+            array_shift($languages);
+            foreach ($languages as $locale => $language) {
+                $label = htmlspecialchars($this->getLanguageService()->sL('LLL:EXT:setup/Resources/Private/Language/locallang.xlf:lang_' . $locale));
+                if ($label === '') {
+                    $label = htmlspecialchars($language);
+                }
+                $this->languages[$locale] = $this->objectManager->get(
+                    Language::class,
+                    $locale,
+                    $label,
+                    in_array($locale, $this->selectedLocales),
+                    $this->registryService->get($locale)
+                );
+            }
+            usort($this->languages, function ($a, $b) {
+                /** @var $a \TYPO3\CMS\Lang\Domain\Model\Language */
+                /** @var $b \TYPO3\CMS\Lang\Domain\Model\Language */
+                if ($a->getLabel() == $b->getLabel()) {
+                    return 0;
+                }
+                return $a->getLabel() < $b->getLabel() ? -1 : 1;
+            });
+        }
+        return $this->languages;
+    }
+
+    /**
+     * Find selected languages
+     *
+     * @return \TYPO3\CMS\Lang\Domain\Model\Language[] The language objects
+     */
+    public function findSelected()
+    {
+        $languages = $this->findAll();
+        $result = array();
+        foreach ($languages as $language) {
+            if ($language->getSelected()) {
+                $result[] = $language;
+            }
+        }
+        return $result;
+    }
+
+    /**
+     * Update selected languages
+     *
+     * @param array $languages The languages
+     * @return array Update information
+     */
+    public function updateSelectedLanguages($languages)
+    {
+        // Add possible dependencies for selected languages
+        $dependencies = array();
+        foreach ($languages as $language) {
+            $dependencies = array_merge($dependencies, $this->locales->getLocaleDependencies($language));
+        }
+        if (!empty($dependencies)) {
+            $languages = array_unique(array_merge($languages, $dependencies));
+        }
+        $dir = count($languages) - count($this->selectedLocales);
+        $diff = $dir < 0 ? array_diff($this->selectedLocales, $languages) : array_diff($languages, $this->selectedLocales);
+        GeneralUtility::makeInstance(ConfigurationManager::class)->setLocalConfigurationValueByPath(
+            $this->configurationPath,
+            array('availableLanguages' => $languages)
+        );
+        return array(
+            'success' => !empty($diff),
+            'dir' => $dir,
+            'diff' => array_values($diff),
+            'languages' => $languages
+        );
+    }
+
+    /**
+     * Add a language to list of selected languages
+     *
+     * @param string $locale The locale
+     * @return array Update information
+     */
+    public function activateByLocale($locale)
+    {
+        $languages = $this->findAll();
+        $locales = array();
+        foreach ($languages as $language) {
+            if ($language->getSelected() || $language->getLocale() === $locale) {
+                $locales[] = $language->getLocale();
+            }
+        }
+        return $this->updateSelectedLanguages($locales);
+    }
+
+    /**
+     * Remove a language from list of selected languages
+     *
+     * @param string $locale The locale
+     * @return array Update information
+     */
+    public function deactivateByLocale($locale)
+    {
+        $languages = $this->findAll();
+        $locales = array();
+        foreach ($languages as $language) {
+            if ($language->getSelected() && $language->getLocale() !== $locale) {
+                $locales[] = $language->getLocale();
+            }
+        }
+        return $this->updateSelectedLanguages($locales);
+    }
+
+    /**
+     * Returns LanguageService
+     *
+     * @return \TYPO3\CMS\Lang\LanguageService
+     */
+    protected function getLanguageService()
+    {
+        return $GLOBALS['LANG'];
+    }
 }
-
-?>
\ No newline at end of file