Security update for Core, with self-updated composer
[yaffs-website] / web / core / lib / Drupal / Core / Entity / RevisionLogEntityTrait.php
index 73928581d7ec286f1cc1a1cc53b41aa8ae4669c3..f935a8b5109945b102966278f77ae813fe9d8c45 100644 (file)
@@ -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];
+  }
+
 }