Pārlūkot izejas kodu

[tree] fixed a bug on nested set removeFromTree function in case if node is leaf

gediminasm 14 gadi atpakaļ
vecāks
revīzija
29bcf218f3

+ 4 - 1
lib/Gedmo/Tree/Entity/Repository/NestedTreeRepository.php

@@ -504,9 +504,13 @@ class NestedTreeRepository extends AbstractTreeRepository
             $config = $this->listener->getConfiguration($this->_em, $meta->name);
             $right = $meta->getReflectionProperty($config['right'])->getValue($node);
             $left = $meta->getReflectionProperty($config['left'])->getValue($node);
+            $rootId = isset($config['root']) ? $meta->getReflectionProperty($config['root'])->getValue($node) : null;
 
             if ($right == $left + 1) {
                 $this->removeSingle($node);
+                $this->listener
+                    ->getStrategy($this->_em, $meta->name)
+                    ->shiftRL($this->_em, $config['useObjectClass'], $right, -2, $rootId);
                 return; // node was a leaf
             }
             // process updates in transaction
@@ -519,7 +523,6 @@ class NestedTreeRepository extends AbstractTreeRepository
                 }
                 $pk = $meta->getSingleIdentifierFieldName();
                 $nodeId = $meta->getReflectionProperty($pk)->getValue($node);
-                $rootId = isset($config['root']) ? $meta->getReflectionProperty($config['root'])->getValue($node) : null;
                 $shift = -1;
 
                 // in case if root node is removed, childs become roots

+ 15 - 0
tests/Gedmo/Tree/NestedTreeRootRepositoryTest.php

@@ -195,6 +195,21 @@ class NestedTreeRootRepositoryTest extends BaseTestCaseORM
         $this->assertEquals(1, $node->getParent()->getId());
     }
 
+    public function testRemoveFromTreeLeaf()
+    {
+        $this->populateMore();
+        $repo = $this->em->getRepository(self::CATEGORY);
+        $onions = $repo->findOneByTitle('Onions');
+        $id = $onions->getId();
+        $repo->removeFromTree($onions);
+
+        $this->assertTrue(is_null($repo->find($id)));
+        $this->em->clear();
+
+        $vegies = $repo->findOneByTitle('Vegitables');
+        $this->assertTrue($repo->verify());
+    }
+
     protected function getUsedEntityFixtures()
     {
         return array(