Mercurial > hg > isophonics-drupal-site
diff core/lib/Drupal/Core/Entity/RevisionLogEntityTrait.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/lib/Drupal/Core/Entity/RevisionLogEntityTrait.php Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,141 @@ +<?php + +namespace Drupal\Core\Entity; + +use Drupal\Core\Field\BaseFieldDefinition; +use Drupal\user\UserInterface; + +/** + * Provides a trait for accessing revision logging and ownership information. + * + * @ingroup entity_api + */ +trait RevisionLogEntityTrait { + + /** + * Provides revision-related base field definitions for an entity type. + * + * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type + * The entity type definition. + * + * @return \Drupal\Core\Field\FieldDefinitionInterface[] + * An array of base field definitions for the entity type, keyed by field + * name. + * + * @see \Drupal\Core\Entity\FieldableEntityInterface::baseFieldDefinitions() + */ + public static function revisionLogBaseFieldDefinitions(EntityTypeInterface $entity_type) { + $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[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[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) + ->setDefaultValue('') + ->setDisplayOptions('form', [ + 'type' => 'string_textarea', + 'weight' => 25, + 'settings' => [ + 'rows' => 4, + ], + ]); + + return $fields; + } + + /** + * Implements \Drupal\Core\Entity\RevisionLogInterface::getRevisionCreationTime(). + */ + public function getRevisionCreationTime() { + return $this->{static::getRevisionMetadataKey($this->getEntityType(), 'revision_created')}->value; + } + + /** + * Implements \Drupal\Core\Entity\RevisionLogInterface::setRevisionCreationTime(). + */ + public function setRevisionCreationTime($timestamp) { + $this->{static::getRevisionMetadataKey($this->getEntityType(), 'revision_created')}->value = $timestamp; + return $this; + } + + /** + * Implements \Drupal\Core\Entity\RevisionLogInterface::getRevisionUser(). + */ + public function getRevisionUser() { + return $this->{static::getRevisionMetadataKey($this->getEntityType(), 'revision_user')}->entity; + } + + /** + * Implements \Drupal\Core\Entity\RevisionLogInterface::setRevisionUser(). + */ + public function setRevisionUser(UserInterface $account) { + $this->{static::getRevisionMetadataKey($this->getEntityType(), 'revision_user')}->entity = $account; + return $this; + } + + /** + * Implements \Drupal\Core\Entity\RevisionLogInterface::getRevisionUserId(). + */ + public function getRevisionUserId() { + return $this->{static::getRevisionMetadataKey($this->getEntityType(), 'revision_user')}->target_id; + } + + /** + * Implements \Drupal\Core\Entity\RevisionLogInterface::setRevisionUserId(). + */ + public function setRevisionUserId($user_id) { + $this->{static::getRevisionMetadataKey($this->getEntityType(), 'revision_user')}->target_id = $user_id; + return $this; + } + + /** + * Implements \Drupal\Core\Entity\RevisionLogInterface::getRevisionLogMessage(). + */ + public function getRevisionLogMessage() { + return $this->{static::getRevisionMetadataKey($this->getEntityType(), 'revision_log_message')}->value; + } + + /** + * Implements \Drupal\Core\Entity\RevisionLogInterface::setRevisionLogMessage(). + */ + public function setRevisionLogMessage($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]; + } + +}