Ejemplo n.º 1
0
/**
 * Recursively builds a dynamic tree menu for seleting the categories available to
 * filter search results by.
 *
 * @param array $cats     An array of category objects from the DB.
 * @param array $selected An array of currently selected category IDs.
 * @return array An array of completed HTML_TreeMenu nodes.
 */
function elis_files_make_category_select_tree_choose($cats, $selected = array()) {
    global $CFG;
    global $repo;
    static $catlist;

    if (empty($cats)) {
        return;
    }

    if (!isset($catlist)) {
        $catlist = elis_files_make_category_tree();
    }

    $icon  = 'folder.gif';
    $eicon = 'folder-expanded.gif';
    $nodes = array();

    for ($i = 0; $i < count($cats); $i++) {
        if (in_array($cats[$i]->id, $selected)) {
            $checked = ' checked';
        } else {
            $checked = '';
        }

        $text = '<input type="checkbox" name="categories[]" value="' . $cats[$i]->id . '"' . $checked .
                ' />' . $cats[$i]->title;

        if (array_key_exists($cats[$i]->id, $catlist)) {
            $expanded = true;
        } else {
            $expanded = false;
        }

        $node = new HTML_TreeNode(array(
            'text'         => $text,
            'icon'         => $icon,
            'expandedIcon' => $eicon,
            'expanded'     => $expanded
        ));

//            if ($children = $repo->category_get_children($cats[$i]->id)) {
        if ($children = ELIS_files::category_get_children($cats[$i]->id)) {
            if ($cnodes = elis_files_make_category_select_tree_choose($children, $selected)) {
                for ($j = 0; $j < count($cnodes); $j++) {
                    $node->addItem($cnodes[$j]);
                }
            }
        }

        $nodes[] = $node;
    }

    return $nodes;
}