Skip to content

Commit

Permalink
TASK: Fix hidden state evaluation
Browse files Browse the repository at this point in the history
The Neos 8.3 LinkingService contained this logic
```
$action = $node->getContext()->getWorkspace()->isPublicWorkspace() && !$node->isHidden() ? 'show' : 'preview';
```
ensuring that disabled nodes can still be previewed.
In Neos 9 a no route matched error will be thrown.

To restore the old behaviour we evaluate the hidden state
  • Loading branch information
mhsdesign committed Oct 14, 2024
1 parent 0daa55c commit 7987d41
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 12 deletions.
26 changes: 24 additions & 2 deletions Classes/Controller/BackendController.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,11 @@
* 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;
use Neos\ContentRepository\Core\SharedModel\Workspace\WorkspaceName;
use Neos\ContentRepositoryRegistry\ContentRepositoryRegistry;
use Neos\Flow\Annotations as Flow;
use Neos\Flow\Mvc\Controller\ActionController;
Expand Down Expand Up @@ -226,9 +228,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);

// we always want to redirect to the node in the base workspace.
$workspace = $contentRepository->getWorkspaceFinder()->findOneByName($nodeAddress->workspaceName);

$nodeAddressInBaseWorkspace = NodeAddress::create(
$nodeAddress->contentRepositoryId,
$workspace->baseWorkspaceName ?? WorkspaceName::forLive(),
$nodeAddress->dimensionSpacePoint,
$nodeAddress->aggregateId
);

$nodeUriBuilder = $this->nodeUriBuilderFactory->forActionRequest($this->request);

$this->redirectToUri(
$this->nodeUriBuilderFactory->forActionRequest($this->request)
->uriFor($nodeAddress)
$nodeInstance->tags->contain(SubtreeTag::disabled())
? $nodeUriBuilder->previewUriFor($nodeAddressInBaseWorkspace)
: $nodeUriBuilder->uriFor($nodeAddressInBaseWorkspace)
);
}
}
11 changes: 1 addition & 10 deletions Classes/Fusion/Helper/NodeInfoHelper.php
Original file line number Diff line number Diff line change
Expand Up @@ -356,16 +356,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->getWorkspaceFinder()->findOneByName($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);
Expand Down

0 comments on commit 7987d41

Please sign in to comment.