Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
50.00% |
7 / 14 |
CRAP | |
62.82% |
49 / 78 |
| Config | |
0.00% |
0 / 1 |
|
50.00% |
7 / 14 |
107.36 | |
62.82% |
49 / 78 |
| __construct | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 5 |
|||
| initWithData | |
100.00% |
1 / 1 |
1 | |
100.00% |
3 / 3 |
|||
| get | |
0.00% |
0 / 1 |
42 | |
0.00% |
0 / 9 |
|||
| setData | |
100.00% |
1 / 1 |
1 | |
100.00% |
3 / 3 |
|||
| setSettingsOverride | |
100.00% |
1 / 1 |
1 | |
100.00% |
3 / 3 |
|||
| setModuleOverride | |
100.00% |
1 / 1 |
1 | |
100.00% |
3 / 3 |
|||
| setOverriddenData | |
0.00% |
0 / 1 |
30 | |
0.00% |
0 / 6 |
|||
| resetOverriddenData | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
| set | |
100.00% |
1 / 1 |
1 | |
100.00% |
3 / 3 |
|||
| clear | |
100.00% |
1 / 1 |
1 | |
100.00% |
3 / 3 |
|||
| save | |
0.00% |
0 / 1 |
6.24 | |
81.25% |
13 / 16 |
|||
| delete | |
100.00% |
1 / 1 |
1 | |
100.00% |
8 / 8 |
|||
| getRawData | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 1 |
|||
| getOriginal | |
0.00% |
0 / 1 |
11.23 | |
76.92% |
10 / 13 |
|||
| <?php | |
| /** | |
| * @file | |
| * Contains \Drupal\Core\Config\Config. | |
| */ | |
| namespace Drupal\Core\Config; | |
| use Drupal\Component\Utility\NestedArray; | |
| use Drupal\Core\Cache\Cache; | |
| use Symfony\Component\EventDispatcher\EventDispatcherInterface; | |
| /** | |
| * Defines the default configuration object. | |
| * | |
| * Encapsulates all capabilities needed for configuration handling for a | |
| * specific configuration object, including support for runtime overrides. The | |
| * overrides are handled on top of the stored configuration so they are not | |
| * saved back to storage. | |
| * | |
| * @ingroup config_api | |
| */ | |
| class Config extends StorableConfigBase { | |
| /** | |
| * An event dispatcher instance to use for configuration events. | |
| * | |
| * @var \Symfony\Component\EventDispatcher\EventDispatcherInterface | |
| */ | |
| protected $eventDispatcher; | |
| /** | |
| * The current runtime data. | |
| * | |
| * The configuration data from storage merged with module and settings | |
| * overrides. | |
| * | |
| * @var array | |
| */ | |
| protected $overriddenData; | |
| /** | |
| * The current module overrides. | |
| * | |
| * @var array | |
| */ | |
| protected $moduleOverrides; | |
| /** | |
| * The current settings overrides. | |
| * | |
| * @var array | |
| */ | |
| protected $settingsOverrides; | |
| /** | |
| * Constructs a configuration object. | |
| * | |
| * @param string $name | |
| * The name of the configuration object being constructed. | |
| * @param \Drupal\Core\Config\StorageInterface $storage | |
| * A storage object to use for reading and writing the | |
| * configuration data. | |
| * @param \Symfony\Component\EventDispatcher\EventDispatcherInterface $event_dispatcher | |
| * An event dispatcher instance to use for configuration events. | |
| * @param \Drupal\Core\Config\TypedConfigManagerInterface $typed_config | |
| * The typed configuration manager service. | |
| */ | |
| public function __construct($name, StorageInterface $storage, EventDispatcherInterface $event_dispatcher, TypedConfigManagerInterface $typed_config) { | |
| $this->name = $name; | |
| $this->storage = $storage; | |
| $this->eventDispatcher = $event_dispatcher; | |
| $this->typedConfigManager = $typed_config; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function initWithData(array $data) { | |
| parent::initWithData($data); | |
| $this->resetOverriddenData(); | |
| return $this; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function get($key = '') { | |
| if (!isset($this->overriddenData)) { | |
| $this->setOverriddenData(); | |
| } | |
| if (empty($key)) { | |
| return $this->overriddenData; | |
| } | |
| else { | |
| $parts = explode('.', $key); | |
| if (count($parts) == 1) { | |
| return isset($this->overriddenData[$key]) ? $this->overriddenData[$key] : NULL; | |
| } | |
| else { | |
| $value = NestedArray::getValue($this->overriddenData, $parts, $key_exists); | |
| return $key_exists ? $value : NULL; | |
| } | |
| } | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function setData(array $data) { | |
| parent::setData($data); | |
| $this->resetOverriddenData(); | |
| return $this; | |
| } | |
| /** | |
| * Sets settings.php overrides for this configuration object. | |
| * | |
| * The overridden data only applies to this configuration object. | |
| * | |
| * @param array $data | |
| * The overridden values of the configuration data. | |
| * | |
| * @return \Drupal\Core\Config\Config | |
| * The configuration object. | |
| */ | |
| public function setSettingsOverride(array $data) { | |
| $this->settingsOverrides = $data; | |
| $this->resetOverriddenData(); | |
| return $this; | |
| } | |
| /** | |
| * Sets module overrides for this configuration object. | |
| * | |
| * @param array $data | |
| * The overridden values of the configuration data. | |
| * | |
| * @return \Drupal\Core\Config\Config | |
| * The configuration object. | |
| */ | |
| public function setModuleOverride(array $data) { | |
| $this->moduleOverrides = $data; | |
| $this->resetOverriddenData(); | |
| return $this; | |
| } | |
| /** | |
| * Sets the current data for this configuration object. | |
| * | |
| * Configuration overrides operate at two distinct layers: modules and | |
| * settings.php. Overrides in settings.php take precedence over values | |
| * provided by modules. Precedence or different module overrides is | |
| * determined by the priority of the config.factory.override tagged services. | |
| * | |
| * @return \Drupal\Core\Config\Config | |
| * The configuration object. | |
| */ | |
| protected function setOverriddenData() { | |
| $this->overriddenData = $this->data; | |
| if (isset($this->moduleOverrides) && is_array($this->moduleOverrides)) { | |
| $this->overriddenData = NestedArray::mergeDeepArray(array($this->overriddenData, $this->moduleOverrides), TRUE); | |
| } | |
| if (isset($this->settingsOverrides) && is_array($this->settingsOverrides)) { | |
| $this->overriddenData = NestedArray::mergeDeepArray(array($this->overriddenData, $this->settingsOverrides), TRUE); | |
| } | |
| return $this; | |
| } | |
| /** | |
| * Resets the current data, so overrides are re-applied. | |
| * | |
| * This method should be called after the original data or the overridden data | |
| * has been changed. | |
| * | |
| * @return \Drupal\Core\Config\Config | |
| * The configuration object. | |
| */ | |
| protected function resetOverriddenData() { | |
| unset($this->overriddenData); | |
| return $this; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function set($key, $value) { | |
| parent::set($key, $value); | |
| $this->resetOverriddenData(); | |
| return $this; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function clear($key) { | |
| parent::clear($key); | |
| $this->resetOverriddenData(); | |
| return $this; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function save($has_trusted_data = FALSE) { | |
| // Validate the configuration object name before saving. | |
| static::validateName($this->name); | |
| // If there is a schema for this configuration object, cast all values to | |
| // conform to the schema. | |
| if (!$has_trusted_data) { | |
| if ($this->typedConfigManager->hasConfigSchema($this->name)) { | |
| // Ensure that the schema wrapper has the latest data. | |
| $this->schemaWrapper = NULL; | |
| foreach ($this->data as $key => $value) { | |
| $this->data[$key] = $this->castValue($key, $value); | |
| } | |
| } | |
| else { | |
| foreach ($this->data as $key => $value) { | |
| $this->validateValue($key, $value); | |
| } | |
| } | |
| } | |
| $this->storage->write($this->name, $this->data); | |
| if (!$this->isNew) { | |
| Cache::invalidateTags($this->getCacheTags()); | |
| } | |
| $this->isNew = FALSE; | |
| $this->eventDispatcher->dispatch(ConfigEvents::SAVE, new ConfigCrudEvent($this)); | |
| $this->originalData = $this->data; | |
| // Potentially configuration schema could have changed the underlying data's | |
| // types. | |
| $this->resetOverriddenData(); | |
| return $this; | |
| } | |
| /** | |
| * Deletes the configuration object. | |
| * | |
| * @return \Drupal\Core\Config\Config | |
| * The configuration object. | |
| */ | |
| public function delete() { | |
| $this->data = array(); | |
| $this->storage->delete($this->name); | |
| Cache::invalidateTags($this->getCacheTags()); | |
| $this->isNew = TRUE; | |
| $this->resetOverriddenData(); | |
| $this->eventDispatcher->dispatch(ConfigEvents::DELETE, new ConfigCrudEvent($this)); | |
| $this->originalData = $this->data; | |
| return $this; | |
| } | |
| /** | |
| * Gets the raw data without overrides. | |
| * | |
| * @return array | |
| * The raw data. | |
| */ | |
| public function getRawData() { | |
| return $this->data; | |
| } | |
| /** | |
| * Gets original data from this configuration object. | |
| * | |
| * Original data is the data as it is immediately after loading from | |
| * configuration storage before any changes. If this is a new configuration | |
| * object it will be an empty array. | |
| * | |
| * @see \Drupal\Core\Config\Config::get() | |
| * | |
| * @param string $key | |
| * A string that maps to a key within the configuration data. | |
| * @param bool $apply_overrides | |
| * Apply any overrides to the original data. Defaults to TRUE. | |
| * | |
| * @return mixed | |
| * The data that was requested. | |
| */ | |
| public function getOriginal($key = '', $apply_overrides = TRUE) { | |
| $original_data = $this->originalData; | |
| if ($apply_overrides) { | |
| // Apply overrides. | |
| if (isset($this->moduleOverrides) && is_array($this->moduleOverrides)) { | |
| $original_data = NestedArray::mergeDeepArray(array($original_data, $this->moduleOverrides), TRUE); | |
| } | |
| if (isset($this->settingsOverrides) && is_array($this->settingsOverrides)) { | |
| $original_data = NestedArray::mergeDeepArray(array($original_data, $this->settingsOverrides), TRUE); | |
| } | |
| } | |
| if (empty($key)) { | |
| return $original_data; | |
| } | |
| else { | |
| $parts = explode('.', $key); | |
| if (count($parts) == 1) { | |
| return isset($original_data[$key]) ? $original_data[$key] : NULL; | |
| } | |
| else { | |
| $value = NestedArray::getValue($original_data, $parts, $key_exists); | |
| return $key_exists ? $value : NULL; | |
| } | |
| } | |
| } | |
| } |