Ejemplo n.º 1
0
/**
* Shows a list of items for a menu
*/
function viewMenuItems($menutype, $option)
{
    global $database, $mainframe, $mosConfig_list_limit;
    $limit = $mainframe->getUserStateFromRequest("viewlistlimit", 'limit', $mosConfig_list_limit);
    $limitstart = $mainframe->getUserStateFromRequest("view{$option}limitstart{$menutype}", 'limitstart', 0);
    $levellimit = $mainframe->getUserStateFromRequest("view{$option}limit{$menutype}", 'levellimit', 10);
    $search = $mainframe->getUserStateFromRequest("search{$option}{$menutype}", 'search', '');
    $search = $database->getEscaped(trim(strtolower($search)));
    // select the records
    // note, since this is a tree we have to do the limits code-side
    if ($search) {
        $query = "SELECT m.id" . "\n FROM #__menu AS m" . "\n WHERE menutype='{$menutype}'" . "\n AND LOWER(m.name) LIKE '%" . strtolower($search) . "%'";
        $database->setQuery($query);
        $search_rows = $database->loadResultArray();
    }
    $query = "SELECT m.*, u.name AS editor, g.name AS groupname, c.publish_up, c.publish_down, com.name AS com_name" . "\n FROM #__menu AS m" . "\n LEFT JOIN #__users AS u ON u.id = m.checked_out" . "\n LEFT JOIN #__groups AS g ON g.id = m.access" . "\n LEFT JOIN #__content AS c ON c.id = m.componentid AND m.type='content_typed'" . "\n LEFT JOIN #__components AS com ON com.id = m.componentid AND m.type='components'" . "\n WHERE m.menutype='{$menutype}'" . "\n AND m.published != -2" . "\n ORDER BY parent,ordering";
    $database->setQuery($query);
    $rows = $database->loadObjectList();
    // establish the hierarchy of the menu
    $children = array();
    // first pass - collect children
    foreach ($rows as $v) {
        $pt = $v->parent;
        $list = @$children[$pt] ? $children[$pt] : array();
        array_push($list, $v);
        $children[$pt] = $list;
    }
    // second pass - get an indent list of the items
    $list = mosTreeRecurse(0, '', array(), $children, max(0, $levellimit - 1));
    // eventually only pick out the searched items.
    if ($search) {
        $list1 = array();
        foreach ($search_rows as $sid) {
            foreach ($list as $item) {
                if ($item->id == $sid) {
                    $list1[] = $item;
                }
            }
        }
        // replace full list with found items
        $list = $list1;
    }
    $total = count($list);
    require_once $GLOBALS['mosConfig_absolute_path'] . '/administrator/includes/pageNavigation.php';
    $pageNav = new mosPageNav($total, $limitstart, $limit);
    $levellist = mosHTML::integerSelectList(1, 20, 1, 'levellimit', 'size="1" onchange="document.adminForm.submit();"', $levellimit);
    // slice out elements based on limits
    $list = array_slice($list, $pageNav->limitstart, $pageNav->limit);
    $i = 0;
    foreach ($list as $mitem) {
        switch ($mitem->type) {
            case 'separator':
            case 'component_item_link':
                break;
            case 'content_item_link':
                $temp = split("&task=view&id=", $mitem->link);
                $mitem->link .= '&Itemid=' . $mainframe->getItemid($temp[1]);
                break;
            case 'url':
                if (eregi('index.php\\?', $mitem->link)) {
                    if (!eregi('Itemid=', $mitem->link)) {
                        $mitem->link .= '&Itemid=' . $mitem->id;
                    }
                }
                break;
            case 'content_typed':
            case 'content_item_link':
            default:
                $mitem->link .= '&Itemid=' . $mitem->id;
                break;
        }
        $list[$i]->link = $mitem->link;
        $i++;
    }
    $i = 0;
    foreach ($list as $row) {
        $name = RenameMenu($row->type, $row->com_name);
        $list[$i]->type = $name;
        $i++;
    }
    HTML_menusections::showMenusections($list, $pageNav, $search, $levellist, $menutype, $option);
}