소스 검색

[Tree] Fixed parameters of getNodesHierarchy* methods ($config metadata is not needed anymore as a parameter)
[Tree] Fixed issue #419

comfortablynumb 12 년 전
부모
커밋
66cf2b345f

+ 2 - 4
lib/Gedmo/Tree/Document/MongoDB/Repository/AbstractTreeRepository.php

@@ -136,26 +136,24 @@ abstract class AbstractTreeRepository extends DocumentRepository implements Repo
      *
      * @param object $node - Root node
      * @param bool $direct - Obtain direct children?
-     * @param array $config - Metadata configuration
      * @param array $options - Options
      * @param boolean $includeNode - Include node in results?
      *
      * @return \Doctrine\MongoDB\Query\Builder - QueryBuilder object
      */
-    abstract public function getNodesHierarchyQueryBuilder($node = null, $direct = false, array $config = array(), array $options = array(), $includeNode = false);
+    abstract public function getNodesHierarchyQueryBuilder($node = null, $direct = false, array $options = array(), $includeNode = false);
 
     /**
      * Returns a Query configured to return an array of nodes suitable for buildTree method
      *
      * @param object $node - Root node
      * @param bool $direct - Obtain direct children?
-     * @param array $config - Metadata configuration
      * @param array $options - Options
      * @param boolean $includeNode - Include node in results?
      *
      * @return \Doctrine\MongoDB\Query\Query - Query object
      */
-    abstract public function getNodesHierarchyQuery($node = null, $direct = false, array $config = array(), array $options = array(), $includeNode = false);
+    abstract public function getNodesHierarchyQuery($node = null, $direct = false, array $options = array(), $includeNode = false);
 
     /**
      * Get list of children followed by given $node. This returns a QueryBuilder object

+ 5 - 5
lib/Gedmo/Tree/Document/MongoDB/Repository/MaterializedPathRepository.php

@@ -167,7 +167,7 @@ class MaterializedPathRepository extends AbstractTreeRepository
     /**
      * {@inheritDoc}
      */
-    public function getNodesHierarchyQueryBuilder($node = null, $direct = false, array $config = array(), array $options = array(), $includeNode = false)
+    public function getNodesHierarchyQueryBuilder($node = null, $direct = false, array $options = array(), $includeNode = false)
     {
         $sortBy = array(
             'field'     => null,
@@ -184,17 +184,17 @@ class MaterializedPathRepository extends AbstractTreeRepository
     /**
      * {@inheritDoc}
      */
-    public function getNodesHierarchyQuery($node = null, $direct = false, array $config = array(), array $options = array(), $includeNode = false)
+    public function getNodesHierarchyQuery($node = null, $direct = false, array $options = array(), $includeNode = false)
     {
-        return $this->getNodesHierarchyQueryBuilder($node, $direct, $config, $options, $includeNode)->getQuery();
+        return $this->getNodesHierarchyQueryBuilder($node, $direct, $options, $includeNode)->getQuery();
     }
 
     /**
      * {@inheritDoc}
      */
-    public function getNodesHierarchy($node = null, $direct = false, array $config = array(), array $options = array(), $includeNode = false)
+    public function getNodesHierarchy($node = null, $direct = false, array $options = array(), $includeNode = false)
     {
-        $query = $this->getNodesHierarchyQuery($node, $direct, $config, $options, $includeNode);
+        $query = $this->getNodesHierarchyQuery($node, $direct, $options, $includeNode);
         $query->setHydrate(false);
 
         return $query->toArray();

+ 2 - 4
lib/Gedmo/Tree/Entity/Repository/AbstractTreeRepository.php

@@ -176,26 +176,24 @@ abstract class AbstractTreeRepository extends EntityRepository implements Reposi
      *
      * @param object $node - Root node
      * @param bool $direct - Obtain direct children?
-     * @param array $config - Metadata configuration
      * @param array $options - Options
      * @param boolean $includeNode - Include node in results?
      *
      * @return \Doctrine\ORM\QueryBuilder - QueryBuilder object
      */
-    abstract public function getNodesHierarchyQueryBuilder($node = null, $direct = false, array $config = array(), array $options = array(), $includeNode = false);
+    abstract public function getNodesHierarchyQueryBuilder($node = null, $direct = false, array $options = array(), $includeNode = false);
 
     /**
      * Returns a Query configured to return an array of nodes suitable for buildTree method
      *
      * @param object $node - Root node
      * @param bool $direct - Obtain direct children?
-     * @param array $config - Metadata configuration
      * @param array $options - Options
      * @param boolean $includeNode - Include node in results?
      *
      * @return \Doctrine\ORM\Query - Query object
      */
-    abstract public function getNodesHierarchyQuery($node = null, $direct = false, array $config = array(), array $options = array(), $includeNode = false);
+    abstract public function getNodesHierarchyQuery($node = null, $direct = false, array $options = array(), $includeNode = false);
 
     /**
      * Get list of children followed by given $node. This returns a QueryBuilder object

+ 6 - 5
lib/Gedmo/Tree/Entity/Repository/ClosureTreeRepository.php

@@ -325,25 +325,26 @@ class ClosureTreeRepository extends AbstractTreeRepository
     /**
      * {@inheritdoc}
      */
-    public function getNodesHierarchy($node = null, $direct = false, array $config = array(), array $options = array(), $includeNode = false)
+    public function getNodesHierarchy($node = null, $direct = false, array $options = array(), $includeNode = false)
     {
-        return $this->getNodesHierarchyQuery($node, $direct, $config, $options, $includeNode)->getArrayResult();
+        return $this->getNodesHierarchyQuery($node, $direct, $options, $includeNode)->getArrayResult();
     }
 
     /**
      * {@inheritdoc}
      */
-    public function getNodesHierarchyQuery($node = null, $direct = false, array $config = array(), array $options = array(), $includeNode = false)
+    public function getNodesHierarchyQuery($node = null, $direct = false, array $options = array(), $includeNode = false)
     {
-        return $this->getNodesHierarchyQueryBuilder($node, $direct, $config, $options, $includeNode)->getQuery();
+        return $this->getNodesHierarchyQueryBuilder($node, $direct, $options, $includeNode)->getQuery();
     }
 
     /**
      * {@inheritdoc}
      */
-    public function getNodesHierarchyQueryBuilder($node = null, $direct = false, array $config = array(), array $options = array(), $includeNode = false)
+    public function getNodesHierarchyQueryBuilder($node = null, $direct = false, array $options = array(), $includeNode = false)
     {
         $meta = $this->getClassMetadata();
+        $config = $this->listener->getConfiguration($this->_em, $meta->name);
         $idField = $meta->getSingleIdentifierFieldName();
         $subQuery = '';
         $hasLevelProp = isset($config['level']) && $config['level'];

+ 5 - 5
lib/Gedmo/Tree/Entity/Repository/MaterializedPathRepository.php

@@ -149,7 +149,7 @@ class MaterializedPathRepository extends AbstractTreeRepository
     /**
      * {@inheritdoc}
      */
-    public function getNodesHierarchyQueryBuilder($node = null, $direct = false, array $config = array(), array $options = array(), $includeNode = false)
+    public function getNodesHierarchyQueryBuilder($node = null, $direct = false, array $options = array(), $includeNode = false)
     {
         $sortBy = array(
             'field'     => null,
@@ -166,17 +166,17 @@ class MaterializedPathRepository extends AbstractTreeRepository
     /**
      * {@inheritdoc}
      */
-    public function getNodesHierarchyQuery($node = null, $direct = false, array $config = array(), array $options = array(), $includeNode = false)
+    public function getNodesHierarchyQuery($node = null, $direct = false, array $options = array(), $includeNode = false)
     {
-        return $this->getNodesHierarchyQueryBuilder($node, $direct, $config, $options, $includeNode)->getQuery();
+        return $this->getNodesHierarchyQueryBuilder($node, $direct, $options, $includeNode)->getQuery();
     }
 
     /**
      * {@inheritdoc}
      */
-    public function getNodesHierarchy($node = null, $direct = false, array $config = array(), array $options = array(), $includeNode = false)
+    public function getNodesHierarchy($node = null, $direct = false, array $options = array(), $includeNode = false)
     {
-        return $this->getNodesHierarchyQuery($node, $direct, $config, $options, $includeNode)->getArrayResult();
+        return $this->getNodesHierarchyQuery($node, $direct, $options, $includeNode)->getArrayResult();
     }
 
     /**

+ 8 - 5
lib/Gedmo/Tree/Entity/Repository/NestedTreeRepository.php

@@ -789,8 +789,11 @@ class NestedTreeRepository extends AbstractTreeRepository
     /**
      * {@inheritDoc}
      */
-    public function getNodesHierarchyQueryBuilder($node = null, $direct = false, array $config = array(), array $options = array(), $includeNode = false)
+    public function getNodesHierarchyQueryBuilder($node = null, $direct = false, array $options = array(), $includeNode = false)
     {
+        $meta = $this->getClassMetadata();
+        $config = $this->listener->getConfiguration($this->_em, $meta->name);
+
         return $this->childrenQueryBuilder(
             $node,
             $direct,
@@ -803,17 +806,17 @@ class NestedTreeRepository extends AbstractTreeRepository
     /**
      * {@inheritDoc}
      */
-    public function getNodesHierarchyQuery($node = null, $direct = false, array $config = array(), array $options = array(), $includeNode = false)
+    public function getNodesHierarchyQuery($node = null, $direct = false, array $options = array(), $includeNode = false)
     {
-        return $this->getNodesHierarchyQueryBuilder($node, $direct, $config, $options)->getQuery();
+        return $this->getNodesHierarchyQueryBuilder($node, $direct, $options, $includeNode)->getQuery();
     }
 
     /**
      * {@inheritdoc}
      */
-    public function getNodesHierarchy($node = null, $direct = false, array $config = array(), array $options = array(), $includeNode = false)
+    public function getNodesHierarchy($node = null, $direct = false, array $options = array(), $includeNode = false)
     {
-        return $this->getNodesHierarchyQuery($node, $direct, $config, $options)->getArrayResult();
+        return $this->getNodesHierarchyQuery($node, $direct, $options, $includeNode)->getArrayResult();
     }
 
     /**

+ 1 - 2
lib/Gedmo/Tree/RepositoryInterface.php

@@ -26,13 +26,12 @@ interface RepositoryInterface extends RepositoryUtilsInterface
      *
      * @param object $node - Root node
      * @param bool $direct - Obtain direct children?
-     * @param array $config - Metadata configuration
      * @param array $options - Options
      * @param boolean $includeNode - Include node in results?
      *
      * @return array - Array of nodes
      */
-    public function getNodesHierarchy($node = null, $direct = false, array $config = array(), array $options = array(), $includeNode = false);
+    public function getNodesHierarchy($node = null, $direct = false, array $options = array(), $includeNode = false);
 
     /**
      * Get list of children followed by given $node

+ 1 - 2
lib/Gedmo/Tree/RepositoryUtils.php

@@ -39,7 +39,6 @@ class RepositoryUtils implements RepositoryUtilsInterface
     public function childrenHierarchy($node = null, $direct = false, array $options = array(), $includeNode = false)
     {
         $meta = $this->getClassMetadata();
-        $config = $this->listener->getConfiguration($this->om, $meta->name);
 
         if ($node !== null) {
             if ($node instanceof $meta->name) {
@@ -56,7 +55,7 @@ class RepositoryUtils implements RepositoryUtilsInterface
         }
 
         // Gets the array of $node results. It must be ordered by depth
-        $nodes = $this->repo->getNodesHierarchy($node, $direct, $config, $options, $includeNode);
+        $nodes = $this->repo->getNodesHierarchy($node, $direct, $options, $includeNode);
 
         return $this->buildTree($nodes, $options);
     }

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

@@ -72,6 +72,54 @@ class NestedTreeRootRepositoryTest extends BaseTestCaseORM
         $result = $repo->childrenHierarchy($vegies);
         $this->assertCount(2, $result);
         $this->assertCount(0, $result[0]['__children']);
+
+        // Complete Tree
+        $roots = $repo->getRootNodes();
+        $tree = $repo->childrenHierarchy();
+
+        $this->assertEquals(2, count($tree));     // Count roots
+        $this->assertEquals('Food', $tree[0]['title']);
+        $this->assertEquals('Sports', $tree[1]['title']);
+        $this->assertEquals('Fruits', $tree[0]['__children'][0]['title']);
+        $this->assertEquals('Vegitables', $tree[0]['__children'][1]['title']);
+        $this->assertEquals('Carrots', $tree[0]['__children'][1]['__children'][0]['title']);
+        $this->assertEquals('Potatoes', $tree[0]['__children'][1]['__children'][1]['title']);
+
+        // Tree of one specific root, without the root node
+        $roots = $repo->getRootNodes();
+        $tree = $repo->childrenHierarchy($roots[0]);
+
+        $this->assertEquals(2, count($tree));     // Count roots
+        $this->assertEquals('Fruits', $tree[0]['title']);
+        $this->assertEquals('Vegitables', $tree[1]['title']);
+        $this->assertEquals('Carrots', $tree[1]['__children'][0]['title']);
+        $this->assertEquals('Potatoes', $tree[1]['__children'][1]['title']);
+
+        // Tree of one specific root, with the root node
+        $tree = $repo->childrenHierarchy($roots[0], false, array(), true);
+
+        $this->assertEquals(1, count($tree));     // Count roots
+        $this->assertEquals('Food', $tree[0]['title']);
+        $this->assertEquals('Fruits', $tree[0]['__children'][0]['title']);
+        $this->assertEquals('Vegitables', $tree[0]['__children'][1]['title']);
+        $this->assertEquals('Carrots', $tree[0]['__children'][1]['__children'][0]['title']);
+        $this->assertEquals('Potatoes', $tree[0]['__children'][1]['__children'][1]['title']);
+
+        // Tree of one specific root only with direct children, without the root node
+        $roots = $repo->getRootNodes();
+        $tree = $repo->childrenHierarchy($roots[0], true);
+
+        $this->assertEquals(2, count($tree));
+        $this->assertEquals('Fruits', $tree[0]['title']);
+        $this->assertEquals('Vegitables', $tree[1]['title']);
+
+        // Tree of one specific root only with direct children, with the root node
+        $tree = $repo->childrenHierarchy($roots[0], true, array(), true);
+
+        $this->assertEquals(1, count($tree));
+        $this->assertEquals('Food', $tree[0]['title']);
+        $this->assertEquals('Fruits', $tree[0]['__children'][0]['title']);
+        $this->assertEquals('Vegitables', $tree[0]['__children'][1]['title']);
     }
 
     /**