diff --git a/Classes/Controller/BackendController.php b/Classes/Controller/BackendController.php index 0be2b353f2..c785ddc95b 100644 --- a/Classes/Controller/BackendController.php +++ b/Classes/Controller/BackendController.php @@ -12,6 +12,7 @@ * source code. */ +use Neos\ContentRepository\Core\Feature\SubtreeTagging\Dto\SubtreeTag; use Neos\ContentRepository\Core\Projection\ContentGraph\VisibilityConstraints; use Neos\ContentRepository\Core\SharedModel\Exception\WorkspaceDoesNotExist; use Neos\ContentRepository\Core\SharedModel\Node\NodeAddress; @@ -225,9 +226,29 @@ public function redirectToAction(string $node): void $nodeAddress = NodeAddress::fromJsonString($node); + $contentRepository = $this->contentRepositoryRegistry->get($nodeAddress->contentRepositoryId); + + $nodeInstance = $contentRepository->getContentGraph($nodeAddress->workspaceName)->getSubgraph( + $nodeAddress->dimensionSpacePoint, + VisibilityConstraints::withoutRestrictions() + )->findNodeById($nodeAddress->aggregateId); + + $workspace = $contentRepository->findWorkspaceByName($nodeAddress->workspaceName); + + // we always want to redirect to the node in the base workspace unless we are on a root workspace in which case we stay on that (currently that will not happen) + $nodeAddressInBaseWorkspace = NodeAddress::create( + $nodeAddress->contentRepositoryId, + $workspace->baseWorkspaceName ?? $nodeAddress->workspaceName, + $nodeAddress->dimensionSpacePoint, + $nodeAddress->aggregateId + ); + + $nodeUriBuilder = $this->nodeUriBuilderFactory->forActionRequest($this->request); + $this->redirectToUri( - $this->nodeUriBuilderFactory->forActionRequest($this->request) - ->uriFor($nodeAddress) + !$nodeInstance || $nodeInstance->tags->contain(SubtreeTag::disabled()) + ? $nodeUriBuilder->previewUriFor($nodeAddressInBaseWorkspace) + : $nodeUriBuilder->uriFor($nodeAddressInBaseWorkspace) ); } } diff --git a/Classes/Fusion/Helper/NodeInfoHelper.php b/Classes/Fusion/Helper/NodeInfoHelper.php index d4300d9f71..67f2d751ef 100644 --- a/Classes/Fusion/Helper/NodeInfoHelper.php +++ b/Classes/Fusion/Helper/NodeInfoHelper.php @@ -17,7 +17,6 @@ use Neos\ContentRepository\Core\Projection\ContentGraph\Node; use Neos\ContentRepository\Core\SharedModel\Node\NodeAddress; use Neos\ContentRepository\Core\SharedModel\Node\NodeAggregateClassification; -use Neos\ContentRepository\Core\SharedModel\Workspace\WorkspaceName; use Neos\ContentRepositoryRegistry\ContentRepositoryRegistry; use Neos\Eel\ProtectedContextAwareInterface; use Neos\Flow\Annotations as Flow; @@ -351,16 +350,7 @@ public function previewUri(Node $node, ActionRequest $actionRequest): string public function createRedirectToNode(Node $node, ActionRequest $actionRequest): string { - // we always want to redirect to the node in the base workspace. - $contentRepository = $this->contentRepositoryRegistry->get($node->contentRepositoryId); - $workspace = $contentRepository->findWorkspaceByName($node->workspaceName); - - $nodeAddress = NodeAddress::create( - $node->contentRepositoryId, - $workspace->baseWorkspaceName ?? WorkspaceName::forLive(), - $node->dimensionSpacePoint, - $node->aggregateId - ); + $nodeAddress = NodeAddress::fromNode($node); $uriBuilder = new UriBuilder(); $uriBuilder->setRequest($actionRequest);