Example #1
0
 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;
 }