Beispiel #1
0
 /**
  * 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));
 }