/** * Moves this node after the given node * * @param \TYPO3\TYPO3CR\Domain\Model\NodeInterface $referenceNode * @throws \TYPO3\TYPO3CR\Exception\NodeExistsException * @throws \TYPO3\TYPO3CR\Exception\NodeException * @return void * @api */ public function moveAfter(NodeInterface $referenceNode) { if ($referenceNode === $this) { return; } if ($this->getPath() === '/') { throw new \TYPO3\TYPO3CR\Exception\NodeException('The root node cannot be moved.', 1316361483); } if ($referenceNode->getParent() !== $this->getParent() && $referenceNode->getParent()->getNode($this->getName()) !== NULL) { throw new \TYPO3\TYPO3CR\Exception\NodeExistsException('Node with path "' . $this->getName() . '" already exists.', 1292503469); } if (!$this->isNodeDataMatchingContext()) { $this->materializeNodeData(); } if ($referenceNode->getParentPath() !== $this->getParentPath()) { $parentPath = $referenceNode->getParentPath(); $this->setPath($parentPath . ($parentPath === '/' ? '' : '/') . $this->getName()); $this->nodeDataRepository->persistEntities(); } $this->nodeDataRepository->setNewIndex($this->nodeData, NodeDataRepository::POSITION_AFTER, $referenceNode); $this->context->getFirstLevelNodeCache()->flush(); $this->emitNodeUpdated($this); }
/** * Renders a request path based on the "uriPathSegment" properties of the nodes leading to the given node. * * @param NodeInterface $node The node where the generated path should lead to * @return string A relative request path * @throws Exception\MissingNodePropertyException if the given node doesn't have a "uriPathSegment" property set */ protected function getRequestPathByNode(NodeInterface $node) { if ($node->getParentPath() === SiteService::SITES_ROOT_PATH) { return ''; } $requestPathSegments = []; while ($node->getParentPath() !== SiteService::SITES_ROOT_PATH && $node instanceof NodeInterface) { if (!$node->hasProperty('uriPathSegment')) { throw new Exception\MissingNodePropertyException(sprintf('Missing "uriPathSegment" property for node "%s". Nodes can be migrated with the "flow node:repair" command.', $node->getPath()), 1415020326); } $pathSegment = $node->getProperty('uriPathSegment'); $requestPathSegments[] = $pathSegment; $node = $node->getParent(); } return implode('/', array_reverse($requestPathSegments)); }