X-Git-Url: http://aleph1.co.uk/gitweb/?a=blobdiff_plain;f=web%2Fcore%2Flib%2FDrupal%2FCore%2FEntity%2FEntityFieldManager.php;h=88186c6706881e2276c3981596c3e436b20904b1;hb=5b8bb166bfa98770daef9de5c127fc2e6ef02340;hp=378a95ca94907dc7cbb0206b802d0e9b1fe17274;hpb=a2bd1bf0c2c1f1a17d188f4dc0726a45494cefae;p=yaffs-website diff --git a/web/core/lib/Drupal/Core/Entity/EntityFieldManager.php b/web/core/lib/Drupal/Core/Entity/EntityFieldManager.php index 378a95ca9..88186c670 100644 --- a/web/core/lib/Drupal/Core/Entity/EntityFieldManager.php +++ b/web/core/lib/Drupal/Core/Entity/EntityFieldManager.php @@ -60,7 +60,7 @@ class EntityFieldManager implements EntityFieldManagerInterface { * - type: The field type. * - bundles: The bundles in which the field appears. * - * @return array + * @var array */ protected $fieldMap = []; @@ -190,8 +190,10 @@ class EntityFieldManager implements EntityFieldManagerInterface { * flagged as translatable. */ protected function buildBaseFieldDefinitions($entity_type_id) { + /** @var \Drupal\Core\Entity\ContentEntityTypeInterface $entity_type */ $entity_type = $this->entityTypeManager->getDefinition($entity_type_id); $class = $entity_type->getClass(); + /** @var string[] $keys */ $keys = array_filter($entity_type->getKeys()); // Fail with an exception for non-fieldable entity types. @@ -220,6 +222,35 @@ class EntityFieldManager implements EntityFieldManagerInterface { } } + // Make sure that revisionable entity types are correctly defined. + if ($entity_type->isRevisionable()) { + // Disable the BC layer to prevent a recursion, this only needs the + // revision_default key that is always set. + $field_name = $entity_type->getRevisionMetadataKeys(FALSE)['revision_default']; + $base_field_definitions[$field_name] = BaseFieldDefinition::create('boolean') + ->setLabel($this->t('Default revision')) + ->setDescription($this->t('A flag indicating whether this was a default revision when it was saved.')) + ->setStorageRequired(TRUE) + ->setInternal(TRUE) + ->setTranslatable(FALSE) + ->setRevisionable(TRUE); + } + + // Make sure that revisionable and translatable entity types are correctly + // defined. + if ($entity_type->isRevisionable() && $entity_type->isTranslatable()) { + // The 'revision_translation_affected' field should always be defined. + // This field has been added unconditionally in Drupal 8.4.0 and it is + // overriding any pre-existing definition on purpose so that any + // differences are immediately available in the status report. + $base_field_definitions[$keys['revision_translation_affected']] = BaseFieldDefinition::create('boolean') + ->setLabel($this->t('Revision translation affected')) + ->setDescription($this->t('Indicates if the last edit of a translation belongs to current revision.')) + ->setReadOnly(TRUE) + ->setRevisionable(TRUE) + ->setTranslatable(TRUE); + } + // Assign base field definitions the entity type provider. $provider = $entity_type->getProvider(); foreach ($base_field_definitions as $definition) { @@ -332,7 +363,7 @@ class EntityFieldManager implements EntityFieldManagerInterface { // Load base field overrides from configuration. These take precedence over // base field overrides returned above. - $base_field_override_ids = array_map(function($field_name) use ($entity_type_id, $bundle) { + $base_field_override_ids = array_map(function ($field_name) use ($entity_type_id, $bundle) { return $entity_type_id . '.' . $bundle . '.' . $field_name; }, array_keys($base_field_definitions)); $base_field_overrides = $this->entityTypeManager->getStorage('base_field_override')->loadMultiple($base_field_override_ids); @@ -466,7 +497,7 @@ class EntityFieldManager implements EntityFieldManagerInterface { } } - $this->cacheSet($cid, $this->fieldMap, Cache::PERMANENT, ['entity_types']); + $this->cacheSet($cid, $this->fieldMap, Cache::PERMANENT, ['entity_types', 'entity_field_info']); } } return $this->fieldMap;