TYPO3 CMS  TYPO3_6-2
ConfigurationManager.php
Go to the documentation of this file.
1 <?php
3 
18 
38 
42  protected $defaultConfigurationFile = 'typo3/sysext/core/Configuration/DefaultConfiguration.php';
43 
47  protected $localConfigurationFile = 'typo3conf/LocalConfiguration.php';
48 
52  protected $additionalConfigurationFile = 'typo3conf/AdditionalConfiguration.php';
53 
57  protected $factoryConfigurationFile = 'typo3/sysext/core/Configuration/FactoryConfiguration.php';
58 
62  protected $additionalFactoryConfigurationFile = 'typo3conf/AdditionalFactoryConfiguration.php';
63 
67  protected $pathTypo3Conf = PATH_typo3conf;
68 
76  'EXT/extConf',
77  'EXTCONF',
78  'INSTALL/wizardDone',
79  'DB',
80  'SYS/caching/cacheConfigurations',
81  );
82 
88  public function getDefaultConfiguration() {
89  return require $this->getDefaultConfigurationFileLocation();
90  }
91 
100  return PATH_site . $this->defaultConfigurationFile;
101  }
102 
108  public function getLocalConfiguration() {
109  return require $this->getLocalConfigurationFileLocation();
110  }
111 
120  return PATH_site . $this->localConfigurationFile;
121  }
122 
131  return PATH_site . $this->additionalConfigurationFile;
132  }
133 
139  protected function getFactoryConfigurationFileLocation() {
140  return PATH_site . $this->factoryConfigurationFile;
141  }
142 
150  }
151 
158  public function updateLocalConfiguration(array $configurationToMerge) {
159  $newLocalConfiguration = $this->getLocalConfiguration();
160  Utility\ArrayUtility::mergeRecursiveWithOverrule($newLocalConfiguration, $configurationToMerge);
161  $this->writeLocalConfiguration($newLocalConfiguration);
162  }
163 
170  public function getDefaultConfigurationValueByPath($path) {
172  }
173 
180  public function getLocalConfigurationValueByPath($path) {
182  }
183 
191  public function getConfigurationValueByPath($path) {
192  $defaultConfiguration = $this->getDefaultConfiguration();
194  return Utility\ArrayUtility::getValueByPath($defaultConfiguration, $path);
195  }
196 
204  public function setLocalConfigurationValueByPath($path, $value) {
205  $result = FALSE;
206  if ($this->isValidLocalConfigurationPath($path)) {
207  $localConfiguration = $this->getLocalConfiguration();
208  $localConfiguration = Utility\ArrayUtility::setValueByPath($localConfiguration, $path, $value);
209  $result = $this->writeLocalConfiguration($localConfiguration);
210  }
211  return $result;
212  }
213 
221  $localConfiguration = $this->getLocalConfiguration();
222  foreach ($pairs as $path => $value) {
223  if ($this->isValidLocalConfigurationPath($path)) {
224  $localConfiguration = Utility\ArrayUtility::setValueByPath($localConfiguration, $path, $value);
225  }
226  }
227  return $this->writeLocalConfiguration($localConfiguration);
228  }
229 
236  public function removeLocalConfigurationKeysByPath(array $keys) {
237  $result = FALSE;
238  $localConfiguration = $this->getLocalConfiguration();
239  foreach ($keys as $path) {
240  // Remove key if path is within LocalConfiguration
241  if (Utility\ArrayUtility::isValidPath($localConfiguration, $path)) {
242  $result = TRUE;
243  $localConfiguration = Utility\ArrayUtility::removeByPath($localConfiguration, $path);
244  }
245  }
246  if ($result) {
247  $this->writeLocalConfiguration($localConfiguration);
248  }
249  return $result;
250  }
251 
258  public function canWriteConfiguration() {
259  $fileLocation = $this->getLocalConfigurationFileLocation();
260  return @is_writable($this->pathTypo3Conf) && (!file_exists($fileLocation) || @is_writable($fileLocation));
261  }
262 
270  public function exportConfiguration() {
271  if (@is_file($this->getLocalConfigurationFileLocation())) {
272  $localConfiguration = $this->getLocalConfiguration();
273  if (is_array($localConfiguration)) {
274  $defaultConfiguration = $this->getDefaultConfiguration();
275  Utility\ArrayUtility::mergeRecursiveWithOverrule($defaultConfiguration, $localConfiguration);
276  $GLOBALS['TYPO3_CONF_VARS'] = $defaultConfiguration;
277  } else {
278  throw new \UnexpectedValueException('LocalConfiguration invalid.', 1349272276);
279  }
280  if (@is_file($this->getAdditionalConfigurationFileLocation())) {
282  }
283  } else {
284  // No LocalConfiguration (yet), load DefaultConfiguration only
285  $GLOBALS['TYPO3_CONF_VARS'] = $this->getDefaultConfiguration();
286  }
287  }
288 
297  public function writeLocalConfiguration(array $configuration) {
299  if (!$this->canWriteConfiguration()) {
300  throw new \RuntimeException(
301  $localConfigurationFile . ' is not writable.', 1346323822
302  );
303  }
304  $configuration = Utility\ArrayUtility::sortByKeyRecursive($configuration);
307  '<?php' . LF .
308  'return ' .
311  ) .
312  ';' . LF .
313  '?>',
314  TRUE
315  );
316 
318 
319  return $result;
320  }
321 
330  public function writeAdditionalConfiguration(array $additionalConfigurationLines) {
332  PATH_site . $this->additionalConfigurationFile,
333  '<?php' . LF .
334  implode(LF, $additionalConfigurationLines) . LF .
335  '?>'
336  );
337  }
338 
349  if (file_exists($this->getLocalConfigurationFileLocation())) {
350  throw new \RuntimeException(
351  'LocalConfiguration.php exists already',
352  1364836026
353  );
354  }
355  $localConfigurationArray = require $this->getFactoryConfigurationFileLocation();
356  $additionalFactoryConfigurationFileLocation = $this->getAdditionalFactoryConfigurationFileLocation();
357  if (file_exists($additionalFactoryConfigurationFileLocation)) {
358  $additionalFactoryConfigurationArray = require $additionalFactoryConfigurationFileLocation;
360  $localConfigurationArray,
361  $additionalFactoryConfigurationArray
362  );
363  }
364  $this->writeLocalConfiguration($localConfigurationArray);
365  }
366 
373  protected function isValidLocalConfigurationPath($path) {
374  // Early return for white listed paths
375  foreach ($this->whiteListedLocalConfigurationPaths as $whiteListedPath) {
376  if (Utility\GeneralUtility::isFirstPartOfStr($path, $whiteListedPath)) {
377  return TRUE;
378  }
379  }
381  }
382 
383 }
static mergeRecursiveWithOverrule(array &$original, array $overrule, $addKeys=TRUE, $includeEmptyValues=TRUE, $enableUnsetFeature=TRUE)
static writeFile($file, $content, $changePermissions=FALSE)
static setValueByPath(array $array, $path, $value, $delimiter='/')
static getValueByPath(array $array, $path, $delimiter='/')
static isFirstPartOfStr($str, $partStr)
if(preg_match($regexp, $sql)) $pairs
Remove pairs of single-quotes.
static removeByPath(array $array, $path, $delimiter='/')
if($list_of_literals) if(!empty($literals)) if(!empty($literals)) $result
Analyse literals to prepend the N char to them if their contents aren&#39;t numeric.
static sortByKeyRecursive(array $array)
static renumberKeysToAvoidLeapsIfKeysAreAllNumeric(array $array=array(), $level=0)
static isValidPath(array $array, $path, $delimiter='/')
static arrayExport(array $array=array(), $level=0)
if(!defined('TYPO3_MODE')) $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_userauth.php']['logoff_pre_processing'][]
writeAdditionalConfiguration(array $additionalConfigurationLines)