diff --git a/core/modules/workspace/src/EntityAccess.php b/core/modules/workspace/src/EntityAccess.php index 6bf392b242..790a29ea70 100644 --- a/core/modules/workspace/src/EntityAccess.php +++ b/core/modules/workspace/src/EntityAccess.php @@ -84,16 +84,7 @@ public function entityAccess(EntityInterface $entity, $operation, AccountInterfa if ($workspace_manager->entityCanBelongToWorkspaces($entity) && $entity->workspace->target_id != \Drupal::getContainer()->getParameter('workspace.default')) { $active_workspace = $workspace_manager->getActiveWorkspace(); - $result = \Drupal::entityTypeManager() - ->getStorage('content_workspace') - ->getQuery() - ->allRevisions() - ->condition('content_entity_type_id', $entity->getEntityTypeId()) - ->condition('content_entity_id', $entity->id()) - ->condition('content_entity_revision_id', $entity->getRevisionId()) - ->condition('workspace', $active_workspace) - ->execute(); - if (empty($result)) { + if ($entity->workspace->target_id != $active_workspace) { return AccessResult::forbidden(); } } diff --git a/core/modules/workspace/src/Replication/DefaultReplicator.php b/core/modules/workspace/src/Replication/DefaultReplicator.php index ed44738b51..77c5395906 100644 --- a/core/modules/workspace/src/Replication/DefaultReplicator.php +++ b/core/modules/workspace/src/Replication/DefaultReplicator.php @@ -111,16 +111,16 @@ public function replicate(UpstreamInterface $source, UpstreamInterface $target) // Get revision diff between source and target $content_workspace_ids = []; foreach ($rev_diffs as $entity_type_id => $revs) { - $content_workspace_ids[$entity_type_id] = $this->entityTypeManager - ->getStorage('content_workspace') + $entity_type = $this->entityTypeManager->getDefinition($entity_type_id); + $revisions[$entity_type_id] = $this->entityTypeManager + ->getStorage($entity_type_id) ->getQuery() ->allRevisions() - ->condition('content_entity_type_id', $entity_type_id) - ->condition('content_entity_revision_id', $revs, 'IN') - ->condition('workspace', $target->id()) + ->condition($entity_type->getKey('revision'), $revs, 'IN') + ->condition('workspace.target_id', $target->id()) ->execute(); } - foreach ($content_workspace_ids as $entity_type_id => $ids) { + foreach ($revisions as $entity_type_id => $ids) { foreach ($ids as $id) { $key = array_search($id, $rev_diffs[$entity_type_id]); if (isset($key)) { diff --git a/core/modules/workspace/src/WorkspaceListBuilder.php b/core/modules/workspace/src/WorkspaceListBuilder.php index d16e238b8d..db7a35c9d6 100644 --- a/core/modules/workspace/src/WorkspaceListBuilder.php +++ b/core/modules/workspace/src/WorkspaceListBuilder.php @@ -79,7 +79,7 @@ public function getDefaultOperations(EntityInterface $entity) { /** @var \Drupal\workspace\Entity\WorkspaceInterface $entity */ $operations = parent::getDefaultOperations($entity); if (isset($operations['edit'])) { - $operations['edit']['query']['destination'] = $entity->toUrl('collection'); + $operations['edit']['query']['destination'] = $entity->toUrl('collection')->toString(); } $active_workspace = $this->workspaceManager->getActiveWorkspace(); @@ -87,7 +87,7 @@ public function getDefaultOperations(EntityInterface $entity) { $operations['activate'] = [ 'title' => $this->t('Set Active'), 'weight' => 20, - 'url' => $entity->toUrl('activate-form', ['query' => ['destination' => $entity->toUrl('collection')]]), + 'url' => $entity->toUrl('activate-form', ['query' => ['destination' => $entity->toUrl('collection')->toString()]]), ]; } @@ -95,7 +95,7 @@ public function getDefaultOperations(EntityInterface $entity) { $operations['deployment'] = [ 'title' => $this->t('Deploy content'), 'weight' => 20, - 'url' => $entity->toUrl('deployment-form', ['query' => ['destination' => $entity->toUrl('collection')]]), + 'url' => $entity->toUrl('deployment-form', ['query' => ['destination' => $entity->toUrl('collection')->toString()]]), ]; } diff --git a/core/modules/workspace/src/WorkspaceManager.php b/core/modules/workspace/src/WorkspaceManager.php index ecfc336a09..d18bff774a 100644 --- a/core/modules/workspace/src/WorkspaceManager.php +++ b/core/modules/workspace/src/WorkspaceManager.php @@ -23,10 +23,7 @@ class WorkspaceManager implements WorkspaceManagerInterface { /** * @var string[] */ - protected $blacklist = [ - 'content_workspace', - 'workspace' - ]; + protected $blacklist = ['workspace']; /** * @var \Symfony\Component\HttpFoundation\RequestStack diff --git a/core/modules/workspace/src/WorkspaceManagerInterface.php b/core/modules/workspace/src/WorkspaceManagerInterface.php index 35ea690eb2..4167d814e2 100644 --- a/core/modules/workspace/src/WorkspaceManagerInterface.php +++ b/core/modules/workspace/src/WorkspaceManagerInterface.php @@ -41,7 +41,7 @@ public function addNegotiator(WorkspaceNegotiatorInterface $negotiator, $priorit * @param bool $object * Should the active workspace be returned as an object. * - * @return \Drupal\workspace\Entity\WorkspaceInterface | int + * @return int | \Drupal\workspace\Entity\WorkspaceInterface */ public function getActiveWorkspace($object = FALSE); diff --git a/core/modules/workspace/tests/src/Functional/WorkspaceTestUtilities.php b/core/modules/workspace/tests/src/Functional/WorkspaceTestUtilities.php index 1b0b2e96d2..bc1cc7cb16 100644 --- a/core/modules/workspace/tests/src/Functional/WorkspaceTestUtilities.php +++ b/core/modules/workspace/tests/src/Functional/WorkspaceTestUtilities.php @@ -71,19 +71,18 @@ protected function getOneEntityByLabel($type, $label) { protected function createWorkspaceThroughUI($label, $id) { $this->drupalGet('/admin/structure/workspace/add'); - $session = $this->getSession(); - $this->assertSession()->statusCodeEquals(200); + $session = $this->assertSession(); + $session->statusCodeEquals(200); - /** @var \Behat\Mink\Element\DocumentElement $page */ - $page = $session->getPage(); - $page->fillField('label', $label); - $page->fillField('id', $id); + $edit = [ + 'label' => $label, + 'id' => $id + ]; if ($id == 'dev') { - $page->selectFieldOption('upstream', 'workspace:stage'); + $edit['upstream'] = 'workspace:stage'; } - $page->findButton(t('Save'))->click(); - - $session->getPage()->hasContent("$label ($id)"); + $this->drupalPostForm(NULL, $edit, t('Save')); + $session->pageTextContains("$label ($id)"); return $this->getOneWorkspaceByLabel($label); }