X-Git-Url: http://aleph1.co.uk/gitweb/?a=blobdiff_plain;f=web%2Fcore%2Flib%2FDrupal%2FCore%2FConfig%2FEntity%2FConfigEntityStorage.php;h=257fdf0fdb54412f3995cd1142cc028c227d798c;hb=refs%2Fheads%2Fd864;hp=723ba5316eeb5fdf966632120076204a8380beb7;hpb=9917807b03b64faf00f6a1f29dcb6eafc454efa5;p=yaffs-website diff --git a/web/core/lib/Drupal/Core/Config/Entity/ConfigEntityStorage.php b/web/core/lib/Drupal/Core/Config/Entity/ConfigEntityStorage.php index 723ba5316..257fdf0fd 100644 --- a/web/core/lib/Drupal/Core/Config/Entity/ConfigEntityStorage.php +++ b/web/core/lib/Drupal/Core/Config/Entity/ConfigEntityStorage.php @@ -3,6 +3,7 @@ namespace Drupal\Core\Config\Entity; use Drupal\Core\Cache\CacheableMetadata; +use Drupal\Core\Cache\MemoryCache\MemoryCacheInterface; use Drupal\Core\Config\ConfigFactoryInterface; use Drupal\Core\Config\ConfigImporterException; use Drupal\Core\Entity\EntityInterface; @@ -104,9 +105,11 @@ class ConfigEntityStorage extends EntityStorageBase implements ConfigEntityStora * The UUID service. * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager * The language manager. + * @param \Drupal\Core\Cache\MemoryCache\MemoryCacheInterface|null $memory_cache + * The memory cache backend. */ - public function __construct(EntityTypeInterface $entity_type, ConfigFactoryInterface $config_factory, UuidInterface $uuid_service, LanguageManagerInterface $language_manager) { - parent::__construct($entity_type); + public function __construct(EntityTypeInterface $entity_type, ConfigFactoryInterface $config_factory, UuidInterface $uuid_service, LanguageManagerInterface $language_manager, MemoryCacheInterface $memory_cache = NULL) { + parent::__construct($entity_type, $memory_cache); $this->configFactory = $config_factory; $this->uuidService = $uuid_service; @@ -121,7 +124,8 @@ class ConfigEntityStorage extends EntityStorageBase implements ConfigEntityStora $entity_type, $container->get('config.factory'), $container->get('uuid'), - $container->get('language_manager') + $container->get('language_manager'), + $container->get('entity.memory_cache') ); } @@ -324,43 +328,10 @@ class ConfigEntityStorage extends EntityStorageBase implements ConfigEntityStora } /** - * Gets entities from the static cache. - * - * @param array $ids - * If not empty, return entities that match these IDs. - * - * @return \Drupal\Core\Entity\EntityInterface[] - * Array of entities from the entity cache. - */ - protected function getFromStaticCache(array $ids) { - $entities = []; - // Load any available entities from the internal cache. - if ($this->entityType->isStaticallyCacheable() && !empty($this->entities)) { - $config_overrides_key = $this->overrideFree ? '' : implode(':', $this->configFactory->getCacheKeys()); - foreach ($ids as $id) { - if (!empty($this->entities[$id])) { - if (isset($this->entities[$id][$config_overrides_key])) { - $entities[$id] = $this->entities[$id][$config_overrides_key]; - } - } - } - } - return $entities; - } - - /** - * Stores entities in the static entity cache. - * - * @param \Drupal\Core\Entity\EntityInterface[] $entities - * Entities to store in the cache. - */ - protected function setStaticCache(array $entities) { - if ($this->entityType->isStaticallyCacheable()) { - $config_overrides_key = $this->overrideFree ? '' : implode(':', $this->configFactory->getCacheKeys()); - foreach ($entities as $id => $entity) { - $this->entities[$id][$config_overrides_key] = $entity; - } - } + * {@inheritdoc} + */ + protected function buildCacheId($id) { + return parent::buildCacheId($id) . ':' . ($this->overrideFree ? '' : implode(':', $this->configFactory->getCacheKeys())); } /** @@ -479,9 +450,27 @@ class ConfigEntityStorage extends EntityStorageBase implements ConfigEntityStora $data = $this->mapFromStorageRecords([$values]); $updated_entity = current($data); - foreach (array_keys($values) as $property) { - $value = $updated_entity->get($property); - $entity->set($property, $value); + /** @var \Drupal\Core\Config\Entity\ConfigEntityTypeInterface $entity_type */ + $entity_type = $this->getEntityType(); + $id_key = $entity_type->getKey('id'); + $properties = $entity_type->getPropertiesToExport($updated_entity->get($id_key)); + + if (empty($properties)) { + // Fallback to using the provided values. If the properties cannot be + // determined for the config entity type annotation or configuration + // schema. + $properties = array_keys($values); + } + foreach ($properties as $property) { + if ($property === $this->uuidKey) { + // During an update the UUID field should not be copied. Under regular + // circumstances the values will be equal. If configuration is written + // twice during configuration install the updated entity will not have a + // UUID. + // @see \Drupal\Core\Config\ConfigInstaller::createConfiguration() + continue; + } + $entity->set($property, $updated_entity->get($property)); } return $entity;