From b8de7cf87ac01a85d3100b6e232b013fa148521b Mon Sep 17 00:00:00 2001 From: Simon Praetorius <simon@praetorius.me> Date: Sat, 9 Sep 2017 10:54:32 +0200 Subject: [PATCH] [BUGFIX] Use correct values in settings InstallTool Currently, the InstallTool will use the global TYPO3_CONF_VARS for the settings form. In backend context, this contains merged TypoScript, which shouldn't be added to LocalConfiguration.php. Resolves: #82399 Releases: master Change-Id: I0aabbde5c8fb8574fe30422fa687849271a3d618 Reviewed-on: https://review.typo3.org/54049 Reviewed-by: Benni Mack <benni@typo3.org> Tested-by: Benni Mack <benni@typo3.org> Tested-by: TYPO3com <no-reply@typo3.com> Reviewed-by: Stefan Neufeind <typo3.neufeind@speedpartner.de> Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch> Tested-by: Christian Kuhn <lolli@schwarzbu.ch> --- .../Configuration/ConfigurationManager.php | 12 ++++++++++++ .../DefaultConfigurationDescription.yaml | 2 ++ .../Service/LocalConfigurationValueService.php | 18 +++++++++++++++--- .../LocalConfiguration/SubSection.html | 8 ++++++++ 4 files changed, 37 insertions(+), 3 deletions(-) diff --git a/typo3/sysext/core/Classes/Configuration/ConfigurationManager.php b/typo3/sysext/core/Classes/Configuration/ConfigurationManager.php index d35541b8d305..e25c010d50c3 100644 --- a/typo3/sysext/core/Classes/Configuration/ConfigurationManager.php +++ b/typo3/sysext/core/Classes/Configuration/ConfigurationManager.php @@ -135,6 +135,18 @@ class ConfigurationManager return PATH_site . $this->localConfigurationFile; } + /** + * Returns local configuration array merged with default configuration + * + * @return array + */ + public function getMergedLocalConfiguration(): array + { + $localConfiguration = $this->getDefaultConfiguration(); + ArrayUtility::mergeRecursiveWithOverrule($localConfiguration, $this->getLocalConfiguration()); + return $localConfiguration; + } + /** * Get the file location of the additional configuration file, * currently the path and filename. diff --git a/typo3/sysext/core/Configuration/DefaultConfigurationDescription.yaml b/typo3/sysext/core/Configuration/DefaultConfigurationDescription.yaml index b4660baf2977..d16006d818ab 100644 --- a/typo3/sysext/core/Configuration/DefaultConfigurationDescription.yaml +++ b/typo3/sysext/core/Configuration/DefaultConfigurationDescription.yaml @@ -399,9 +399,11 @@ FE: defaultTypoScript_constants: type: multiline description: 'Enter lines of default TypoScript, constants-field.' + compareValuesWithCurrentConfiguration: false defaultTypoScript_setup: type: multiline description: 'Enter lines of default TypoScript, setup-field.' + compareValuesWithCurrentConfiguration: false additionalAbsRefPrefixDirectories: type: text description: 'Enter additional directories to be prepended with absRefPrefix. Directories must be comma-separated. TYPO3 already prepends the following directories: typo3/, typo3temp/, typo3conf/ext/ and all local storages' diff --git a/typo3/sysext/install/Classes/Service/LocalConfigurationValueService.php b/typo3/sysext/install/Classes/Service/LocalConfigurationValueService.php index 6a8602c03d3b..83904f5ef00b 100644 --- a/typo3/sysext/install/Classes/Service/LocalConfigurationValueService.php +++ b/typo3/sysext/install/Classes/Service/LocalConfigurationValueService.php @@ -37,12 +37,19 @@ class LocalConfigurationValueService */ public function getCurrentConfigurationData(): array { + $configurationManager = GeneralUtility::makeInstance(ConfigurationManager::class); + $localConfiguration = $configurationManager->getMergedLocalConfiguration(); + $data = []; $commentArray = $this->getDefaultConfigArrayComments(); - foreach ($GLOBALS['TYPO3_CONF_VARS'] as $sectionName => $section) { + foreach ($localConfiguration as $sectionName => $section) { if (isset($commentArray[$sectionName])) { - $data[$sectionName] = $this->recursiveConfigurationFetching($section, $commentArray[$sectionName]); + $data[$sectionName] = $this->recursiveConfigurationFetching( + $section, + isset($GLOBALS['TYPO3_CONF_VARS'][$sectionName]) ? $GLOBALS['TYPO3_CONF_VARS'][$sectionName] : null, + $commentArray[$sectionName] + ); } } @@ -56,11 +63,12 @@ class LocalConfigurationValueService * to check entries recursively. * * @param array $sections + * @param array|null $sectionsFromCurrentConfiguration * @param array $descriptions * @param array $path * @return array */ - protected function recursiveConfigurationFetching(array $sections, array $descriptions, array $path = []): array + protected function recursiveConfigurationFetching(array $sections, array $sectionsFromCurrentConfiguration, array $descriptions, array $path = []): array { $data = []; @@ -85,6 +93,10 @@ class LocalConfigurationValueService $itemData['fieldType'] = $descriptionInfo['type']; $itemData['description'] = $descriptionInfo['description']; $itemData['allowedValues'] = $descriptionInfo['allowedValues']; + $itemData['differentValueInCurrentConfiguration'] = (!isset($descriptionInfo['compareValuesWithCurrentConfiguration']) || + $descriptionInfo['compareValuesWithCurrentConfiguration']) && + isset($sectionsFromCurrentConfiguration[$key]) && + $value !== $sectionsFromCurrentConfiguration[$key]; switch ($descriptionType) { case 'multiline': $itemData['type'] = 'textarea'; diff --git a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/LocalConfiguration/SubSection.html b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/LocalConfiguration/SubSection.html index 79f2685dc8dd..b71942b9761d 100644 --- a/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/LocalConfiguration/SubSection.html +++ b/typo3/sysext/install/Resources/Private/Partials/Action/Tool/Settings/LocalConfiguration/SubSection.html @@ -34,6 +34,14 @@ </f:if> </div> <div class="item-body"> + <f:if condition="{item.differentValueInCurrentConfiguration}"> + <div class="t3js-infobox callout callout-sm callout-warning"> + <div class="callout-body"> + Note that <code>$GLOBALS['TYPO3_CONF_VARS']</code> currently contains a different value. + This could mean that the value is overwritten in AdditionalConfiguration.php. + </div> + </div> + </f:if> <f:if condition="{f:count(subject: item.allowedValues)} || {item.dataType} == 'dropdown'"> <f:then> <div class="form-group"> -- GitLab