annotate core/lib/Drupal/Core/Entity/RevisionLogEntityTrait.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 4c8ae668cc8c
children
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 namespace Drupal\Core\Entity;
Chris@0 4
Chris@0 5 use Drupal\Core\Field\BaseFieldDefinition;
Chris@0 6 use Drupal\user\UserInterface;
Chris@0 7
Chris@0 8 /**
Chris@0 9 * Provides a trait for accessing revision logging and ownership information.
Chris@0 10 *
Chris@0 11 * @ingroup entity_api
Chris@0 12 */
Chris@0 13 trait RevisionLogEntityTrait {
Chris@0 14
Chris@0 15 /**
Chris@0 16 * Provides revision-related base field definitions for an entity type.
Chris@0 17 *
Chris@0 18 * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type
Chris@0 19 * The entity type definition.
Chris@0 20 *
Chris@0 21 * @return \Drupal\Core\Field\FieldDefinitionInterface[]
Chris@0 22 * An array of base field definitions for the entity type, keyed by field
Chris@0 23 * name.
Chris@0 24 *
Chris@0 25 * @see \Drupal\Core\Entity\FieldableEntityInterface::baseFieldDefinitions()
Chris@0 26 */
Chris@0 27 public static function revisionLogBaseFieldDefinitions(EntityTypeInterface $entity_type) {
Chris@0 28 $fields[static::getRevisionMetadataKey($entity_type, 'revision_created')] = BaseFieldDefinition::create('created')
Chris@0 29 ->setLabel(t('Revision create time'))
Chris@0 30 ->setDescription(t('The time that the current revision was created.'))
Chris@0 31 ->setRevisionable(TRUE);
Chris@0 32
Chris@0 33 $fields[static::getRevisionMetadataKey($entity_type, 'revision_user')] = BaseFieldDefinition::create('entity_reference')
Chris@0 34 ->setLabel(t('Revision user'))
Chris@0 35 ->setDescription(t('The user ID of the author of the current revision.'))
Chris@0 36 ->setSetting('target_type', 'user')
Chris@0 37 ->setRevisionable(TRUE);
Chris@0 38
Chris@0 39 $fields[static::getRevisionMetadataKey($entity_type, 'revision_log_message')] = BaseFieldDefinition::create('string_long')
Chris@0 40 ->setLabel(t('Revision log message'))
Chris@0 41 ->setDescription(t('Briefly describe the changes you have made.'))
Chris@0 42 ->setRevisionable(TRUE)
Chris@0 43 ->setDefaultValue('')
Chris@0 44 ->setDisplayOptions('form', [
Chris@0 45 'type' => 'string_textarea',
Chris@0 46 'weight' => 25,
Chris@0 47 'settings' => [
Chris@0 48 'rows' => 4,
Chris@0 49 ],
Chris@0 50 ]);
Chris@0 51
Chris@0 52 return $fields;
Chris@0 53 }
Chris@0 54
Chris@0 55 /**
Chris@0 56 * Implements \Drupal\Core\Entity\RevisionLogInterface::getRevisionCreationTime().
Chris@0 57 */
Chris@0 58 public function getRevisionCreationTime() {
Chris@0 59 return $this->{static::getRevisionMetadataKey($this->getEntityType(), 'revision_created')}->value;
Chris@0 60 }
Chris@0 61
Chris@0 62 /**
Chris@0 63 * Implements \Drupal\Core\Entity\RevisionLogInterface::setRevisionCreationTime().
Chris@0 64 */
Chris@0 65 public function setRevisionCreationTime($timestamp) {
Chris@0 66 $this->{static::getRevisionMetadataKey($this->getEntityType(), 'revision_created')}->value = $timestamp;
Chris@0 67 return $this;
Chris@0 68 }
Chris@0 69
Chris@0 70 /**
Chris@0 71 * Implements \Drupal\Core\Entity\RevisionLogInterface::getRevisionUser().
Chris@0 72 */
Chris@0 73 public function getRevisionUser() {
Chris@0 74 return $this->{static::getRevisionMetadataKey($this->getEntityType(), 'revision_user')}->entity;
Chris@0 75 }
Chris@0 76
Chris@0 77 /**
Chris@0 78 * Implements \Drupal\Core\Entity\RevisionLogInterface::setRevisionUser().
Chris@0 79 */
Chris@0 80 public function setRevisionUser(UserInterface $account) {
Chris@0 81 $this->{static::getRevisionMetadataKey($this->getEntityType(), 'revision_user')}->entity = $account;
Chris@0 82 return $this;
Chris@0 83 }
Chris@0 84
Chris@0 85 /**
Chris@0 86 * Implements \Drupal\Core\Entity\RevisionLogInterface::getRevisionUserId().
Chris@0 87 */
Chris@0 88 public function getRevisionUserId() {
Chris@0 89 return $this->{static::getRevisionMetadataKey($this->getEntityType(), 'revision_user')}->target_id;
Chris@0 90 }
Chris@0 91
Chris@0 92 /**
Chris@0 93 * Implements \Drupal\Core\Entity\RevisionLogInterface::setRevisionUserId().
Chris@0 94 */
Chris@0 95 public function setRevisionUserId($user_id) {
Chris@0 96 $this->{static::getRevisionMetadataKey($this->getEntityType(), 'revision_user')}->target_id = $user_id;
Chris@0 97 return $this;
Chris@0 98 }
Chris@0 99
Chris@0 100 /**
Chris@0 101 * Implements \Drupal\Core\Entity\RevisionLogInterface::getRevisionLogMessage().
Chris@0 102 */
Chris@0 103 public function getRevisionLogMessage() {
Chris@0 104 return $this->{static::getRevisionMetadataKey($this->getEntityType(), 'revision_log_message')}->value;
Chris@0 105 }
Chris@0 106
Chris@0 107 /**
Chris@0 108 * Implements \Drupal\Core\Entity\RevisionLogInterface::setRevisionLogMessage().
Chris@0 109 */
Chris@0 110 public function setRevisionLogMessage($revision_log_message) {
Chris@0 111 $this->{static::getRevisionMetadataKey($this->getEntityType(), 'revision_log_message')}->value = $revision_log_message;
Chris@0 112 return $this;
Chris@0 113 }
Chris@0 114
Chris@0 115 /**
Chris@0 116 * Gets the name of a revision metadata field.
Chris@0 117 *
Chris@0 118 * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type
Chris@0 119 * A content entity type definition.
Chris@0 120 * @param string $key
Chris@0 121 * The revision metadata key to get, must be one of 'revision_created',
Chris@0 122 * 'revision_user' or 'revision_log_message'.
Chris@0 123 *
Chris@0 124 * @return string
Chris@0 125 * The name of the field for the specified $key.
Chris@0 126 */
Chris@0 127 protected static function getRevisionMetadataKey(EntityTypeInterface $entity_type, $key) {
Chris@0 128 // We need to prevent ContentEntityType::getRevisionMetadataKey() from
Chris@0 129 // providing fallback as that requires fetching the entity type's field
Chris@0 130 // definition leading to an infinite recursion.
Chris@0 131 /** @var \Drupal\Core\Entity\ContentEntityTypeInterface $entity_type */
Chris@0 132 $revision_metadata_keys = $entity_type->getRevisionMetadataKeys(FALSE) + [
Chris@0 133 'revision_created' => 'revision_created',
Chris@0 134 'revision_user' => 'revision_user',
Chris@0 135 'revision_log_message' => 'revision_log_message',
Chris@0 136 ];
Chris@0 137
Chris@0 138 return $revision_metadata_keys[$key];
Chris@0 139 }
Chris@0 140
Chris@0 141 }