38 class ConfigurationManager
43 protected $defaultConfigurationFile =
'core/Configuration/DefaultConfiguration.php';
48 protected $defaultConfigurationDescriptionFile =
'core/Configuration/DefaultConfigurationDescription.yaml';
53 protected $localConfigurationFile =
'LocalConfiguration.php';
58 protected $additionalConfigurationFile =
'AdditionalConfiguration.php';
63 protected $factoryConfigurationFile =
'core/Configuration/FactoryConfiguration.php';
68 protected $additionalFactoryConfigurationFile =
'AdditionalFactoryConfiguration.php';
76 protected $whiteListedLocalConfigurationPaths = [
80 'SYS/caching/cacheConfigurations',
90 public function getDefaultConfiguration()
92 return require $this->getDefaultConfigurationFileLocation();
102 public function getDefaultConfigurationFileLocation()
114 public function getDefaultConfigurationDescriptionFileLocation()
124 public function getLocalConfiguration()
126 return require $this->getLocalConfigurationFileLocation();
136 public function getLocalConfigurationFileLocation()
146 public function getMergedLocalConfiguration(): array
148 $localConfiguration = $this->getDefaultConfiguration();
150 return $localConfiguration;
160 public function getAdditionalConfigurationFileLocation()
170 protected function getFactoryConfigurationFileLocation()
180 protected function getAdditionalFactoryConfigurationFileLocation()
190 public function updateLocalConfiguration(array $configurationToMerge)
192 $newLocalConfiguration = $this->getLocalConfiguration();
194 $this->writeLocalConfiguration($newLocalConfiguration);
203 public function getDefaultConfigurationValueByPath($path)
214 public function getLocalConfigurationValueByPath($path)
226 public function getConfigurationValueByPath($path)
228 $defaultConfiguration = $this->getDefaultConfiguration();
240 public function setLocalConfigurationValueByPath($path, $value)
243 if ($this->isValidLocalConfigurationPath($path)) {
244 $localConfiguration = $this->getLocalConfiguration();
246 $result = $this->writeLocalConfiguration($localConfiguration);
257 public function setLocalConfigurationValuesByPathValuePairs(array $pairs)
259 $localConfiguration = $this->getLocalConfiguration();
260 foreach ($pairs as $path => $value) {
261 if ($this->isValidLocalConfigurationPath($path)) {
265 return $this->writeLocalConfiguration($localConfiguration);
274 public function removeLocalConfigurationKeysByPath(array $keys)
277 $localConfiguration = $this->getLocalConfiguration();
278 foreach ($keys as $path) {
286 $this->writeLocalConfiguration($localConfiguration);
298 public function enableFeature(
string $featureName): bool
300 return $this->setLocalConfigurationValueByPath(
'SYS/features/' . $featureName,
true);
310 public function disableFeature(
string $featureName): bool
312 return $this->setLocalConfigurationValueByPath(
'SYS/features/' . $featureName,
false);
321 public function canWriteConfiguration()
323 $fileLocation = $this->getLocalConfigurationFileLocation();
333 public function exportConfiguration()
335 if (@is_file($this->getLocalConfigurationFileLocation())) {
336 $localConfiguration = $this->getLocalConfiguration();
337 if (is_array($localConfiguration)) {
338 $defaultConfiguration = $this->getDefaultConfiguration();
340 $GLOBALS[
'TYPO3_CONF_VARS'] = $defaultConfiguration;
342 throw new \UnexpectedValueException(
'LocalConfiguration invalid.', 1349272276);
346 $GLOBALS[
'TYPO3_CONF_VARS'] = $this->getDefaultConfiguration();
350 if (@is_file($this->getAdditionalConfigurationFileLocation())) {
351 require $this->getAdditionalConfigurationFileLocation();
363 public function writeLocalConfiguration(array $configuration)
365 $localConfigurationFile = $this->getLocalConfigurationFileLocation();
366 if (!$this->canWriteConfiguration()) {
367 throw new \RuntimeException(
368 $localConfigurationFile .
' is not writable.',
373 $result = GeneralUtility::writeFile(
374 $localConfigurationFile,
382 GeneralUtility::makeInstance(OpcodeCacheService::class)->clearAllActive($localConfigurationFile);
395 public function writeAdditionalConfiguration(array $additionalConfigurationLines)
397 return GeneralUtility::writeFile(
398 $this->getAdditionalConfigurationFileLocation(),
399 "<?php\n" . implode(
"\n", $additionalConfigurationLines) .
"\n"
411 public function createLocalConfigurationFromFactoryConfiguration()
413 if (file_exists($this->getLocalConfigurationFileLocation())) {
414 throw new \RuntimeException(
415 'LocalConfiguration.php exists already',
419 $localConfigurationArray = require $this->getFactoryConfigurationFileLocation();
420 $additionalFactoryConfigurationFileLocation = $this->getAdditionalFactoryConfigurationFileLocation();
421 if (file_exists($additionalFactoryConfigurationFileLocation)) {
422 $additionalFactoryConfigurationArray = require $additionalFactoryConfigurationFileLocation;
424 $localConfigurationArray,
425 $additionalFactoryConfigurationArray
428 $randomKey = GeneralUtility::makeInstance(Random::class)->generateRandomHexString(96);
429 $localConfigurationArray[
'SYS'][
'encryptionKey'] = $randomKey;
431 $this->writeLocalConfiguration($localConfigurationArray);
440 protected function isValidLocalConfigurationPath($path)
443 foreach ($this->whiteListedLocalConfigurationPaths as $whiteListedPath) {
444 if (GeneralUtility::isFirstPartOfStr($path, $whiteListedPath)) {