Mercurial > hg > cmmr2012-drupal-site
diff core/modules/config/src/StorageReplaceDataWrapper.php @ 0:c75dbcec494b
Initial commit from drush-created site
author | Chris Cannam |
---|---|
date | Thu, 05 Jul 2018 14:24:15 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/modules/config/src/StorageReplaceDataWrapper.php Thu Jul 05 14:24:15 2018 +0000 @@ -0,0 +1,203 @@ +<?php + +namespace Drupal\config; + +use Drupal\Core\Config\StorageInterface; +use Drupal\Core\DependencyInjection\DependencySerializationTrait; + +/** + * Wraps a configuration storage to allow replacing specific configuration data. + */ +class StorageReplaceDataWrapper implements StorageInterface { + use DependencySerializationTrait; + + /** + * The configuration storage to be wrapped. + * + * @var \Drupal\Core\Config\StorageInterface + */ + protected $storage; + + /** + * The configuration replacement data, keyed by configuration object name. + * + * @var array + */ + protected $replacementData = []; + + /** + * The storage collection. + * + * @var string + */ + protected $collection; + + /** + * Constructs a new StorageReplaceDataWrapper. + * + * @param \Drupal\Core\Config\StorageInterface $storage + * A configuration storage to be used to read and write configuration. + * @param string $collection + * (optional) The collection to store configuration in. Defaults to the + * default collection. + */ + public function __construct(StorageInterface $storage, $collection = StorageInterface::DEFAULT_COLLECTION) { + $this->storage = $storage; + $this->collection = $collection; + $this->replacementData[$collection] = []; + } + + /** + * {@inheritdoc} + */ + public function exists($name) { + return isset($this->replacementData[$this->collection][$name]) || $this->storage->exists($name); + } + + /** + * {@inheritdoc} + */ + public function read($name) { + if (isset($this->replacementData[$this->collection][$name])) { + return $this->replacementData[$this->collection][$name]; + } + return $this->storage->read($name); + } + + /** + * {@inheritdoc} + */ + public function readMultiple(array $names) { + $data = $this->storage->readMultiple(($names)); + foreach ($names as $name) { + if (isset($this->replacementData[$this->collection][$name])) { + $data[$name] = $this->replacementData[$this->collection][$name]; + } + } + return $data; + } + + /** + * {@inheritdoc} + */ + public function write($name, array $data) { + if (isset($this->replacementData[$this->collection][$name])) { + unset($this->replacementData[$this->collection][$name]); + } + return $this->storage->write($name, $data); + } + + /** + * {@inheritdoc} + */ + public function delete($name) { + if (isset($this->replacementData[$this->collection][$name])) { + unset($this->replacementData[$this->collection][$name]); + } + return $this->storage->delete($name); + } + + /** + * {@inheritdoc} + */ + public function rename($name, $new_name) { + if (isset($this->replacementData[$this->collection][$name])) { + $this->replacementData[$this->collection][$new_name] = $this->replacementData[$this->collection][$name]; + unset($this->replacementData[$this->collection][$name]); + } + return $this->storage->rename($name, $new_name); + } + + /** + * {@inheritdoc} + */ + public function encode($data) { + return $this->storage->encode($data); + } + + /** + * {@inheritdoc} + */ + public function decode($raw) { + return $this->storage->decode($raw); + } + + /** + * {@inheritdoc} + */ + public function listAll($prefix = '') { + $names = $this->storage->listAll($prefix); + $additional_names = []; + if ($prefix === '') { + $additional_names = array_keys($this->replacementData[$this->collection]); + } + else { + foreach (array_keys($this->replacementData[$this->collection]) as $name) { + if (strpos($name, $prefix) === 0) { + $additional_names[] = $name; + } + } + } + if (!empty($additional_names)) { + $names = array_unique(array_merge($names, $additional_names)); + } + return $names; + } + + /** + * {@inheritdoc} + */ + public function deleteAll($prefix = '') { + if ($prefix === '') { + $this->replacementData[$this->collection] = []; + } + else { + foreach (array_keys($this->replacementData[$this->collection]) as $name) { + if (strpos($name, $prefix) === 0) { + unset($this->replacementData[$this->collection][$name]); + } + } + } + return $this->storage->deleteAll($prefix); + } + + /** + * {@inheritdoc} + */ + public function createCollection($collection) { + return new static( + $this->storage->createCollection($collection), + $collection + ); + } + + /** + * {@inheritdoc} + */ + public function getAllCollectionNames() { + return $this->storage->getAllCollectionNames(); + } + + /** + * {@inheritdoc} + */ + public function getCollectionName() { + return $this->collection; + } + + /** + * Replaces the configuration object data with the supplied data. + * + * @param $name + * The configuration object name whose data to replace. + * @param array $data + * The configuration data. + * + * @return $this + */ + public function replaceData($name, array $data) { + $this->replacementData[$this->collection][$name] = $data; + return $this; + } + +}