- Patch #1484690 by Pol, jhedstrom, beejeebus: implement overrides in the configuration system.

8.0.x
Dries 2012-03-23 15:35:53 -06:00
parent 5868d523c9
commit d2f1b2560f
4 changed files with 53 additions and 3 deletions

View File

@ -81,17 +81,27 @@ class DrupalConfig {
* The data that was requested.
*/
public function get($key = '') {
global $conf;
$name = $this->_verifiedStorage->getName();
if (isset($conf[$name])) {
$merged_data = drupal_array_merge_deep($this->data, $conf[$name]);
}
else {
$merged_data = $this->data;
}
if (empty($key)) {
return $this->data;
return $merged_data;
}
else {
$parts = explode('.', $key);
if (count($parts) == 1) {
return isset($this->data[$key]) ? $this->data[$key] : NULL;
return isset($merged_data[$key]) ? $merged_data[$key] : NULL;
}
else {
$key_exists = NULL;
$value = drupal_array_get_nested_value($this->data, $parts, $key_exists);
$value = drupal_array_get_nested_value($merged_data, $parts, $key_exists);
return $key_exists ? $value : NULL;
}
}

View File

@ -99,4 +99,11 @@ abstract class DrupalConfigVerifiedStorage implements DrupalConfigVerifiedStorag
$this->deleteFromActive();
$this->deleteFile();
}
/**
* Implements DrupalConfigVerifiedStorageInterface::getName().
*/
public function getName() {
return $this->name;
}
}

View File

@ -81,4 +81,9 @@ interface DrupalConfigVerifiedStorageInterface {
* @todo
*/
static function getNamesWithPrefix($prefix);
/**
* Gets the name of this object.
*/
public function getName();
}

View File

@ -268,3 +268,31 @@ class ConfigFileContentTestCase extends DrupalWebTestCase {
// Attempt to delete non-existing configuration.
}
}
/**
* Tests configuration overriding from settings.php.
*/
class ConfOverrideTestCase extends DrupalWebTestCase {
protected $testContent = 'Good morning, Denver!';
public static function getInfo() {
return array(
'name' => 'Configuration overrides',
'description' => 'Tests configuration overrides through settings.php.',
'group' => 'Configuration',
);
}
/**
* Test configuration override.
*/
function testConfigurationOverride() {
global $conf;
$config = config('system.performance');
$this->assertNotEqual($config->get('cache'), $this->testContent);
$conf['system.performance']['cache'] = $this->testContent;
$config = config('system.performance');
$this->assertEqual($config->get('cache'), $conf['system.performance']['cache']);
}
}