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; }
if ($folder_id || !$folder_id && $_GET['act'] == 'create') { if ($_GET['act'] == 'create') { $FUNCS->validate_nonce('create_folder'); } else { $FUNCS->validate_nonce('update_folder_' . $folder_id); } if ($_GET['act'] == 'edit') { $folder =& $PAGE->folders->find_by_id($folder_id); if (!$folder) { die('ERROR: No folder with id: ' . $folder_id); } $PAGE->is_folder_view = 1; $PAGE->folder_id = $folder_id; } else { // create a folder object $folder = new KFolder(array('id' => null, 'name' => '', 'pid' => '-1', 'template_id' => $PAGE->tpl_id), $PAGE->tpl_name, new KError()); } // get values from database into fields $folder->populate_fields(); // handle POSTed values $errors = ''; if (isset($_POST['op']) && $_POST['op'] == 'save') { $_POST['f_k_pid'] = intval($_POST['f_k_folders']); // HOOK: alter_edit_folder_posted_data $skip = $FUNCS->dispatch_event('alter_edit_folder_posted_data', array(&$folder, &$PAGE)); if (!$skip) { for ($x = 0; $x < count($folder->fields); $x++) { $f =& $folder->fields[$x]; $f->store_posted_changes($_POST['f_' . $f->name]); // get posted values into fields }
function folders($params, $node, $list = 0) { global $CTX, $FUNCS, $PAGE, $DB; $attr = $FUNCS->get_named_vars(array('masterpage' => '', 'root' => '', 'childof' => '', 'hierarchical' => '0', 'depth' => '0', 'orderby' => '', 'order' => '', 'exclude' => '', 'show_count' => '0', 'extended_info' => '0', 'prompt' => '', 'id' => '', 'name' => '', 'selected_id' => ''), $params); // HOOK: alter_folders_tag_params $FUNCS->dispatch_event('alter_folders_tag_params', array(&$attr, $params, $node, &$list)); extract($attr); $masterpage = trim($masterpage); $root = trim($root); $childof = trim($childof); $hierarchical = $hierarchical == 1 ? 1 : 0; $depth = $FUNCS->is_natural($depth) ? intval($depth) : 0; $orderby = strtolower(trim($orderby)); if (!in_array($orderby, array('name', 'title', 'id', 'count', 'weight'))) { $orderby = 'name'; } $order = strtolower($order); if ($order != 'desc' && $order != 'asc') { $order = 'asc'; } $exclude = $exclude ? array_map("trim", explode(",", $exclude)) : array(); $show_count = $show_count == 1 ? 1 : 0; $extended_info = $extended_info == 1 ? 1 : 0; if ($list) { $extended_info = 1; } $prompt = trim($prompt); if (!$prompt) { $prompt = '--Select Folder--'; } $id = trim($id); if (!$id) { $id = 'f_k_folders'; } $name = trim($name); if (!$name) { $name = $id; } $selected_id = trim($selected_id); // see if masterpage exists if ($masterpage == '') { $folders =& $PAGE->folders; if ($folders->cmp_field != $orderby || $folders->cmp_order != $order) { $folders->set_sort($orderby, $order); $folders->sort(1); } $tpl_name = $PAGE->tpl_name; } else { $rs = $DB->select(K_TBL_TEMPLATES, array('*'), "name='" . $DB->sanitize($masterpage) . "'"); //SANITIZE! if (!count($rs)) { return; } $tpl_id = $rs[0]['id']; $tpl_name = $rs[0]['name']; // get the folders $folders =& $FUNCS->get_folders_tree($tpl_id, $tpl_name, $orderby, $order); } // root takes precedence over childof if ($root != '') { $f =& $folders->find($root); if (!$f) { return; } unset($folders); $folders = new KFolder(array('id' => '-1', 'name' => '_root_', 'pid' => '-1'), $tpl_name, new KError('dummy')); $folders->set_sort($orderby, $order); $folders->add_child($f); unset($f); } elseif ($childof != '') { $f =& $folders->find($childof); if (!$f || !count($f->children)) { return; } unset($folders); $folders = new KFolder(array('id' => '-1', 'name' => '_root_', 'pid' => '-1'), $tpl_name, new KError('dummy')); $folders->set_sort($orderby, $order); for ($x = 0; $x < count($f->children); $x++) { $folders->add_child($f->children[$x]); } unset($f); } $CTX->set('k_total_folders', $folders->get_children_count($depth, $exclude)); $html = ''; if ($hierarchical) { $visitor = !$list ? '_folders_visitor' : ($list == 1 ? '_folders_visitor_list' : '_folders_visitor_dropdown'); $CTX->set('k_show_folder_count', $show_count); $CTX->set('k_show_extended_info', $extended_info); if ($selected_id && $list) { $node = $selected_id; } $folders->visit(array($this, $visitor), $html, $node, $depth, $extended_info, $exclude); $CTX->set('k_show_extended_info', $extended_info); $CTX->set('k_show_folder_count', 0); } else { $root = new KFolder(array('id' => '-1', 'name' => '_root_', 'pid' => '-1'), $tpl_name, new KError('dummy')); $folders->visit(array($this, '_folders_visitor_flat'), $root, $node, $depth, 0, $exclude); $root->set_sort($orderby, $order); $root->sort(1); foreach ($root->children as $f) { if (!$list) { $CTX->set('k_folder', 1); $CTX->set('k_element_start', 1); $f->set_in_context(); foreach ($node->children as $child) { $html .= $child->get_HTML(); } } elseif ($list == 1) { $html .= '<li class="">'; $html .= '<a href="' . K_SITE_URL . $f->get_link() . '">' . $f->title . '</a>'; if ($show_count) { $html .= ' (' . $f->count . ')'; } $html .= '</li>'; } elseif ($list == 2) { if ($selected_id) { $f_selected = $selected_id == $f->id ? ' SELECTED=1 ' : ''; } else { $f_selected = !$PAGE->is_master && $PAGE->page_folder_id == $f->id ? ' SELECTED=1 ' : ''; } $html .= '<option class="folder-' . $f->name . '" value="' . $f->id . '" ' . $f_selected . '>'; $html .= $f->title; if ($show_count) { $html .= ' (' . $f->count . ')'; } $html .= '</option>'; } } if ($list == 1) { $html = '<ul class="" >' . $html . '</ul>'; } } if ($list == 2) { $html = '<select id="' . $id . '" name="' . $name . '"><option value="-1" >' . $prompt . '</option>' . $html . '</select>'; } return $html; }