Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 11 |
CRAP | |
0.00% |
0 / 31 |
ArrayElement | |
0.00% |
0 / 1 |
|
8.33% |
1 / 12 |
600 | |
0.00% |
0 / 31 |
getAllKeys | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 1 |
|||
parse | |
0.00% |
0 / 1 |
12 | |
0.00% |
0 / 6 |
|||
getElementDefinition | |
100.00% |
1 / 1 |
1 | |
100.00% |
0 / 0 |
|||
get | |
0.00% |
0 / 1 |
42 | |
0.00% |
0 / 12 |
|||
getElements | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 3 |
|||
isEmpty | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 1 |
|||
toArray | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 1 |
|||
onChange | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 3 |
|||
getIterator | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 1 |
|||
createElement | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 1 |
|||
buildDataDefinition | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 1 |
|||
isNullable | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 1 |
<?php | |
/** | |
* @file | |
* Contains \Drupal\Core\Config\Schema\ArrayElement. | |
*/ | |
namespace Drupal\Core\Config\Schema; | |
/** | |
* Defines a generic configuration element that contains multiple properties. | |
*/ | |
abstract class ArrayElement extends Element implements \IteratorAggregate, TypedConfigInterface { | |
/** | |
* Parsed elements. | |
*/ | |
protected $elements; | |
/** | |
* Gets valid configuration data keys. | |
* | |
* @return array | |
* Array of valid configuration data keys. | |
*/ | |
protected function getAllKeys() { | |
return is_array($this->value) ? array_keys($this->value) : array(); | |
} | |
/** | |
* Builds an array of contained elements. | |
* | |
* @return \Drupal\Core\TypedData\TypedDataInterface[] | |
* An array of elements contained in this element. | |
*/ | |
protected function parse() { | |
$elements = array(); | |
foreach ($this->getAllKeys() as $key) { | |
$value = isset($this->value[$key]) ? $this->value[$key] : NULL; | |
$definition = $this->getElementDefinition($key); | |
$elements[$key] = $this->createElement($definition, $value, $key); | |
} | |
return $elements; | |
} | |
/** | |
* Gets data definition object for contained element. | |
* | |
* @param int|string $key | |
* Property name or index of the element. | |
* | |
* @return \Drupal\Core\TypedData\DataDefinitionInterface | |
*/ | |
protected abstract function getElementDefinition($key); | |
/** | |
* {@inheritdoc} | |
*/ | |
public function get($name) { | |
$parts = explode('.', $name); | |
$root_key = array_shift($parts); | |
$elements = $this->getElements(); | |
if (isset($elements[$root_key])) { | |
$element = $elements[$root_key]; | |
// If $property_name contained a dot recurse into the keys. | |
while ($element && ($key = array_shift($parts)) !== NULL) { | |
if ($element instanceof TypedConfigInterface) { | |
$element = $element->get($key); | |
} | |
else { | |
$element = NULL; | |
} | |
} | |
} | |
if (isset($element)) { | |
return $element; | |
} | |
else { | |
throw new \InvalidArgumentException("The configuration property $name doesn't exist."); | |
} | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function getElements() { | |
if (!isset($this->elements)) { | |
$this->elements = $this->parse(); | |
} | |
return $this->elements; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function isEmpty() { | |
return empty($this->value); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function toArray() { | |
return isset($this->value) ? $this->value : array(); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function onChange($name) { | |
// Notify the parent of changes. | |
if (isset($this->parent)) { | |
$this->parent->onChange($this->name); | |
} | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function getIterator() { | |
return new \ArrayIterator($this->getElements()); | |
} | |
/** | |
* Creates a contained typed configuration object. | |
* | |
* @param \Drupal\Core\TypedData\DataDefinitionInterface $definition | |
* The data definition object. | |
* @param mixed $value | |
* (optional) The data value. If set, it has to match one of the supported | |
* data type format as documented for the data type classes. | |
* @param string $key | |
* The key of the contained element. | |
* | |
* @return \Drupal\Core\TypedData\TypedDataInterface | |
*/ | |
protected function createElement($definition, $value, $key) { | |
return $this->getTypedDataManager()->create($definition, $value, $key, $this); | |
} | |
/** | |
* Creates a new data definition object from a type definition array and | |
* actual configuration data. | |
* | |
* @param array $definition | |
* The base type definition array, for which a data definition should be | |
* created. | |
* @param $value | |
* The value of the configuration element. | |
* @param string $key | |
* The key of the contained element. | |
* | |
* @return \Drupal\Core\TypedData\DataDefinitionInterface | |
*/ | |
protected function buildDataDefinition($definition, $value, $key) { | |
return $this->getTypedDataManager()->buildDataDefinition($definition, $value, $key, $this); | |
} | |
/** | |
* Determines if this element allows NULL as a value. | |
* | |
* @return bool | |
* TRUE if NULL is a valid value, FALSE otherwise. | |
*/ | |
public function isNullable() { | |
return isset($this->definition['nullable']) && $this->definition['nullable'] == TRUE; | |
} | |
} |