diff --git a/Neos.Neos/Classes/Controller/Frontend/NodeController.php b/Neos.Neos/Classes/Controller/Frontend/NodeController.php index 5adfeaa32a2..024a4453680 100644 --- a/Neos.Neos/Classes/Controller/Frontend/NodeController.php +++ b/Neos.Neos/Classes/Controller/Frontend/NodeController.php @@ -18,6 +18,7 @@ use Neos\ContentRepository\Core\Projection\ContentGraph\ContentGraphWithRuntimeCaches\ContentSubgraphWithRuntimeCaches; use Neos\ContentRepository\Core\Projection\ContentGraph\ContentGraphWithRuntimeCaches\InMemoryCache; use Neos\ContentRepository\Core\Projection\ContentGraph\ContentSubgraphInterface; +use Neos\ContentRepository\Core\Projection\ContentGraph\Filter\FindClosestNodeFilter; use Neos\ContentRepository\Core\Projection\ContentGraph\Filter\FindSubtreeFilter; use Neos\ContentRepository\Core\Projection\ContentGraph\Node; use Neos\ContentRepository\Core\Projection\ContentGraph\Nodes; @@ -34,7 +35,6 @@ use Neos\Flow\Session\SessionInterface; use Neos\Flow\Utility\Now; use Neos\Neos\Domain\Model\RenderingMode; -use Neos\Neos\Domain\Service\NodeSiteResolvingService; use Neos\Neos\Domain\Service\NodeTypeNameFactory; use Neos\Neos\Domain\Service\RenderingModeService; use Neos\Neos\FrontendRouting\Exception\InvalidShortcutException; @@ -103,12 +103,6 @@ class NodeController extends ActionController */ protected $view; - /** - * @Flow\Inject - * @var NodeSiteResolvingService - */ - protected $nodeSiteResolvingService; - #[Flow\Inject] protected RenderingModeService $renderingModeService; @@ -145,10 +139,7 @@ public function previewAction(string $node): void $visibilityConstraints ); - $site = $this->nodeSiteResolvingService->findSiteNodeForNodeAddress( - $nodeAddress, - $siteDetectionResult->contentRepositoryId - ); + $site = $subgraph->findClosestNode($nodeAddress->nodeAggregateId, FindClosestNodeFilter::create(nodeTypes: NodeTypeNameFactory::NAME_SITE)); if ($site === null) { throw new NodeNotFoundException("TODO: SITE NOT FOUND; should not happen (for address " . $nodeAddress); } @@ -214,10 +205,7 @@ public function showAction(string $node): void VisibilityConstraints::frontend() ); - $site = $this->nodeSiteResolvingService->findSiteNodeForNodeAddress( - $nodeAddress, - $siteDetectionResult->contentRepositoryId - ); + $site = $subgraph->findClosestNode($nodeAddress->nodeAggregateId, FindClosestNodeFilter::create(nodeTypes: NodeTypeNameFactory::NAME_SITE)); if ($site === null) { throw new NodeNotFoundException("TODO: SITE NOT FOUND; should not happen (for address " . $nodeAddress); } diff --git a/Neos.Neos/Classes/Domain/Service/NodeSiteResolvingService.php b/Neos.Neos/Classes/Domain/Service/NodeSiteResolvingService.php deleted file mode 100644 index b9314e7d6dc..00000000000 --- a/Neos.Neos/Classes/Domain/Service/NodeSiteResolvingService.php +++ /dev/null @@ -1,55 +0,0 @@ -contentRepositoryRegistry->get( - $contentRepositoryId - ); - $subgraph = $contentRepository->getContentGraph()->getSubgraph( - $nodeAddress->contentStreamId, - $nodeAddress->dimensionSpacePoint, - $nodeAddress->isInLiveWorkspace() - ? VisibilityConstraints::frontend() - : VisibilityConstraints::withoutRestrictions() - ); - - $node = $subgraph->findNodeById($nodeAddress->nodeAggregateId); - if (!$node) { - return null; - } - $siteNode = $subgraph->findClosestNode($node->nodeAggregateId, FindClosestNodeFilter::create(nodeTypes: NodeTypeNameFactory::NAME_SITE)); - - return $siteNode; - } -} diff --git a/Neos.Neos/Classes/Fusion/NodeUriImplementation.php b/Neos.Neos/Classes/Fusion/NodeUriImplementation.php index d78a4c4e7dd..e4b0f4630b7 100644 --- a/Neos.Neos/Classes/Fusion/NodeUriImplementation.php +++ b/Neos.Neos/Classes/Fusion/NodeUriImplementation.php @@ -129,11 +129,11 @@ public function evaluate() } else { return ''; } - /** @todo implement us + /* TODO implement us see https://github.com/neos/neos-development-collection/issues/4524 {@see \Neos\Neos\ViewHelpers\Uri\NodeViewHelper::resolveNodeAddressFromString} for an example implementation elseif ($node === '~') { $nodeAddress = $this->nodeAddressFactory->createFromNode($node); $nodeAddress = $nodeAddress->withNodeAggregateId( - $this->nodeSiteResolvingService->findSiteNodeForNodeAddress($nodeAddress)->getNodeAggregateId() + $siteNode->nodeAggregateId ); } elseif (is_string($node) && substr($node, 0, 7) === 'node://') { $nodeAddress = $this->nodeAddressFactory->createFromNode($node); diff --git a/Neos.Neos/Classes/ViewHelpers/Link/NodeViewHelper.php b/Neos.Neos/Classes/ViewHelpers/Link/NodeViewHelper.php index bb81fab4a05..f75ef066aa9 100644 --- a/Neos.Neos/Classes/ViewHelpers/Link/NodeViewHelper.php +++ b/Neos.Neos/Classes/ViewHelpers/Link/NodeViewHelper.php @@ -15,6 +15,7 @@ namespace Neos\Neos\ViewHelpers\Link; use Neos\ContentRepository\Core\ContentRepository; +use Neos\ContentRepository\Core\Projection\ContentGraph\Filter\FindClosestNodeFilter; use Neos\ContentRepository\Core\Projection\ContentGraph\Node; use Neos\ContentRepository\Core\SharedModel\Node\NodeAggregateId; use Neos\ContentRepository\Core\Projection\ContentGraph\NodePath; @@ -32,7 +33,6 @@ use Neos\FluidAdaptor\Core\ViewHelper\AbstractTagBasedViewHelper; use Neos\FluidAdaptor\Core\ViewHelper\Exception as ViewHelperException; use Neos\Fusion\ViewHelpers\FusionContextTrait; -use Neos\Neos\Domain\Service\NodeSiteResolvingService; use Neos\Neos\FrontendRouting\Exception\InvalidShortcutException; use Neos\Neos\FrontendRouting\Exception\NodeNotFoundException; use Neos\Neos\FrontendRouting\NodeShortcutResolver; @@ -137,12 +137,6 @@ class NodeViewHelper extends AbstractTagBasedViewHelper */ protected $tagName = 'a'; - /** - * @Flow\Inject - * @var NodeSiteResolvingService - */ - protected $nodeSiteResolvingService; - /** * @Flow\Inject * @var NodeShortcutResolver @@ -382,12 +376,7 @@ private function resolveNodeAddressFromString( VisibilityConstraints::withoutRestrictions() ); if (strncmp($path, '~', 1) === 0) { - // TODO: This can be simplified - // once https://github.com/neos/contentrepository-development-collection/issues/164 is resolved - $siteNode = $this->nodeSiteResolvingService->findSiteNodeForNodeAddress( - $documentNodeAddress, - $documentNode->subgraphIdentity->contentRepositoryId - ); + $siteNode = $subgraph->findClosestNode($documentNodeAddress->nodeAggregateId, FindClosestNodeFilter::create(nodeTypes: NodeTypeNameFactory::NAME_SITE)); if ($siteNode === null) { throw new ViewHelperException(sprintf( 'Failed to determine site node for aggregate node "%s" and subgraph "%s"', diff --git a/Neos.Neos/Classes/ViewHelpers/Uri/NodeViewHelper.php b/Neos.Neos/Classes/ViewHelpers/Uri/NodeViewHelper.php index 6cdcb6350c5..67438d4afb5 100644 --- a/Neos.Neos/Classes/ViewHelpers/Uri/NodeViewHelper.php +++ b/Neos.Neos/Classes/ViewHelpers/Uri/NodeViewHelper.php @@ -14,10 +14,11 @@ namespace Neos\Neos\ViewHelpers\Uri; -use Neos\ContentRepository\Core\Projection\ContentGraph\ContentSubgraphIdentity; +use Neos\ContentRepository\Core\Projection\ContentGraph\Filter\FindClosestNodeFilter; use Neos\ContentRepository\Core\Projection\ContentGraph\Node; use Neos\ContentRepository\Core\SharedModel\Node\NodeAggregateId; use Neos\ContentRepository\Core\Projection\ContentGraph\NodePath; +use Neos\Neos\Domain\Service\NodeTypeNameFactory; use Neos\Neos\FrontendRouting\NodeAddress; use Neos\Neos\FrontendRouting\NodeAddressFactory; use Neos\ContentRepository\Core\Projection\ContentGraph\VisibilityConstraints; @@ -31,7 +32,6 @@ use Neos\FluidAdaptor\Core\ViewHelper\AbstractViewHelper; use Neos\FluidAdaptor\Core\ViewHelper\Exception as ViewHelperException; use Neos\Fusion\ViewHelpers\FusionContextTrait; -use Neos\Neos\Domain\Service\NodeSiteResolvingService; use Neos\Neos\FrontendRouting\NodeUriBuilder; /** @@ -112,12 +112,6 @@ class NodeViewHelper extends AbstractViewHelper */ protected $contentRepositoryRegistry; - /** - * @Flow\Inject - * @var NodeSiteResolvingService - */ - protected $nodeSiteResolvingService; - /** * @Flow\Inject * @var ThrowableStorageInterface @@ -285,12 +279,7 @@ private function resolveNodeAddressFromString(string $path): ?NodeAddress VisibilityConstraints::withoutRestrictions() ); if (strncmp($path, '~', 1) === 0) { - // TODO: This can be simplified - // once https://github.com/neos/contentrepository-development-collection/issues/164 is resolved - $siteNode = $this->nodeSiteResolvingService->findSiteNodeForNodeAddress( - $documentNodeAddress, - $documentNode->subgraphIdentity->contentRepositoryId - ); + $siteNode = $subgraph->findClosestNode($documentNodeAddress->nodeAggregateId, FindClosestNodeFilter::create(nodeTypes: NodeTypeNameFactory::NAME_SITE)); if ($siteNode === null) { throw new ViewHelperException(sprintf( 'Failed to determine site node for aggregate node "%s" and subgraph "%s"',