diff --git a/typo3/sysext/core/Classes/Configuration/ConfigurationManager.php b/typo3/sysext/core/Classes/Configuration/ConfigurationManager.php index d35541b8d3055df26895d6801e154f7f82aec64c..e25c010d50c324394558d7de30a79f59da15204b 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 b4660baf297769a7f260e04e52c8e42124ecf7a0..d16006d818ab76c6468b7d4642a451792a72eb48 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 6a8602c03d3b512318127ce8f5e36281062cd822..83904f5ef00bda267a067221aaefb8369521b360 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 79f2685dc8dd51056358c8418408576fa805a575..b71942b9761d7c26374759d2ab9b38ec5111aa22 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">