API16

JTableUsergroup/rebuild

From Joomla! Documentation

< API16:JTableUsergroup

The "API16" namespace is an archived namespace. This page contains information for a Joomla! version which is no longer supported. It exists only as a historical reference, it will not be improved and its content may be incomplete and/or contain broken links.

Description[edit]

Method to recursively rebuild the nested set tree.



Syntax[edit]

rebuild($parent_id=0, $left=0)
Parameter Name Default Value Description
$parent_id 0 The root of the tree to rebuild.
$left 0 The left id to start with in building the tree.

Returns[edit]

boolean True on success

Defined in[edit]

libraries/joomla/database/table/usergroup.php

Importing[edit]

jimport( 'joomla.database.table.usergroup' );

Source Body[edit]

function rebuild($parent_id = 0, $left = 0)
{
        // get the database object
        $db = &$this->_db;

        // get all children of this node
        $db->setQuery(
                'SELECT id FROM '. $this->_tbl .
                ' WHERE parent_id='. (int)$parent_id .
                ' ORDER BY parent_id, title'
        );
        $children = $db->loadResultArray();

        // the right value of this node is the left value + 1
        $right = $left + 1;

        // execute this function recursively over all children
        for ($i=0,$n=count($children); $i < $n; $i++)
        {
                // $right is the current right value, which is incremented on recursion return
                $right = $this->rebuild($children[$i], $right);

                // if there is an update failure, return false to break out of the recursion
                if ($right === false) {
                        return false;
                }
        }

        // we've got the left value, and now that we've processed
        // the children of this node we also know the right value
        $db->setQuery(
                'UPDATE '. $this->_tbl .
                ' SET lft='. (int)$left .', rgt='. (int)$right .
                ' WHERE id='. (int)$parent_id
        );
        // if there is an update failure, return false to break out of the recursion
        if (!$db->query()) {
                return false;
        }

        // return the right value of this node + 1
        return $right + 1;
}



Examples[edit]

Code Examples[edit]