<?php
namespace TYPO3\CMS\Lang\Domain\Repository;
-/***************************************************************
- * Copyright notice
- *
- * (c) 2012-2013 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>
*/
-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->get(
- '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