Commit bef7492e authored by Stefan Galinski's avatar Stefan Galinski 🎮

[BUGFIX] Fix core bug #65513 by an XClass

parent 02d2a53b
<?php
namespace SGalinski\Lfeditor\Xclass;
/***************************************************************
* Copyright notice
*
* (c) sgalinski Internet Services (http://www.sgalinski.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 3 of the License, or
* (at your option) any later version.
*
* The GNU General Public License can be found at
* http://www.gnu.org/copyleft/gpl.html.
*
* 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.
*
* This copyright notice MUST APPEAR in all copies of the script!
***************************************************************/
/**
* Overrides the language parser factory to fix a bug related to language overrides.
*
* Currently language overrides are not working if no related translated language file
* exists already inside the extension or l10n directory. The class fixes this behaviour.
*/
class LocalizationFactory extends \TYPO3\CMS\Core\Localization\LocalizationFactory {
/**
* Returns parsed data from a given file and language key.
*
* @param string $fileReference Input is a file-reference (see \TYPO3\CMS\Core\Utility\GeneralUtility::getFileAbsFileName). That file is expected to be a supported locallang file format
* @param string $languageKey Language key
* @param string $charset Character set (option); if not set, determined by the language key
* @param integer $errorMode Error mode (when file could not be found): 0 - syslog entry, 1 - do nothing, 2 - throw an exception$
* @param boolean $isLocalizationOverride TRUE if $fileReference is a localization override
* @return array|boolean
*/
public function getParsedData($fileReference, $languageKey, $charset, $errorMode, $isLocalizationOverride = FALSE) {
$hash = md5($fileReference . $languageKey . $charset);
$this->errorMode = $errorMode;
try {
// Check if the default language is processed before processing other language
if (!$this->store->hasData($fileReference, 'default') && $languageKey !== 'default') {
$this->getParsedData($fileReference, 'default', $charset, $this->errorMode);
}
// If the content is parsed (local cache), use it
if ($this->store->hasData($fileReference, $languageKey)) {
return $this->store->getData($fileReference);
}
// If the content is in cache (system cache), use it
$data = $this->cacheInstance->get($hash);
if ($data !== FALSE) {
$this->store->setData($fileReference, $languageKey, $data);
return $this->store->getData($fileReference, $languageKey);
}
$this->store->setConfiguration($fileReference, $languageKey, $charset);
/** @var $parser \TYPO3\CMS\Core\Localization\Parser\LocalizationParserInterface */
$parser = $this->store->getParserInstance($fileReference);
// Get parsed data
$LOCAL_LANG = $parser->getParsedData(
$this->store->getAbsoluteFileReference($fileReference), $languageKey, $charset
);
// Override localization
if (!$isLocalizationOverride && isset($GLOBALS['TYPO3_CONF_VARS']['SYS']['locallangXMLOverride'])) {
$this->localizationOverride($fileReference, $languageKey, $charset, $errorMode, $LOCAL_LANG);
}
// Save parsed data in cache
$this->store->setData($fileReference, $languageKey, $LOCAL_LANG[$languageKey]);
// Cache processed data
$this->cacheInstance->set($hash, $this->store->getDataByLanguage($fileReference, $languageKey));
} catch (\TYPO3\CMS\Core\Localization\Exception\FileNotFoundException $exception) {
// Override localization with default language
// it's possible that a language override exists, but no related localized language file in the extension
if (!$isLocalizationOverride && isset($GLOBALS['TYPO3_CONF_VARS']['SYS']['locallangXMLOverride'])) {
try {
$LOCAL_LANG = $this->store->getData($fileReference);
$this->localizationOverride($fileReference, $languageKey, $charset, $errorMode, $LOCAL_LANG);
// Save parsed data in cache
$this->store->setData($fileReference, $languageKey, $LOCAL_LANG[$languageKey]);
// Cache processed data
$this->cacheInstance->set($hash, $this->store->getDataByLanguage($fileReference, $languageKey));
} catch (\TYPO3\CMS\Core\Localization\Exception\FileNotFoundException $exception) {
// Source localization file not found
$this->store->setData($fileReference, $languageKey, array());
}
} else {
// Source localization file not found
$this->store->setData($fileReference, $languageKey, array());
}
}
return $this->store->getData($fileReference);
}
}
?>
\ No newline at end of file
......@@ -4,11 +4,14 @@ if (!defined('TYPO3_MODE')) {
die('Access denied.');
}
/** @noinspection PhpUndefinedVariableInspection */
$extPath = \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::extPath('lfeditor');
// new cache table
if (!is_array($GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['lfeditor_select_options_cache'])) {
$GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['lfeditor_select_options_cache'] = array();
}
// Xclasses
// Remove this XClass if the bug https://forge.typo3.org/issues/65513 was fixed.
$GLOBALS['TYPO3_CONF_VARS']['SYS']['Objects']['TYPO3\CMS\Core\Localization\LocalizationFactory'] =
array('className' => 'SGalinski\Lfeditor\Xclass\LocalizationFactory');
?>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment