/** @test */
 public function visitorCorrectlyCreatesLeftRightEnumerationOnTree()
 {
     $node1 = Tx_PtExtbase_Tests_Unit_Tree_NodeMock::createNode('1', 0, 0, 1, '1');
     $node2 = Tx_PtExtbase_Tests_Unit_Tree_NodeMock::createNode('2', 0, 0, 1, '2');
     $node3 = Tx_PtExtbase_Tests_Unit_Tree_NodeMock::createNode('3', 0, 0, 1, '3');
     $node4 = Tx_PtExtbase_Tests_Unit_Tree_NodeMock::createNode('4', 0, 0, 1, '4');
     $node5 = Tx_PtExtbase_Tests_Unit_Tree_NodeMock::createNode('5', 0, 0, 1, '5');
     $node6 = Tx_PtExtbase_Tests_Unit_Tree_NodeMock::createNode('6', 0, 0, 1, '6');
     $node1->addChild($node2);
     $node2->setParent($node1);
     $node1->addChild($node5);
     $node5->setParent($node1);
     $node2->addChild($node3);
     $node3->setParent($node2);
     $node2->addChild($node4);
     $node4->setParent($node2);
     $node5->addChild($node6);
     $node6->setParent($node5);
     $tree = Tx_PtExtbase_Tree_Tree::getInstanceByRootNode($node1);
     $visitor = new Tx_PtExtbase_Tree_NestedSetVisitor();
     $treeWalker = new Tx_PtExtbase_Tree_TreeWalker(array($visitor));
     $treeWalker->traverseTreeDfs($tree);
     $this->assertEquals($node1->getLft(), 1);
     $this->assertEquals($node1->getRgt(), 12);
     $this->assertEquals($node2->getLft(), 2);
     $this->assertEquals($node2->getRgt(), 7);
     $this->assertEquals($node3->getLft(), 3);
     $this->assertEquals($node3->getRgt(), 4);
     $this->assertEquals($node4->getLft(), 5);
     $this->assertEquals($node4->getRgt(), 6);
     $this->assertEquals($node5->getLft(), 8);
     $this->assertEquals($node5->getRgt(), 11);
     $this->assertEquals($node6->getLft(), 9);
     $this->assertEquals($node6->getRgt(), 10);
 }
 /**
  * @return Tx_PtExtbase_Tree_Tree
  */
 protected function createTestTree()
 {
     $tree = Tx_PtExtbase_Tree_Tree::getEmptyTree('root');
     $rootNode = $tree->getRoot();
     $firstNode = new Tx_PtExtbase_Tree_Node('firstNode');
     $secondNode = new Tx_PtExtbase_Tree_Node('secondNode');
     $firstChildOfSecondNode = new Tx_PtExtbase_Tree_Node('firstChildOfSecondNode');
     $secondNode->addChild($firstChildOfSecondNode);
     $rootNode->addChild($firstNode);
     $rootNode->addChild($secondNode);
     return $tree;
 }
 /**
  * Get a list of subtree Uids
  *
  * @param $nodeUid
  * @return array
  */
 protected function getSubTreeUIDs($nodeUid)
 {
     $subtreeNodeIdArray = array();
     $treeNode = $this->tree->getNodeByUid($nodeUid);
     if ($treeNode instanceof Tx_PtExtbase_Tree_Node) {
         $subTreeNodes = $treeNode->getSubNodes();
         $subtreeNodeIdArray = array();
         foreach ($subTreeNodes as $subTreeNode) {
             /** @var Tx_PtExtbase_Tree_Node $subTreeNode */
             $subtreeNodeIdArray[] = $subTreeNode->getUid();
         }
     } else {
         $subtreeNodeIdArray[] = -1;
     }
     return $subtreeNodeIdArray;
 }
 /**
  * @param integer $nodeUid
  * @return array|null
  */
 protected function buildPathFromNodeToRoot($nodeUid)
 {
     if (!array_key_exists($nodeUid, $this->nodePathCache)) {
         $node = $this->tree->getNodeByUid($nodeUid);
         $pathFromNodeToRoot = array();
         if ($node instanceof Tx_PtExtbase_Tree_Node) {
             $pathFromNodeToRoot[] = $node;
             while ($node != $this->tree->getRoot()) {
                 $node = $node->getParent();
                 $pathFromNodeToRoot[] = $node;
             }
             $this->nodePathCache[$nodeUid] = $pathFromNodeToRoot;
         } else {
             $this->nodePathCache[$nodeUid] = null;
         }
     }
     return $this->nodePathCache[$nodeUid];
 }
 /**
  * @return Tx_PtExtbase_Tree_Tree
  */
 protected function getTestTree()
 {
     $node1 = Tx_PtExtbase_Tests_Unit_Tree_NodeMock::createNode('1', 0, 0, 1, '1');
     $node2 = Tx_PtExtbase_Tests_Unit_Tree_NodeMock::createNode('2', 0, 0, 1, '2');
     $node3 = Tx_PtExtbase_Tests_Unit_Tree_NodeMock::createNode('3', 0, 0, 1, '3');
     $node4 = Tx_PtExtbase_Tests_Unit_Tree_NodeMock::createNode('4', 0, 0, 1, '4');
     $node5 = Tx_PtExtbase_Tests_Unit_Tree_NodeMock::createNode('5', 0, 0, 1, '5');
     $node6 = Tx_PtExtbase_Tests_Unit_Tree_NodeMock::createNode('6', 0, 0, 1, '6');
     $node1->addChild($node2);
     $node2->setParent($node1);
     $node1->addChild($node5);
     $node5->setParent($node1);
     $node2->addChild($node3);
     $node3->setParent($node2);
     $node2->addChild($node4);
     $node4->setParent($node2);
     $node5->addChild($node6);
     $node6->setParent($node5);
     $tree = Tx_PtExtbase_Tree_Tree::getInstanceByRootNode($node1);
     return $tree;
 }
Esempio n. 6
0
 /**
  * Builds a tree for given namespace.
  *
  * If there are no nodes for given namespace, a new, empty tree with a single root node will be returned.
  *
  * @param $namespace
  * @return Tx_PtExtbase_Tree_Tree
  * @throws Exception
  */
 public function buildTreeForNamespace($namespace)
 {
     $nodes = $this->nodeRepository->findByNamespace($namespace);
     // We have no nodes for given namespace, so we return empty tree with single root node
     if ($nodes->count() == 0) {
         return $this->getEmptyTree($namespace);
     }
     $stack = new Tx_PtExtbase_Tree_Stack();
     $prevLft = PHP_INT_MAX;
     foreach ($nodes as $node) {
         /* @var $node Tx_PtExtbase_Tree_Node */
         /* Assertion: Nodes must be given in descending left-value order. */
         if ($node->getLft() > $prevLft) {
             throw new Exception('Nodes must be given in descending left-value order', 1307861852);
         }
         $prevLft = $node->getLft();
         #echo "<br><br>Knoten: " . $node->toString();
         if ($stack->isEmpty() || $stack->top()->getRgt() > $node->getRgt()) {
             $stack->push($node);
             #echo "Pushed on stack:" . $stack->toString();
         } else {
             #echo "Adding children:";
             while (!$stack->isEmpty() && $stack->top()->getRgt() < $node->getRgt()) {
                 #echo "In while - current node " . $node->toString() . " current topStack: " . $stack->top()->toString();
                 $stack->top()->setParent($node, false);
                 $node->addChild($stack->top(), false);
                 $stack->pop();
                 #echo "After while-iteration: ". $stack->toString();
             }
             $stack->push($node);
             #echo "After pushing after while: <ul>" . $stack->toString() . "</ul>";
         }
     }
     $tree = Tx_PtExtbase_Tree_Tree::getInstanceByRootNode($stack->top());
     $tree->setRestrictedDepth($this->restrictedDepth);
     $tree->setRespectRestrictedDepth($this->respectRestrictedDepth);
     #echo "Finished tree: " . $tree->toString();
     return $tree;
 }
Esempio n. 7
0
 /** @test */
 public function setAndGetNamespaceReturnsSetNamespace()
 {
     $tree = new Tx_PtExtbase_Tree_Tree();
     $tree->setNamespace('myTestNamespace');
     $this->assertEquals('myTestNamespace', $tree->getNamespace());
 }