Contains \Drupal\Core\Config\Schema\Mapping.
<?php /** * @file * Contains \Drupal\Core\Config\Schema\Mapping. */ namespace Drupal\Core\Config\Schema; use Drupal\Component\Utility\NestedArray; use Drupal\Core\TypedData\ComplexDataInterface; use Drupal\Core\TypedData\TypedDataInterface; use InvalidArgumentException; /** * Defines a mapping configuration element. * * Wraps configuration data and metadata allowing access to configuration data * using the ComplexDataInterface API. This object may contain any number and * type of nested properties. */ class Mapping extends ArrayElement implements ComplexDataInterface { /** * Overrides ArrayElement::parse() */ protected function parse() { $elements = array(); foreach ($this->definition['mapping'] as $key => $definition) { if (isset($this->value[$key])) { $elements[$key] = $this ->parseElement($key, $this->value[$key], $definition); } } return $elements; } /** * Implements Drupal\Core\TypedData\ComplexDataInterface::get(). */ public function get($property_name) { $elements = $this ->getElements(); if (isset($elements[$property_name])) { return $elements[$property_name]; } else { throw new InvalidArgumentException(format_string("The configuration property @key doesn't exist.", array( '@key' => $property_name, ))); } } /** * Implements Drupal\Core\TypedData\ComplexDataInterface::set(). */ public function set($property_name, $value, $notify = TRUE) { // Notify the parent of any changes to be made. if ($notify && isset($this->parent)) { $this->parent ->onChange($this->name); } // Set the data into the configuration array but behave according to the // interface specification when we've got a null value. if (isset($value)) { $this->value[$property_name] = $value; return $this ->get($property_name); } else { // In these objects, when clearing the value, the property is gone. // As this needs to return a property, we get it before we delete it. $property = $this ->get($property_name); unset($this->value[$property_name]); $property ->setValue($value); return $property; } } /** * Implements Drupal\Core\TypedData\ComplexDataInterface::getProperties(). */ public function getProperties($include_computed = FALSE) { return $this ->getElements(); } /** * Implements Drupal\Core\TypedData\ComplexDataInterface::getPropertyValues(). */ public function getPropertyValues() { return $this ->getValue(); } /** * Implements Drupal\Core\TypedData\ComplexDataInterface::setPropertyValues(). */ public function setPropertyValues($values) { foreach ($values as $name => $value) { $this->value[$name] = $value; } return $this; } /** * Implements Drupal\Core\TypedData\ComplexDataInterface::getPropertyDefinition(). */ public function getPropertyDefinition($name) { if (isset($this->definition['mapping'][$name])) { return $this->definition['mapping'][$name]; } else { return FALSE; } } /** * Implements Drupal\Core\TypedData\ComplexDataInterface::getPropertyDefinitions(). */ public function getPropertyDefinitions() { $list = array(); foreach ($this ->getAllKeys() as $key) { $list[$key] = $this ->getPropertyDefinition($key); } return $list; } /** * Implements Drupal\Core\TypedData\ComplexDataInterface::isEmpty(). */ public function isEmpty() { return empty($this->value); } /** * Implements \Drupal\Core\TypedData\ComplexDataInterface::onChange(). */ public function onChange($property_name) { // Notify the parent of changes. if (isset($this->parent)) { $this->parent ->onChange($this->name); } } }