X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs-website;a=blobdiff_plain;f=web%2Fcore%2Flib%2FDrupal%2FCore%2FEntity%2FRevisionLogEntityTrait.php;fp=web%2Fcore%2Flib%2FDrupal%2FCore%2FEntity%2FRevisionLogEntityTrait.php;h=f935a8b5109945b102966278f77ae813fe9d8c45;hp=73928581d7ec286f1cc1a1cc53b41aa8ae4669c3;hb=9917807b03b64faf00f6a1f29dcb6eafc454efa5;hpb=aea91e65e895364e460983b890e295aa5d5540a5 diff --git a/web/core/lib/Drupal/Core/Entity/RevisionLogEntityTrait.php b/web/core/lib/Drupal/Core/Entity/RevisionLogEntityTrait.php index 73928581d..f935a8b51 100644 --- a/web/core/lib/Drupal/Core/Entity/RevisionLogEntityTrait.php +++ b/web/core/lib/Drupal/Core/Entity/RevisionLogEntityTrait.php @@ -25,18 +25,18 @@ trait RevisionLogEntityTrait { * @see \Drupal\Core\Entity\FieldableEntityInterface::baseFieldDefinitions() */ public static function revisionLogBaseFieldDefinitions(EntityTypeInterface $entity_type) { - $fields['revision_created'] = BaseFieldDefinition::create('created') + $fields[static::getRevisionMetadataKey($entity_type, 'revision_created')] = BaseFieldDefinition::create('created') ->setLabel(t('Revision create time')) ->setDescription(t('The time that the current revision was created.')) ->setRevisionable(TRUE); - $fields['revision_user'] = BaseFieldDefinition::create('entity_reference') + $fields[static::getRevisionMetadataKey($entity_type, 'revision_user')] = BaseFieldDefinition::create('entity_reference') ->setLabel(t('Revision user')) ->setDescription(t('The user ID of the author of the current revision.')) ->setSetting('target_type', 'user') ->setRevisionable(TRUE); - $fields['revision_log_message'] = BaseFieldDefinition::create('string_long') + $fields[static::getRevisionMetadataKey($entity_type, 'revision_log_message')] = BaseFieldDefinition::create('string_long') ->setLabel(t('Revision log message')) ->setDescription(t('Briefly describe the changes you have made.')) ->setRevisionable(TRUE) @@ -56,14 +56,14 @@ trait RevisionLogEntityTrait { * Implements \Drupal\Core\Entity\RevisionLogInterface::getRevisionCreationTime(). */ public function getRevisionCreationTime() { - return $this->revision_created->value; + return $this->{static::getRevisionMetadataKey($this->getEntityType(), 'revision_created')}->value; } /** * Implements \Drupal\Core\Entity\RevisionLogInterface::setRevisionCreationTime(). */ public function setRevisionCreationTime($timestamp) { - $this->revision_created->value = $timestamp; + $this->{static::getRevisionMetadataKey($this->getEntityType(), 'revision_created')}->value = $timestamp; return $this; } @@ -71,14 +71,14 @@ trait RevisionLogEntityTrait { * Implements \Drupal\Core\Entity\RevisionLogInterface::getRevisionUser(). */ public function getRevisionUser() { - return $this->revision_user->entity; + return $this->{static::getRevisionMetadataKey($this->getEntityType(), 'revision_user')}->entity; } /** * Implements \Drupal\Core\Entity\RevisionLogInterface::setRevisionUser(). */ public function setRevisionUser(UserInterface $account) { - $this->revision_user->entity = $account; + $this->{static::getRevisionMetadataKey($this->getEntityType(), 'revision_user')}->entity = $account; return $this; } @@ -86,14 +86,14 @@ trait RevisionLogEntityTrait { * Implements \Drupal\Core\Entity\RevisionLogInterface::getRevisionUserId(). */ public function getRevisionUserId() { - return $this->revision_user->target_id; + return $this->{static::getRevisionMetadataKey($this->getEntityType(), 'revision_user')}->target_id; } /** * Implements \Drupal\Core\Entity\RevisionLogInterface::setRevisionUserId(). */ public function setRevisionUserId($user_id) { - $this->revision_user->target_id = $user_id; + $this->{static::getRevisionMetadataKey($this->getEntityType(), 'revision_user')}->target_id = $user_id; return $this; } @@ -101,15 +101,41 @@ trait RevisionLogEntityTrait { * Implements \Drupal\Core\Entity\RevisionLogInterface::getRevisionLogMessage(). */ public function getRevisionLogMessage() { - return $this->revision_log_message->value; + return $this->{static::getRevisionMetadataKey($this->getEntityType(), 'revision_log_message')}->value; } /** * Implements \Drupal\Core\Entity\RevisionLogInterface::setRevisionLogMessage(). */ public function setRevisionLogMessage($revision_log_message) { - $this->revision_log_message->value = $revision_log_message; + $this->{static::getRevisionMetadataKey($this->getEntityType(), 'revision_log_message')}->value = $revision_log_message; return $this; } + /** + * Gets the name of a revision metadata field. + * + * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type + * A content entity type definition. + * @param string $key + * The revision metadata key to get, must be one of 'revision_created', + * 'revision_user' or 'revision_log_message'. + * + * @return string + * The name of the field for the specified $key. + */ + protected static function getRevisionMetadataKey(EntityTypeInterface $entity_type, $key) { + // We need to prevent ContentEntityType::getRevisionMetadataKey() from + // providing fallback as that requires fetching the entity type's field + // definition leading to an infinite recursion. + /** @var \Drupal\Core\Entity\ContentEntityTypeInterface $entity_type */ + $revision_metadata_keys = $entity_type->getRevisionMetadataKeys(FALSE) + [ + 'revision_created' => 'revision_created', + 'revision_user' => 'revision_user', + 'revision_log_message' => 'revision_log_message', + ]; + + return $revision_metadata_keys[$key]; + } + }