function get_group_children_tree($root_id = null, $root_name = null, $inclusive = true) { global $database; $tree = gacl_api::_getBelow('#__core_acl_aro_groups', 'g1.group_id, g1.name, COUNT(g2.name) AS level', 'g1.name', $root_id, $root_name, $inclusive); // first pass get level limits $n = count($tree); $min = $tree[0]->level; $max = $tree[0]->level; for ($i = 0; $i < $n; $i++) { $min = min($min, $tree[$i]->level); $max = max($max, $tree[$i]->level); } $indents = array(); foreach (range($min, $max) as $i) { $indents[$i] = ' '; } // correction for first indent $indents[$min] = ''; $list = array(); for ($i = $n - 1; $i >= 0; $i--) { $shim = ''; foreach (range($min, $tree[$i]->level) as $j) { $shim .= $indents[$j]; } if (@$indents[$tree[$i]->level + 1] == '. ') { $twist = ' '; } else { $twist = "- "; } //$list[$i] = $tree[$i]->level.$shim.$twist.$tree[$i]->name; $list[$i] = mosHTML::makeOption($tree[$i]->group_id, $shim . $twist . $tree[$i]->name); if ($tree[$i]->level < @$tree[$i - 1]->level) { $indents[$tree[$i]->level + 1] = '. '; } } ksort($list); return $list; }