Example #1
0
 public function testTreeOperations()
 {
     $newNode1 = new Tree\Node('abc', 'node1', $this->_tree);
     $this->_tree->addNode($newNode1);
     $newNode2 = new Tree\Node('def', 'node2', $this->_tree);
     $this->_tree->addNode($newNode2, $newNode1);
     $newNode3 = new Tree\Node('ghi', 'node3', $this->_tree);
     $this->_tree->addNode($newNode3, $newNode1);
     $data1 = ['j', 'k', 'l'];
     $this->_tree->appendChild($data1, $newNode3);
     $newNode4 = new Tree\Node('mno', 'node4', $this->_tree);
     $this->_tree->appendChild($newNode4, $newNode3);
     $this->_tree->removeNode($newNode4);
     $this->_tree->removeNode($newNode3);
     $this->_tree->removeNode($newNode2);
     $this->_tree->removeNode($newNode1);
     $this->assertEmpty($this->_tree->getNodes()->getNodes());
 }
Example #2
0
 /**
  * @param Node $node
  * @return $this
  * @throws \Exception
  */
 public function removeNode($node)
 {
     // For reorder old node branch
     $dataReorderOld = [$this->_orderField => new \Zend_Db_Expr($this->_conn->quoteIdentifier($this->_orderField) . '-1')];
     $conditionReorderOld = $this->_conn->quoteIdentifier($this->_parentField) . '=' . $node->getData($this->_parentField) . ' AND ' . $this->_conn->quoteIdentifier($this->_orderField) . '>' . $node->getData($this->_orderField);
     $this->_conn->beginTransaction();
     try {
         $condition = $this->_conn->quoteInto("{$this->_idField}=?", $node->getId());
         $this->_conn->delete($this->_table, $condition);
         // Update old node branch
         $this->_conn->update($this->_table, $dataReorderOld, $conditionReorderOld);
         $this->_conn->commit();
     } catch (\Exception $e) {
         $this->_conn->rollBack();
         throw new \Exception('Can\'t remove tree node');
     }
     parent::removeNode($node);
     return $this;
 }