Updated Drupal to 8.6. This goes with the following updates because it's possible...
[yaffs-website] / web / core / lib / Drupal / Core / Entity / Plugin / DataType / ConfigEntityAdapter.php
diff --git a/web/core/lib/Drupal/Core/Entity/Plugin/DataType/ConfigEntityAdapter.php b/web/core/lib/Drupal/Core/Entity/Plugin/DataType/ConfigEntityAdapter.php
new file mode 100644 (file)
index 0000000..093c77d
--- /dev/null
@@ -0,0 +1,103 @@
+<?php
+
+namespace Drupal\Core\Entity\Plugin\DataType;
+
+use Drupal\Core\TypedData\Exception\MissingDataException;
+
+/**
+ * Enhances EntityAdapter for config entities.
+ */
+class ConfigEntityAdapter extends EntityAdapter {
+
+  /**
+   * The wrapped entity object.
+   *
+   * @var \Drupal\Core\Config\Entity\ConfigEntityInterface
+   */
+  protected $entity;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function get($property_name) {
+    if (!isset($this->entity)) {
+      throw new MissingDataException("Unable to get property $property_name as no entity has been provided.");
+    }
+    return $this->getConfigTypedData()->get($property_name);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function set($property_name, $value, $notify = TRUE) {
+    if (!isset($this->entity)) {
+      throw new MissingDataException("Unable to set property $property_name as no entity has been provided.");
+    }
+    $this->entity->set($property_name, $value, $notify);
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getProperties($include_computed = FALSE) {
+    if (!isset($this->entity)) {
+      throw new MissingDataException('Unable to get properties as no entity has been provided.');
+    }
+    return $this->getConfigTypedData()->getProperties($include_computed);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function onChange($property_name) {
+    if (isset($this->entity)) {
+      // Let the entity know of any changes.
+      $this->getConfigTypedData()->onChange($property_name);
+    }
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getIterator() {
+    if (isset($this->entity)) {
+      return $this->getConfigTypedData()->getIterator();
+    }
+    return new \ArrayIterator([]);
+  }
+
+  /**
+   * Gets the typed data manager.
+   *
+   * @return \Drupal\Core\Config\TypedConfigManagerInterface
+   *   The typed data manager.
+   */
+  public function getTypedDataManager() {
+    if (empty($this->typedDataManager)) {
+      $this->typedDataManager = \Drupal::service('config.typed');
+    }
+
+    return $this->typedDataManager;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function applyDefaultValue($notify = TRUE) {
+    // @todo Figure out what to do for this method, see
+    //   https://www.drupal.org/project/drupal/issues/2945635.
+    throw new \BadMethodCallException('Method not supported');
+  }
+
+  /**
+   * Gets typed data for config entity.
+   *
+   * @return \Drupal\Core\TypedData\ComplexDataInterface
+   *   The typed data.
+   */
+  protected function getConfigTypedData() {
+    return $this->getTypedDataManager()->createFromNameAndData($this->entity->getConfigDependencyName(), $this->entity->toArray());
+  }
+
+}