/** @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 string
  */
 protected function buildTreeNodes()
 {
     if ($this->treeRootNode) {
         $subTreeRootNode = $this->tree->getNodeByUid($this->treeRootNode);
         $this->tree = Tx_PtExtbase_Tree_Tree::getInstanceByRootNode($subTreeRootNode);
     }
     if (isset($this->treeMaxDepth)) {
         $this->tree->setRestrictedDepth($this->treeMaxDepth);
         $this->tree->setRespectRestrictedDepth(TRUE);
     }
     $arrayWriterVisitor = $this->objectManager->get('Tx_PtExtbase_Tree_ExtJsJsonWriterVisitor');
     $arrayWriterVisitor->registerFirstVisitCallback($this, 'alterNodeArrayOnFirstVisit');
     $arrayWriterVisitor->registerLastVisitCallBack($this, 'alterNodeArrayOnLastVisit');
     $arrayWriterVisitor->setMultipleSelect($this->getMultiple());
     $arrayWriterVisitor->setSelection($this->filterValues);
     $jsonTreeWriter = $this->objectManager->get('Tx_PtExtbase_Tree_JsonTreeWriter', array($arrayWriterVisitor), $arrayWriterVisitor);
     return $jsonTreeWriter->writeTree($this->tree);
 }
Esempio n. 3
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;
 }
 /**
  * @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. 5
0
 /** @test */
 public function deletingNodeFromTreeAddsDeletedNodesToListOfDeletedNodes()
 {
     $rootNode = new Tx_PtExtbase_Tests_Unit_Tree_NodeMock(1);
     $firstChild = new Tx_PtExtbase_Tests_Unit_Tree_NodeMock(2);
     $secondChild = new Tx_PtExtbase_Tests_Unit_Tree_NodeMock(3);
     $thirdChild = new Tx_PtExtbase_Tests_Unit_Tree_NodeMock(4);
     $fourthChild = new Tx_PtExtbase_Tests_Unit_Tree_NodeMock(5);
     $thirdChild->addChild($fourthChild);
     $firstChild->addChild($secondChild);
     $firstChild->addChild($thirdChild);
     $rootNode->addChild($firstChild);
     $tree = Tx_PtExtbase_Tree_Tree::getInstanceByRootNode($rootNode);
     $tree->deleteNode($thirdChild);
     $this->assertTrue(in_array($thirdChild, $tree->getDeletedNodes()));
     $this->assertTrue(in_array($fourthChild, $tree->getDeletedNodes()));
 }