Development

#1682: sf-nestedset-1682.patch

You must first sign up to be able to contribute.

Ticket #1682: sf-nestedset-1682.patch

File sf-nestedset-1682.patch, 3.4 kB (added by trivoallan, 7 years ago)

patch from Gordon Franke

  • lib/sfPropelActAsNestedSetBehavior.class.php

    old new  
    579579   * @param      string      $peer_method     (optional) Method used for selecting nodes 
    580580   * @return     array       Node children 
    581581   */ 
    582   public function getChildren(BaseObject $node, $peer_method = 'doSelect'
     582  public function getChildren(BaseObject $node, $peer_method = 'doSelect', Criteria $criteria = null, $con = null
    583583  { 
    584     $c = new Criteria(); 
    585     $c->addAnd(self::getColumnConstant(get_class($node), 'parent'), $node->getPrimaryKey(), Criteria::EQUAL); 
    586     $c->addAnd(self::getColumnConstant(get_class($node), 'scope'), $node->getScopeIdValue(), Criteria::EQUAL);     
    587     $c->addAscendingOrderByColumn(self::getColumnConstant(get_class($node), 'left')); 
    588      
    589     $children = call_user_func(array(get_class($node->getPeer()), $peer_method), $c); 
     584        if(is_null($criteria)) 
     585        { 
     586            $critcopy = new Criteria(); 
     587        } 
     588        else 
     589        { 
     590            $critcopy = clone $criteria; 
     591        } 
     592    $critcopy->addAnd(self::getColumnConstant(get_class($node), 'parent'), $node->getPrimaryKey(), Criteria::EQUAL); 
     593    $critcopy->addAnd(self::getColumnConstant(get_class($node), 'scope'), $node->getScopeIdValue(), Criteria::EQUAL);     
     594 
     595        if($critcopy->getOrderByColumns() == array()) 
     596        { 
     597      $critcopy->addAscendingOrderByColumn(self::getColumnConstant(get_class($node), 'left')); 
     598        } 
     599 
     600    $children = call_user_func(array(get_class($node->getPeer()), $peer_method), $critcopy, $con); 
    590601     
    591602    /* 
    592603     * Set children level depending on node's.  
     
    611622   * @param      string      $peer_method  
    612623   * @return     array       Node descendants 
    613624   */ 
    614   public function getDescendants(BaseObject $node, $peer_method = 'doSelect'
     625  public function getDescendants(BaseObject $node, $peer_method = 'doSelect', Criteria $criteria = null, $con = null
    615626  { 
    616627    $descendants = array(); 
    617628     
     
    617628     
    618629    if (!$node->isLeaf()) 
    619630    { 
    620       $c = new Criteria(); 
    621       $c->addAnd(self::getColumnConstant(get_class($node), 'left'), $node->getLeftValue(), Criteria::GREATER_THAN); 
    622       $c->addAnd(self::getColumnConstant(get_class($node), 'right'), $node->getRightValue(), Criteria::LESS_THAN); 
    623       $c->addAnd(self::getColumnConstant(get_class($node), 'scope'), $node->getScopeIdValue(), Criteria::EQUAL); 
    624       $c->addAscendingOrderByColumn(self::getColumnConstant(get_class($node), 'left')); 
     631            if(is_null($criteria)) 
     632            { 
     633                $critcopy = new Criteria(); 
     634            } 
     635            else 
     636            { 
     637                $critcopy = clone $criteria; 
     638            } 
     639      $critcopy->addAnd(self::getColumnConstant(get_class($node), 'left'), $node->getLeftValue(), Criteria::GREATER_THAN); 
     640      $critcopy->addAnd(self::getColumnConstant(get_class($node), 'right'), $node->getRightValue(), Criteria::LESS_THAN); 
     641      $critcopy->addAnd(self::getColumnConstant(get_class($node), 'scope'), $node->getScopeIdValue(), Criteria::EQUAL); 
     642 
     643            if($critcopy->getOrderByColumns() == array()) 
     644            { 
     645          $critcopy->addAscendingOrderByColumn(self::getColumnConstant(get_class($node), 'left')); 
     646            } 
    625647       
    626       $descendants = call_user_func(array(get_class($node->getPeer()), $peer_method), $c); 
     648      $descendants = call_user_func(array(get_class($node->getPeer()), $peer_method), $critcopy, $con); 
    627649    } 
    628650 
    629651    $descendants_by_parent = array();