function &get_nested_pages($tpl_id, $tpl_name, $tpl_access_level, $orderbyfield = 'weightx', $order = 'asc', $force = 0) { global $DB; if (array_key_exists($tpl_id, $this->cached_nested_pages) && !$force) { $tree =& $this->cached_nested_pages[$tpl_id]; if ($tree->cmp_field != $orderbyfield || $tree->cmp_order != $order) { $tree->set_sort($orderbyfield, $order); $tree->sort(1); } } else { $tree = new KNestedPage(array('id' => '-1', 'name' => '_root_', 'pid' => '-1'), $tpl_name, new KError()); $tree->set_sort($orderbyfield, $order); $tree->crumbs = null; // will be filled, if required, by calling tags e.g. 'nested_pages'. $cols = array('p.id, p.page_title as title, p.page_name as name, p.creation_date, p.publish_date, p.access_level, p.comments_count, p.nested_parent_id as pid, p.weight, p.show_in_menu, p.menu_text, p.is_pointer, p.pointer_link, p.pointer_link_detail, p.open_external, p.masquerades, p.strict_matching, count(p2.id) as drafts_count'); $tables = K_TBL_PAGES . " p left outer join " . K_TBL_PAGES . " p2 on p.id = p2.parent_id"; $sql = 'p.template_id=' . $DB->sanitize($tpl_id); $sql .= " AND p.parent_id=0"; //skip drafts $sql .= ' group by p.id'; $rows = $DB->select($tables, $cols, $sql); $folders = array(); foreach ($rows as $r) { $r['template_id'] = $tpl_id; $r['template_name'] = $tpl_name; $r['template_access_level'] = $tpl_access_level; $f = new KNestedPage($r, $tpl_name, $tree); $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_children_count(); $this->cached_nested_pages[$tpl_id] =& $tree; } return $tree; }