function &get_folders_tree($tpl_id, $tpl_name, $orderbyfield = 'name', $order = 'asc') { global $DB; if (array_key_exists($tpl_id, $this->cached_folder_trees)) { $tree =& $this->cached_folder_trees[$tpl_id]; if ($tree->cmp_field != $orderbyfield || $tree->cmp_order != $order) { $tree->set_sort($orderbyfield, $order); $tree->sort(1); } } else { $tree = new KFolder(array('id' => '-1', 'name' => '_root_', 'pid' => '-1'), $tpl_name, new KError()); $tree->set_sort($orderbyfield, $order); $cols = array('cf.*, count(cp.id) as count'); $tables = K_TBL_FOLDERS . " cf left outer join " . K_TBL_PAGES . " cp on (cf.template_id = cp.template_id and cf.id = cp.page_folder_id and cp.publish_date <> '0000-00-00 00:00:00')"; $sql = 'cf.template_id=' . $DB->sanitize($tpl_id); $sql .= ' group by cf.id'; $rows = $DB->select($tables, $cols, $sql); $folders = array(); foreach ($rows as $r) { $f = new KFolder($r, $tpl_name, $tree); //$f->set_sort( $orderbyfield, $order ); $folders[$f->id] =& $f; unset($f); } foreach ($folders as $f) { $folder =& $folders[$f->id]; if (isset($folders[$f->pid])) { $folders[$f->pid]->add_child($folder); } else { $tree->add_child($folder); } } $tree->sort(1); $tree->set_count(); // consolidated count of pages within folders $tree->set_children_count(); $this->cached_folder_trees[$tpl_id] =& $tree; } return $tree; }