Пример #1
0
    /**
     * display block
     */
    public function display($blockinfo)
    {
        // Security check
        if (!SecurityUtil::checkPermission('Admin:adminnavblock', "$blockinfo[title]::$blockinfo[bid]", ACCESS_ADMIN)) {
            return;
        }

        // Get variables from content block
        $vars = BlockUtil::varsFromContent($blockinfo['content']);

        // Call the modules API to get the items
        if (!ModUtil::available('Admin')) {
            return;
        }

        $items = ModUtil::apiFunc('Admin', 'admin', 'getall');

        // Check for no items returned
        if (empty($items)) {
            return;
        }

        // get admin capable modules
        $adminmodules = ModUtil::getAdminMods();
        $adminmodulescount = count($adminmodules);

        // Display each item, permissions permitting
        $admincategories = array();
        foreach ($items as $item) {
            if (SecurityUtil::checkPermission('Admin::', "$item[name]::$item[cid]", ACCESS_READ)) {
                $adminlinks = array();
                foreach ($adminmodules as $adminmodule) {
                    // Get all modules in the category
                    $catid = ModUtil::apiFunc('Admin', 'admin', 'getmodcategory',
                                              array('mid' => ModUtil::getIdFromName($adminmodule['name'])));

                    if (($catid == $item['cid']) || (($catid == false) && ($item['cid'] == $this->getVar('defaultcategory')))) {
                        $modinfo = ModUtil::getInfoFromName($adminmodule['name']);
                        $menutexturl = ModUtil::url($modinfo['name'], 'admin');
                        $menutexttitle = $modinfo['displayname'];
                        $adminlinks[] = array('menutexturl' => $menutexturl,
                                              'menutexttitle' => $menutexttitle);
                    }
                }
                $admincategories[] = array('url' => ModUtil::url('Admin', 'admin', 'adminpanel', array('cid' => $item['cid'])),
                                           'title' => DataUtil::formatForDisplay($item['name']),
                                           'modules' => $adminlinks);
            }
        }

        $this->view->assign('admincategories', $admincategories);

        // Populate block info and pass to theme
        $blockinfo['content'] = $this->view->fetch('admin_block_adminnav.tpl');

        return BlockUtil::themeBlock($blockinfo);
    }
Пример #2
0
    /**
     * Main category menu.
     *
     * @return string HTML string
     */
    public function categorymenu($args)
    {
        // get the current category
        $acid = FormUtil::getPassedValue('acid', isset($args['acid']) ? $args['acid'] : $this->getVar('startcategory'), 'GET');

        // Get all categories
        $categories = array();
        $items = ModUtil::apiFunc('Admin', 'admin', 'getall');
        foreach ($items as $item) {
            if (SecurityUtil::checkPermission('Admin::', "$item[name]::$item[cid]", ACCESS_READ)) {
                $categories[] = $item;
            }
        }

        // get admin capable modules
        $adminmodules = ModUtil::getAdminMods();
        $adminlinks = array();

        foreach ($adminmodules as $adminmodule) {
            if (SecurityUtil::checkPermission("$adminmodule[name]::", '::', ACCESS_EDIT)) {
                $catid = ModUtil::apiFunc('Admin', 'admin', 'getmodcategory', array('mid' => $adminmodule['id']));
                $order = ModUtil::apiFunc('Admin', 'admin', 'getSortOrder',
                                          array('mid' => ModUtil::getIdFromName($adminmodule['name'])));
                $menutexturl = ModUtil::url($adminmodule['name'], 'admin', 'main');
                $menutext = $adminmodule['displayname'];
                $menutexttitle = $adminmodule['description'];
                $adminlinks[$catid][] = array('menutexturl' => $menutexturl,
                        'menutext' => $menutext,
                        'menutexttitle' => $menutexttitle,
                        'modname' => $adminmodule['name'],
                        'order' => $order,
                        'id' => $adminmodule['id']
                );
            }
        }

        foreach ($adminlinks as &$item) {
            usort($item, '_sortAdminModsByOrder');
        }

        $menuoptions = array();
        $possible_cids = array();
        $permission = false;

        if (isset($categories) && is_array($categories)) {
            foreach ($categories as $category) {
                // only categories containing modules where the current user has permissions will
                // be shown, all others will be hidden
                // admin will see all categories
                if ( (isset($adminlinks[$category['cid']]) && count($adminlinks[$category['cid']]) )
                        || SecurityUtil::checkPermission('.*', '.*', ACCESS_ADMIN) ) {
                    $menuoption = array('url'         => ModUtil::url('Admin','admin','adminpanel', array('acid' => $category['cid'])),
                            'title'       => $category['name'],
                            'description' => $category['description'],
                            'cid'         => $category['cid']);
                    if (isset($adminlinks[$category['cid']])) {
                        $menuoption['items'] = $adminlinks[$category['cid']];
                    } else {
                        $menuoption['items'] = array();
                    }
                    $menuoptions[$category['cid']] = $menuoption;
                    $possible_cids[] = $category['cid'];

                    if ($acid == $category['cid']) {
                        $permission =true;
                    }
                }
            }
        }

        // if permission is false we are not allowed to see this category because its
        // empty and we are not admin
        if ($permission==false) {
            // show the first category
            $acid = !empty($possible_cids) ? (int)$possible_cids[0] : null;
        }

        $this->view->assign('currentcat', $acid);
        $this->view->assign('menuoptions', $menuoptions);

        // security analyzer and update checker warnings
        $notices = array();
        $notices['security'] = $this->_securityanalyzer();
        $notices['update'] = $this->_updatecheck();
        $notices['developer'] = $this->_developernotices();
        $this->view->assign('notices', $notices);

        return $this->view->fetch('admin_admin_categorymenu.tpl');
    }
Пример #3
0
/**
 * The pnModGetAdminMods function gets a list of administration modules.
 *
 * @deprecated
 * @see ModUtil::getAdminMods()
 *
 * @return array An array of module information arrays.
 */
function pnModGetAdminMods()
{
    LogUtil::log(__f('Warning! Function %1$s is deprecated. Please use %2$s instead.', array(__FUNCTION__, 'ModUtil::getAdminMods()')), E_USER_DEPRECATED);
    return ModUtil::getAdminMods();
}
Пример #4
0
 /**
  * Return list of admin modules
  *
  * Syntax used in menutree
  * {ext:Blocks:adminlinks:[flat,category]}
  * Last param is optional.  It can be flat and/or category separated by a comma.
  * 'flat' will add the admin links in the current menu.  Without 'flat' the links are grouped one level down
  * 'category' additionally groups the admin links by their category.
  * You can combine 'flat' and 'category' to have the category links added in the current menu.
  *
  * @param array $args['item'] menu node to be replaced
  * @param string $args['lang'] current menu language
  * @param string $args['extrainfo'] additional params - if 'flat' then return links ungrouped. if 'category' module links grouped by category
  * @return mixed array of links if successful, false otherwise
  */
 public function adminlinks($args)
 {
     $item = isset($args['item']) && !empty($args['item']) ? $args['item'] : null;
     $lang = isset($args['lang']) && !empty($args['lang']) ? $args['lang'] : null;
     $extrainfo = isset($args['extrainfo']) && !empty($args['extrainfo']) ? $args['extrainfo'] : null;
     // $item ang lang params are required
     if (!$item || !$lang) {
         return false;
     }
     // Convert extrainfo into flags
     $extrainfo = $extrainfo ? preg_split("/[\\s]*,[\\s]*/", trim($extrainfo)) : array();
     $flag = array();
     $flag['flat'] = in_array("flat", $extrainfo);
     //now true or false
     $flag['category'] = in_array("category", $extrainfo);
     //now true or false
     // Make sure admin API is loaded
     if (!ModUtil::loadApi('Admin', 'admin', true)) {
         return false;
     }
     if (!SecurityUtil::checkPermission('Admin::', "::", ACCESS_EDIT)) {
         return array();
         // Since no permission, return empty links
     }
     // get id for first element, use api func to aviod id conflicts inside menu
     $idoffset = Blocks_MenutreeUtil::getIdOffset($item['id']);
     $lineno = 0;
     $links = array();
     // if not flat, group the links into a single menu entry
     if (!$flag['flat']) {
         $links['adminlinks'] = array($lang => array('id' => $idoffset++, 'name' => $item['name'], 'href' => ModUtil::url('Admin', 'admin', 'adminpanel'), 'title' => $item['title'], 'className' => $item['className'], 'state' => $item['state'], 'lang' => $lang, 'lineno' => $lineno++, 'parent' => $item['parent']));
     }
     // need to set parent node id - if links are grouped - use your_accont item id
     // otherwise parent id of replaced menu node
     $parentNode = !$flag['flat'] ? $links['adminlinks'][$lang]['id'] : $item['parent'];
     // First work on the Admin module categories
     $catinfo = array();
     // used to store menu information for the categories
     $catlinks = array();
     if ($flag['category']) {
         // Get all the Categories
         $categories = ModUtil::apiFunc('Admin', 'admin', 'getall');
         foreach ($categories as $item) {
             if (SecurityUtil::checkPermission('Admin::', "{$item['catname']}::{$item['cid']}", ACCESS_EDIT)) {
                 // Set up the menu information for this category
                 $catinfo[$item['cid']] = array('id' => $idoffset, 'no' => 0);
                 $catlinks[] = array($lang => array('id' => $idoffset++, 'name' => $item['catname'], 'href' => ModUtil::url('Admin', 'admin', 'adminpanel', array('acid' => $item['cid'])), 'title' => $item['description'], 'className' => '', 'state' => 1, 'lang' => $lang, 'lineno' => $lineno++, 'parent' => $parentNode));
             }
         }
     }
     // Now work on admin capable modules
     $adminmodules = ModUtil::getAdminMods();
     $displayNameType = ModUtil::getVar('Admin', 'displaynametype', 1);
     $default_cid = ModUtil::getVar('Admin', 'startcategory');
     $adminlinks = array();
     foreach ($adminmodules as $adminmodule) {
         if (SecurityUtil::checkPermission("{$adminmodule['name']}::", '::', ACCESS_EDIT)) {
             $cid = ModUtil::apiFunc('Admin', 'admin', 'getmodcategory', array('mid' => ModUtil::getIdFromName($adminmodule['name'])));
             $cid = isset($catinfo[$cid]) ? $cid : $default_cid;
             // make sure each module is assigned a category
             $modinfo = ModUtil::getInfo(ModUtil::getIdFromName($adminmodule['name']));
             if ($modinfo['type'] == 2 || $modinfo['type'] == 3) {
                 $menutexturl = ModUtil::url($modinfo['name'], 'admin');
             } else {
                 $menutexturl = 'admin.php?module=' . $modinfo['name'];
             }
             if ($displayNameType == 1) {
                 $menutext = $modinfo['displayname'];
             } elseif ($displayNameType == 2) {
                 $menutext = $modinfo['name'];
             } elseif ($displayNameType == 3) {
                 $menutext = $modinfo['displayname'] . ' (' . $modinfo['name'] . ')';
             }
             $adminlinks[] = array($lang => array('id' => $idoffset++, 'name' => $menutext, 'href' => $menutexturl, 'title' => $modinfo['description'], 'className' => '', 'state' => 1, 'lang' => $lang, 'lineno' => $flag['category'] ? $catinfo[$cid]['no']++ : $lineno++, 'parent' => $flag['category'] ? $catinfo[$cid]['id'] : $parentNode));
         }
     }
     $links = array_merge($links, $catlinks, $adminlinks);
     return $links;
 }