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