/** * If the node is not found, we *first* want to figure out whether the node exists in other dimensions or is really non-existent * * @param $identifier * @param Context $context * @return void */ protected function addExistingNodeVariantInformationToResponse($identifier, Context $context) { $nodeVariants = $context->getNodeVariantsByIdentifier($identifier); if (count($nodeVariants) > 0) { $this->response->setHeader('X-Neos-Node-Exists-In-Other-Dimensions', TRUE); // If the node exists in another dimension, we want to know how many nodes in the rootline are also missing for the target // dimension. This is needed in the UI to tell the user if nodes will be materialized recursively upwards in the rootline. // To find the node path for the given identifier, we just use the first result. This is a safe assumption at least for // "Document" nodes (aggregate=TRUE), because they are always moved in-sync. $node = reset($nodeVariants); if ($node->getNodeType()->isAggregate()) { $pathSegments = count(explode('/', $node->getPath())); $nodes = $context->getNodesOnPath('/', $node->getPath()); // We subtract 3 because: // - /sites/ is never translated (first part of the rootline) // - the actual document is not translated either (last part of the rootline). Otherwise, we wouldn't be inside this IF-branch. // - we count the number of path segments, and the first path segment (before the / which indicates an absolute path) is always empty. $this->response->setHeader('X-Neos-Nodes-Missing-On-Rootline', $pathSegments - count($nodes) - 3); } } }