Ejemplo n.º 1
0
 /**
  * display block
  *
  * @param        array       $blockinfo     a blockinfo structure
  * @return       output      the rendered bock
  */
 public function display($blockinfo)
 {
     // security check
     if (!SecurityUtil::checkPermission('ExtendedMenublock::', $blockinfo['bid'] . '::', ACCESS_READ)) {
         return;
     }
     // Break out options from our content field
     $vars = BlockUtil::varsFromContent($blockinfo['content']);
     // template to use
     if (empty($vars['template'])) {
         $vars['template'] = 'blocks_block_extmenu.tpl';
     }
     // stylesheet to use
     if (empty($vars['stylesheet'])) {
         $vars['stylesheet'] = 'extmenu.css';
     }
     // add the stylesheet to the header
     PageUtil::addVar('stylesheet', ThemeUtil::getModuleStylesheet('Blocks', $vars['stylesheet']));
     // if cache is enabled, checks for a cached output
     if ($this->view->getCaching()) {
         // set the cache id
         $this->view->setCacheId($blockinfo['bkey'] . '/bid' . $blockinfo['bid'] . '/' . UserUtil::getGidCacheString());
         // check out if the contents are cached
         if ($this->view->is_cached($vars['template'])) {
             $blockinfo['content'] = $this->view->fetch($vars['template']);
             return BlockUtil::themeBlock($blockinfo);
         }
     }
     // create default block variables
     if (!isset($vars['blocktitles'])) {
         $vars['blocktitles'] = array();
     }
     if (!isset($vars['links'])) {
         $vars['links'] = array();
     }
     if (!isset($vars['stylesheet'])) {
         $vars['stylesheet'] = '';
     }
     if (!isset($vars['menuid'])) {
         $vars['menuid'] = 0;
     }
     // get language and default to en
     $thislang = ZLanguage::getLanguageCode();
     if (!array_key_exists($thislang, $vars['links'])) {
         $thislang = 'en';
     }
     // if specific blocktitle for selected language exists, use it
     if (array_key_exists($thislang, $vars['blocktitles']) && !empty($vars['blocktitles'][$thislang])) {
         $blockinfo['title'] = $vars['blocktitles'][$thislang];
     }
     // Content
     $menuitems = array();
     if (!empty($vars['links'][$thislang])) {
         $blocked = array();
         foreach ($vars['links'][$thislang] as $linkid => $link) {
             $link['parentid'] = isset($link['parentid']) ? $link['parentid'] : null;
             $denied = !SecurityUtil::checkPermission('ExtendedMenublock::', $blockinfo['bid'] . ':' . $linkid . ':', ACCESS_READ);
             if ($denied || !is_null($link['parentid']) && in_array($link['parentid'], $blocked)) {
                 $blocked[] = $linkid;
             } elseif (!isset($link['active']) || $link['active'] != '1') {
                 $blocked[] = $linkid;
             } else {
                 // pre zk1.2 check
                 if (!isset($link['id'])) {
                     $link['id'] = $linkid;
                 }
                 $link['url'] = ModUtil::apiFunc('Blocks', 'user', 'encodebracketurl', $link['url']);
                 // check for multiple options in image
                 $this->checkImage($link);
                 $menuitems[] = $link;
             }
         }
     }
     // Modules
     if (!empty($vars['displaymodules'])) {
         $newmods = ModUtil::getUserMods();
         $mods = array();
         foreach ($newmods as $module) {
             if (!preg_match('#(?:error|blocks)#', strtolower($module['name']))) {
                 $mods[] = $module;
             }
         }
         // Separate from current content, if any
         if (count($menuitems) > 0) {
             $menuitems[] = array('name' => ' ', 'url' => '', 'title' => '', 'level' => 0, 'parentid' => null, 'image' => '');
             if (SecurityUtil::checkPermission('ExtendedMenublock::', $blockinfo['bid'] . '::', ACCESS_ADMIN)) {
                 $menuitems[] = array('name' => $this->__('--Installed modules--'), 'url' => ModUtil::url('Blocks', 'admin', 'modify', array('bid' => $blockinfo['bid'])), 'title' => '', 'level' => 0, 'parentid' => null, 'image' => '');
             }
         }
         foreach ($mods as $mod) {
             // prepare image
             if (SecurityUtil::checkPermission("{$mod['name']}::", '::', ACCESS_OVERVIEW)) {
                 $menuitems[] = array('name' => $mod['displayname'], 'url' => ModUtil::url($mod['name'], 'user', 'main'), 'title' => $mod['description'], 'level' => 0, 'parentid' => null, 'image' => '');
             }
         }
     }
     // check for any empty result set
     if (empty($menuitems)) {
         return;
     }
     $currenturi = urlencode(str_replace(System::getBaseUri() . '/', '', System::getCurrentUri()));
     // assign the items
     $this->view->assign('menuitems', $menuitems)->assign('blockinfo', $blockinfo)->assign('currenturi', $currenturi)->assign('access_edit', Securityutil::checkPermission('ExtendedMenublock::', $blockinfo['bid'] . '::', ACCESS_EDIT));
     // get the block content
     $blockinfo['content'] = $this->view->fetch($vars['template']);
     // pass the block array back to the theme for display
     return BlockUtil::themeBlock($blockinfo);
 }
Ejemplo n.º 2
0
 /**
  * display block
  *
  * @param mixed[] $blockinfo {
  *      @type string $title   the title of the block
  *      @type int    $bid     the id of the block
  *      @type string $content the seralized block content array
  *                            }
  *
  * @return string html of rendered block
  */
 public function display($blockinfo)
 {
     // Security check
     if (!Securityutil::checkPermission('Menutree:menutreeblock:', "{$blockinfo['bid']}::", ACCESS_READ)) {
         return false;
     }
     // Get variables from content block
     $vars = BlockUtil::varsFromContent($blockinfo['content']);
     // stylesheet
     if (isset($vars['menutree_stylesheet']) && file_exists($vars['menutree_stylesheet'])) {
         PageUtil::addVar('stylesheet', $vars['menutree_stylesheet']);
     }
     // template to use
     if (!isset($vars['menutree_tpl']) || empty($vars['menutree_tpl']) || !$this->view->template_exists($vars['menutree_tpl'])) {
         $vars['menutree_tpl'] = 'Block/Menutree/default.tpl';
     }
     // if cache is enabled, checks for a cached output
     if ($this->view->getCaching()) {
         // set the cache id
         $this->view->setCacheId($blockinfo['bkey'] . '/bid' . $blockinfo['bid'] . '/' . UserUtil::getGidCacheString());
         // check out if the contents are cached
         if ($this->view->is_cached($vars['menutree_tpl'])) {
             $blockinfo['content'] = $this->view->fetch($vars['menutree_tpl']);
             return BlockUtil::themeBlock($blockinfo);
         }
     }
     // set default block vars
     $vars['menutree_content'] = isset($vars['menutree_content']) ? $vars['menutree_content'] : array();
     $vars['menutree_titles'] = isset($vars['menutree_titles']) ? $vars['menutree_titles'] : array();
     $vars['menutree_stylesheet'] = isset($vars['menutree_stylesheet']) ? $vars['menutree_stylesheet'] : '';
     $vars['menutree_editlinks'] = isset($vars['menutree_editlinks']) ? $vars['menutree_editlinks'] : false;
     // set current user lang
     $lang = ZLanguage::getLanguageCode();
     $deflang = 'en';
     if (count($vars['menutree_content']) > 0 && !in_array($lang, array_keys(current($vars['menutree_content'])))) {
         $lang = $deflang;
     }
     if (!empty($vars['menutree_content'])) {
         // select current lang, check permissions for each item and exclude unactive nodes
         $newTree = array();
         $blocked = array();
         foreach ($vars['menutree_content'] as $id => $item) {
             $item = $item[$lang];
             // check the permission access to the current link
             $hasperms = Securityutil::checkPermission('Menutree:menutreeblock:', "{$blockinfo['bid']}:{$item['name']}:{$item['id']}", ACCESS_READ);
             // checks if has no access to it or the link is not active
             if (!$hasperms || in_array($item['parent'], $blocked) || $item['state'] != 1) {
                 $blocked[] = $item['id'];
             } else {
                 // dynamic components
                 if (strpos($item['href'], '{ext:') === 0) {
                     $dynamic = explode(':', substr($item['href'], 1, -1));
                     $modname = $dynamic[1];
                     $func = $dynamic[2];
                     // plugin
                     $extrainfo = isset($dynamic[3]) && !empty($dynamic[3]) ? $dynamic[3] : null;
                     if (!empty($modname) && !empty($func)) {
                         $args = array('item' => $item, 'lang' => $lang, 'bid' => $blockinfo['bid'], 'extrainfo' => $extrainfo);
                         $node = ModUtil::apiFunc($modname, 'menutree', $func, $args);
                         if (!is_array($node)) {
                             $node = array(array($lang => $item));
                         }
                     }
                 } else {
                     $node = array(array($lang => $item));
                 }
                 $newTree = array_merge($newTree, (array) $node);
             }
         }
         // bulid structured array
         $langs = array('ref' => $lang, 'list' => $lang, 'flat' => true);
         $tree = new MenutreeTree();
         $tree->setOption('langs', (array) $langs['list']);
         $tree->setOption('flat', $langs['flat']);
         $tree->setOption('parseURL', true);
         $tree->loadArrayData($newTree);
         $newTree = $tree->getData();
     } else {
         $newTree = array();
     }
     // block title
     if (!empty($vars['menutree_titles'][$lang])) {
         $blockinfo['title'] = $vars['menutree_titles'][$lang];
     }
     $this->view->assign('menutree_editlinks', $vars['menutree_editlinks'] && Securityutil::checkPermission('ZikulaBlocksModule::', "{$blockinfo['bkey']}:{$blockinfo['title']}:{$blockinfo['bid']}", ACCESS_EDIT))->assign('menutree_content', $newTree)->assign('blockinfo', $blockinfo);
     $blockinfo['content'] = $this->view->fetch($vars['menutree_tpl']);
     return BlockUtil::themeBlock($blockinfo);
 }