Esempio n. 1
0
 /**
  * Delete a node, but move all its children outside first
  *
  * @param $model|NestedSet_Model    Nested set model
  * @param $tree|array
  *
  * @return $this
  */
 public function deleteNonRecursive(NestedSet_Model $nestedset, array $tree)
 {
     $db = $nestedset->getDb();
     $left = (int) $tree[$nestedset->getStructureLeft()];
     $right = (int) $tree[$nestedset->getStructureRight()];
     try {
         $db->beginTransaction();
         $delete = $db->delete($nestedset->getTableName(), "{$nestedset->getStructureId()} = {$tree[$nestedset->getStructureId()]}");
         // update other elements
         $width = 2;
         // update right for inner elements
         $db->query("\n                UPDATE {$nestedset->getTableName()}\n                   SET {$nestedset->getStructureRight()} = {$nestedset->getStructureRight()} - 1\n                 WHERE {$nestedset->getStructureLeft()} > {$left} AND {$nestedset->getStructureRight()} < {$right}\n            ");
         // update left for inner elements
         $db->query("\n                UPDATE {$nestedset->getTableName()}\n                   SET {$nestedset->getStructureLeft()} = {$nestedset->getStructureLeft()} - 1\n                 WHERE {$nestedset->getStructureLeft()} > {$left} AND {$nestedset->getStructureRight()} < {$right}\n            ");
         // update right for outer elements
         $db->query("\n                UPDATE {$nestedset->getTableName()}\n                   SET {$nestedset->getStructureRight()} = {$nestedset->getStructureRight()} - {$width}\n                 WHERE {$nestedset->getStructureRight()} > {$right}\n            ");
         // update left for outer elements
         $db->query("\n                UPDATE {$nestedset->getTableName()}\n                   SET {$nestedset->getStructureLeft()} = {$nestedset->getStructureLeft()} - {$width}\n                 WHERE {$nestedset->getStructureLeft()} > {$left} AND {$nestedset->getStructureRight()} >= {$right}\n            ");
         $db->commit();
     } catch (Exception $e) {
         $db->rollBack();
         throw $e;
     }
     return $this;
 }
Esempio n. 2
0
 /**
  * Returns if the element is root.
  *
  * @param $model|NestedSet_Model    Nested set model
  * @param $elementId|int    Element ID
  *
  * @return boolean
  */
 public function isRoot(NestedSet_Model $nestedset, $elementId)
 {
     $db = $nestedset->getDb();
     $query = "\n            SELECT 1\n              FROM {$nestedset->getTableName()}\n             WHERE {$nestedset->getStructureId()} = {$elementId}\n               AND {$nestedset->getStructureLeft()} = (\n                       SELECT MIN({$nestedset->getStructureLeft()})\n                       FROM {$nestedset->getTableName()}\n                   )\n               AND {$nestedset->getStructureRight()} = (\n                       SELECT MAX({$nestedset->getStructureRight()})\n                         FROM {$nestedset->getTableName()}\n                   )\n        ";
     $stmt = $db->query($query);
     $result = $stmt->fetchColumn();
     return (bool) $result;
 }
Esempio n. 3
0
 public function testGetAll()
 {
     $nestedset = new NestedSet_Model();
     $db = Zend_Db::factory('Pdo_Sqlite', array('dbname' => 'tests/test.db'));
     $nestedset->setDb($db);
     $nestedset->setTableName('nested');
     $nestedset->add('foo');
     $nestedset->add('bar', 1);
     $expected_result = array(array('id' => "1", 'name' => "foo", 'lft' => "1", 'rgt' => "4", 'depth' => "0"), array('id' => "2", 'name' => "bar", 'lft' => "2", 'rgt' => "3", 'depth' => "1"));
     $this->assertEquals($nestedset->getAll(2), $expected_result);
 }