diff --git a/src/Entity/Replication.php b/src/Entity/Replication.php index d76baf6..301cdd4 100644 --- a/src/Entity/Replication.php +++ b/src/Entity/Replication.php @@ -137,13 +137,11 @@ class Replication extends ContentEntityBase implements ContentEntityInterface, E ->setDisplayConfigurable('form', TRUE) ->setDisplayConfigurable('view', TRUE); - $fields['source'] = BaseFieldDefinition::create('list_string') + $fields['source'] = BaseFieldDefinition::create('entity_reference') ->setLabel(t('Source')) ->setDescription(t('The source endpoint.')) ->setRequired(TRUE) - ->setSettings([ - 'allowed_values_function' => 'workspace_pointer_allowed_values' - ]) + ->setSetting('target_type', 'workspace_pointer') ->setDisplayOptions('view', array( 'label' => 'above', 'weight' => -2, @@ -155,13 +153,11 @@ class Replication extends ContentEntityBase implements ContentEntityInterface, E ->setDisplayConfigurable('form', TRUE) ->setDisplayConfigurable('view', TRUE); - $fields['target'] = BaseFieldDefinition::create('list_string') + $fields['target'] = BaseFieldDefinition::create('entity_reference') ->setLabel(t('Target')) ->setDescription(t('The target endpoint.')) ->setRequired(TRUE) - ->setSettings([ - 'allowed_values_function' => 'workspace_pointer_allowed_values' - ]) + ->setSetting('target_type', 'workspace_pointer') ->setDisplayOptions('view', array( 'label' => 'above', 'weight' => -1, @@ -200,14 +196,4 @@ class Replication extends ContentEntityBase implements ContentEntityInterface, E return array(\Drupal::currentUser()->id()); } - public static function getPointerAllowedValues(FieldStorageDefinitionInterface $definition, FieldableEntityInterface $entity = NULL, &$cacheable) { - $cacheable = FALSE; - $pointers = \Drupal::service('workspace.pointer')->getMultiple(); - $pointer_allowed_values = []; - foreach ($pointers as $key => $value) { - $pointer_allowed_values[$key] = $value->label(); - } - return $pointer_allowed_values; - } - } diff --git a/src/Entity/WorkspacePointer.php b/src/Entity/WorkspacePointer.php index be50f30..c141d75 100644 --- a/src/Entity/WorkspacePointer.php +++ b/src/Entity/WorkspacePointer.php @@ -21,9 +21,12 @@ use Drupal\workspace\WorkspacePointerInterface; * base_table = "workspace_pointer", * entity_keys = { * "id" = "id", + * "revision" = "revision_id", * "label" = "name", * "uuid" = "uuid", * }, + * local = TRUE, + * multiversion = FALSE * ) */ class WorkspacePointer extends ContentEntityBase implements WorkspacePointerInterface { @@ -70,7 +73,7 @@ class WorkspacePointer extends ContentEntityBase implements WorkspacePointerInte * {@inheritdoc} */ public function setWorkspace(WorkspaceInterface $workspace) { - $this->set('workspace', $workspace->id()); + $this->set('workspace_pointer', $workspace->id()); return $this; } @@ -78,7 +81,7 @@ class WorkspacePointer extends ContentEntityBase implements WorkspacePointerInte * {@inheritdoc} */ public function setWorkspaceId($workspace_id) { - $this->set('workspace', $workspace_id); + $this->set('workspace_pointer', $workspace_id); return $this; } @@ -86,7 +89,7 @@ class WorkspacePointer extends ContentEntityBase implements WorkspacePointerInte * {@inheritdoc} */ public function getWorkspace() { - $ws = $this->get('workspace')->entity; + $ws = $this->get('workspace_pointer')->entity; return $ws; } @@ -94,7 +97,7 @@ class WorkspacePointer extends ContentEntityBase implements WorkspacePointerInte * {@inheritdoc} */ public function getWorkspaceId() { - return $this->get('workspace')->target_id; + return $this->get('workspace_point')->target_id; } /** @@ -109,6 +112,11 @@ class WorkspacePointer extends ContentEntityBase implements WorkspacePointerInte ->setLabel(t('UUID')) ->setDescription(t('The UUID of the Workspace pointer entity.')) ->setReadOnly(TRUE); + $fields['revision_id'] = BaseFieldDefinition::create('integer') + ->setLabel(t('Revision ID')) + ->setDescription(t('The revision ID of the workspace pointer entity.')) + ->setReadOnly(TRUE) + ->setSetting('unsigned', TRUE); $fields['name'] = BaseFieldDefinition::create('string') ->setLabel(t('Name')) @@ -117,22 +125,26 @@ class WorkspacePointer extends ContentEntityBase implements WorkspacePointerInte 'max_length' => 50, 'text_processing' => 0, )) + ->setRevisionable(TRUE) ->setDefaultValue('') ->setDisplayConfigurable('form', FALSE) ->setDisplayConfigurable('view', FALSE); $fields['created'] = BaseFieldDefinition::create('created') ->setLabel(t('Created')) - ->setDescription(t('The time that the entity was created.')); + ->setDescription(t('The time that the entity was created.')) + ->setRevisionable(TRUE); $fields['changed'] = BaseFieldDefinition::create('changed') ->setLabel(t('Changed')) - ->setDescription(t('The time that the entity was last edited.')); + ->setDescription(t('The time that the entity was last edited.')) + ->setRevisionable(TRUE); - $fields['workspace'] = BaseFieldDefinition::create('entity_reference') + $fields['workspace_pointer'] = BaseFieldDefinition::create('entity_reference') ->setLabel(t('Workspace')) ->setDescription(t('A reference to the workspace')) - ->setSetting('target_type', 'workspace'); + ->setSetting('target_type', 'workspace') + ->setRevisionable(TRUE); return $fields; } diff --git a/src/EntityOperations.php b/src/EntityOperations.php index 158317a..6eca727 100644 --- a/src/EntityOperations.php +++ b/src/EntityOperations.php @@ -48,7 +48,7 @@ class EntityOperations { $pointer = $this->entityTypeManager->getStorage('workspace_pointer')->create(); $pointer->setWorkspace($workspace); - $pointer->setName('Pointer to ' . $workspace->label()); + $pointer->setName($workspace->label() . ' workspace'); $pointer->save(); } diff --git a/src/EntityTypeInfo.php b/src/EntityTypeInfo.php index b162163..c526eec 100644 --- a/src/EntityTypeInfo.php +++ b/src/EntityTypeInfo.php @@ -144,7 +144,7 @@ class EntityTypeInfo { * Entity type for adding base fields to. * * @return \Drupal\Core\Field\BaseFieldDefinition[] - * New fields added by moderation state. + * New fields added Workspace. */ public function entityBaseFieldInfo(EntityTypeInterface $entity_type) { if ($entity_type->id() != 'workspace') { diff --git a/src/EventSubscriber/WorkbenchModerationSubscriber.php b/src/EventSubscriber/WorkbenchModerationSubscriber.php index d641646..62b690d 100644 --- a/src/EventSubscriber/WorkbenchModerationSubscriber.php +++ b/src/EventSubscriber/WorkbenchModerationSubscriber.php @@ -98,8 +98,8 @@ class WorkbenchModerationSubscriber implements EventSubscriberInterface { */ protected function getPointerToWorkspace(WorkspaceInterface $workspace) { $pointers = $this->entityTypeManager - ->getStorage('pointer') - ->loadByProperties(['workspace' => $workspace->id()]); + ->getStorage('workspace_pointer') + ->loadByProperties(['workspace_pointer' => $workspace->id()]); $pointer = reset($pointers); return $pointer; } diff --git a/src/Plugin/RulesAction/ReplicateContent.php b/src/Plugin/RulesAction/ReplicateContent.php index 3d5f88c..347e617 100644 --- a/src/Plugin/RulesAction/ReplicateContent.php +++ b/src/Plugin/RulesAction/ReplicateContent.php @@ -124,8 +124,8 @@ class ReplicateContent extends RulesActionBase implements ContainerFactoryPlugin */ protected function getPointerToWorkspace(WorkspaceInterface $workspace) { $pointers = $this->entityTypeManager - ->getStorage('pointer') - ->loadByProperties(['workspace' => $workspace->id()]); + ->getStorage('workspace_pointer') + ->loadByProperties(['workspace_pointer' => $workspace->id()]); $pointer = reset($pointers); return $pointer; } diff --git a/src/WorkspaceListBuilder.php b/src/WorkspaceListBuilder.php index 50250d1..8b2aade 100644 --- a/src/WorkspaceListBuilder.php +++ b/src/WorkspaceListBuilder.php @@ -9,8 +9,12 @@ namespace Drupal\workspace; use Drupal\Core\Entity\EntityInterface; use Drupal\Core\Entity\EntityListBuilder; +use Drupal\Core\Entity\EntityStorageInterface; +use Drupal\Core\Entity\EntityTypeInterface; use Drupal\multiversion\Entity\WorkspaceInterface; use Drupal\multiversion\Entity\WorkspaceTypeInterface; +use Drupal\multiversion\Workspace\WorkspaceManagerInterface; +use Symfony\Component\DependencyInjection\ContainerInterface; /** * Defines a class to build a listing of workspace entities. @@ -22,6 +26,31 @@ class WorkspaceListBuilder extends EntityListBuilder { /** * {@inheritdoc} */ + public static function createInstance(ContainerInterface $container, EntityTypeInterface $entity_type) { + return new static( + $entity_type, + $container->get('entity.manager')->getStorage($entity_type->id()), + $container->get('workspace.manager') + ); + } + + /** + * Constructs a new EntityListBuilder object. + * + * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type + * The entity type definition. + * @param \Drupal\Core\Entity\EntityStorageInterface $storage + * The entity storage class. + * @param \Drupal\multiversion\Workspace\WorkspaceManagerInterface $workspace_manager + */ + public function __construct(EntityTypeInterface $entity_type, EntityStorageInterface $storage, WorkspaceManagerInterface $workspace_manager) { + parent::__construct($entity_type, $storage); + $this->workspaceManager = $workspace_manager; + } + + /** + * {@inheritdoc} + */ public function buildHeader() { $header['label'] = t('Workspace'); $header['uid'] = t('Owner'); @@ -41,8 +70,8 @@ class WorkspaceListBuilder extends EntityListBuilder { /** @var WorkspaceTypeInterface $type */ $type = $entity->get('type')->first()->entity; $row['type'] = $type ? $type->label() : ''; - $active_workspace = $entity->getActiveWorkspaceId(); - $row['status'] = $active_workspace && $active_workspace[0] == $entity->id() ? 'Active' : 'Inactive'; + $active_workspace = $this->workspaceManager->getActiveWorkspace()->id(); + $row['status'] = $active_workspace == $entity->id() ? 'Active' : 'Inactive'; return $row + parent::buildRow($entity); } @@ -56,8 +85,8 @@ class WorkspaceListBuilder extends EntityListBuilder { $operations['edit']['query']['destination'] = $entity->url('collection'); } - $active_workspace = $entity->getActiveWorkspaceId(); - if (!$active_workspace || $entity->id() != $active_workspace[0]) { + $active_workspace = $this->workspaceManager->getActiveWorkspace()->id(); + if ($entity->id() != $active_workspace) { $operations['activate'] = array( 'title' => $this->t('Set Active'), 'weight' => 20, diff --git a/workspace.info.yml b/workspace.info.yml index b50e2e4..de63ec4 100644 --- a/workspace.info.yml +++ b/workspace.info.yml @@ -5,5 +5,4 @@ core: 8.x dependencies: - options - datetime - - multiversion - - dynamic_entity_reference + - replication \ No newline at end of file diff --git a/workspace.install b/workspace.install index baf4987..622da4d 100644 --- a/workspace.install +++ b/workspace.install @@ -12,11 +12,6 @@ function workspace_install() { // Add pointers for all existing workspaces. foreach (Workspace::loadMultiple() as $workspace) { - $pointer = new Pointer( - 'workspace:' . $workspace->id(), - $workspace->label(), - ['workspace' => $workspace->id()] - ); - \Drupal::service('workspace.pointer')->add($pointer); + \Drupal::service('workspace.entity_operations')->workspaceInsert($workspace); } } \ No newline at end of file diff --git a/workspace.module b/workspace.module index f2b9a0d..b00a518 100644 --- a/workspace.module +++ b/workspace.module @@ -16,7 +16,7 @@ function workspace_entity_type_alter(array &$entity_types) { * Implements hook_entity_base_field_info(). */ function workspace_entity_base_field_info(\Drupal\Core\Entity\EntityTypeInterface $entity_type) { - \Drupal::service('workspace.entity_type_info')->entityBaseFieldInfo($entity_type); + return \Drupal::service('workspace.entity_type_info')->entityBaseFieldInfo($entity_type); } /**