Esempio n. 1
0
function Menu_getChildren($parentid, $currentpage = 0, $isadmin = 0, $topParent = 0, $search_options = 0)
{
    $md5 = md5($parentid . '|' . $currentpage . '|' . $isadmin . '|' . $topParent . '|' . $search_options);
    $cache = cache_load('menus', $md5);
    if ($cache) {
        return $cache;
    }
    $pageParentFound = 0;
    $PARENTDATA = Page::getInstance($parentid);
    $PARENTDATA->initValues();
    $filter = $isadmin ? '' : '&& !(special&2)';
    // { menu order
    $order = 'ord,name';
    if (isset($PARENTDATA->vars['order_of_sub_pages'])) {
        switch ($PARENTDATA->vars['order_of_sub_pages']) {
            case 1:
                // { alphabetical
                $order = 'name';
                if ($PARENTDATA->vars['order_of_sub_pages_dir']) {
                    $order .= ' desc';
                }
                break;
                // }
            // }
            case 2:
                // { associated_date
                $order = 'associated_date';
                if ($PARENTDATA->vars['order_of_sub_pages_dir']) {
                    $order .= ' desc';
                }
                $order .= ',name';
                break;
                // }
            // }
            default:
                // { by admin order
                $order = 'ord';
                if ($PARENTDATA->vars['order_of_sub_pages_dir']) {
                    $order .= ' desc';
                }
                $order .= ',name';
                // }
        }
    }
    // }
    $rs = dbAll('select id as subid,id,name,type,(select count(id) from pages where ' . "parent=subid {$filter}) as numchildren from pages where parent='" . $parentid . "' {$filter} order by {$order}");
    $menuitems = array();
    // { optimise db retrieval of pages
    $ids = array();
    foreach ($rs as $r) {
        if (!isset(Page::$instances[$r['id']])) {
            $ids[] = $r['id'];
        }
    }
    Pages::precache($ids);
    // }
    $i = 0;
    foreach ($rs as $k => $r) {
        $PAGEDATA = Page::getInstance($r['id']);
        if (isset($PAGEDATA->banned) && $PAGEDATA->banned) {
            continue;
        }
        $c = array();
        $c[] = $parentid == $topParent ? 'menuItemTop' : 'menuItem';
        if (!$i++) {
            $c[] = 'first';
        }
        if ($r['numchildren']) {
            $c[] = 'ajaxmenu_hasChildren';
        }
        if ($r['id'] == $currentpage) {
            $c[] = 'ajaxmenu_currentPage';
            $pageParentFound = 1;
        } else {
            if ($r['numchildren'] && !$pageParentFound && Menu_containsPage($currentpage, $r['id'])) {
                $c[] = 'ajaxmenu_containsCurrentPage';
                $pageParentFound = 1;
            }
        }
        $rs[$k]['classes'] = join(' ', $c);
        $rs[$k]['link'] = $PAGEDATA->getRelativeURL();
        $rs[$k]['name'] = $PAGEDATA->name;
        $rs[$k]['parent'] = $parentid;
        $menuitems[] = $rs[$k];
    }
    cache_save('menus', $md5, $menuitems);
    return $menuitems;
}
Esempio n. 2
0
function Menu_getChildren($parentid, $currentpage = 0, $isadmin = 0, $topParent = 0)
{
    global $_languages;
    $md5 = md5($parentid . '|' . $currentpage . '|' . $isadmin . '|' . $topParent . '|' . join(',', $_languages) . '|' . @$_SESSION['language']);
    $pageParentFound = 0;
    // { first, check to see if this is a menu that should be handled by a plugin
    if (preg_match('/[a-z]/', $parentid)) {
        $bits = explode('_', $parentid);
        return $GLOBALS['PLUGINS'][$bits[0]]['triggers']['menu-subpages'](null, $bits[1]);
    }
    // }
    if ($parentid) {
        $PARENTDATA = Page::getInstance($parentid);
        $PARENTDATA->initValues();
    } else {
        $PARENTDATA = (object) array('id' => '0', 'order_of_sub_pages' => 'ord', 'order_of_sub_pages_dir' => 'asc');
    }
    $filter = $isadmin ? '' : '&& !(special&2)';
    // { override menu if a trigger causes the override
    $trigger = Core_trigger('menu-subpages', $PARENTDATA);
    if ($trigger) {
        return $trigger;
    }
    // }
    // { menu order
    $order = 'ord,name';
    if (isset($PARENTDATA->vars['order_of_sub_pages'])) {
        switch ($PARENTDATA->vars['order_of_sub_pages']) {
            case 1:
                // { alphabetical
                $order = 'name';
                if ($PARENTDATA->vars['order_of_sub_pages_dir']) {
                    $order .= ' desc';
                }
                break;
                // }
            // }
            case 2:
                // { associated_date
                $order = 'associated_date';
                if ($PARENTDATA->vars['order_of_sub_pages_dir']) {
                    $order .= ' desc';
                }
                $order .= ',name';
                break;
                // }
            // }
            default:
                // { by admin order
                $order = 'ord';
                if ($PARENTDATA->vars['order_of_sub_pages_dir']) {
                    $order .= ' desc';
                }
                $order .= ',name';
                // }
        }
    }
    // }
    $sql = 'select id as subid,id,name,alias,type,(select count(id) from pages where ' . "parent=subid {$filter}) as numchildren from pages where parent='" . $parentid . "' {$filter} order by {$order}";
    $rs = Core_cacheLoad('pages', md5($sql), -1);
    if ($rs == -1) {
        $rs = dbAll($sql);
        Core_cacheSave('pages', md5($sql), $rs);
    }
    $menuitems = array();
    $i = 0;
    foreach ($rs as $k => $r) {
        $PAGEDATA = Page::getInstance($r['id']);
        if (isset($PAGEDATA->banned) && $PAGEDATA->banned) {
            continue;
        }
        $c = array();
        $c[] = $parentid == $topParent ? 'menuItemTop' : 'menuItem';
        if (!$i++) {
            $c[] = 'first';
        }
        $c[] = 'c' . $i;
        // { see if the menu item has sub-pages according to a trigger
        $trigger = is_array(Core_trigger('menu-subpages', $PAGEDATA));
        if ($trigger) {
            $r['numchildren'] = 1;
            $rs[$k]['numchildren'] = 1;
        }
        // }
        if ($r['numchildren']) {
            $c[] = 'ajaxmenu_hasChildren dropdown';
        }
        if ($r['id'] == $currentpage) {
            $c[] = 'ajaxmenu_currentPage';
            $c[] = 'current-page';
            $pageParentFound = 1;
        } else {
            if ($r['numchildren'] && !$pageParentFound && Menu_containsPage($currentpage, $r['id'])) {
                $c[] = 'ajaxmenu_containsCurrentPage';
                $pageParentFound = 1;
            }
        }
        $rs[$k]['classes'] = join(' ', $c);
        $rs[$k]['link'] = $PAGEDATA->getRelativeURL();
        $rs[$k]['name'] = __FromJson($PAGEDATA->name);
        $rs[$k]['parent'] = $parentid;
        $menuitems[] = $rs[$k];
    }
    return $menuitems;
}