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 }
|