Exemplo n.º 1
0
 /**
  * Adds the menu items to the menus managed by menu_builder
  *
  * @param string  $hook   name of the hook
  * @param string  $type   type of the hook
  * @param unknown $return return value
  * @param unknown $params hook parameters
  *
  * @return array
  */
 public static function registerAllMenu($hook, $type, $return, $params)
 {
     $current_menu = $params['name'];
     $return = [];
     // need to reset as there should be no other way to add menu items
     $menu = new \ColdTrick\MenuBuilder\Menu($current_menu);
     if (!elgg_in_context('admin') && $menu->getCachedData()) {
         // don't get menu as it will be handle by the cache @see menu_builder_view_navigation_menu_default_hook
         return $return;
     }
     // fix menu name if needed
     $lang_key = 'menu:' . elgg_get_friendly_title($current_menu) . ':header:default';
     if (!elgg_language_key_exists($lang_key)) {
         add_translation(get_current_language(), [$lang_key => $current_menu]);
     }
     // add configured menu items
     $menu_items = json_decode(elgg_get_plugin_setting("menu_{$current_menu}_config", 'menu_builder'), true);
     if (is_array($menu_items)) {
         foreach ($menu_items as $menu_item) {
             $can_add_menu_item = true;
             if (elgg_in_context('menu_builder_manage')) {
                 $menu_item['menu_builder_menu_name'] = $current_menu;
             } else {
                 if (empty($menu_item['target'])) {
                     unset($menu_item['target']);
                 }
                 $access_id = $menu_item['access_id'];
                 unset($menu_item['access_id']);
                 switch ($access_id) {
                     case ACCESS_PRIVATE:
                         if (!elgg_is_admin_logged_in()) {
                             $can_add_menu_item = false;
                         }
                         break;
                     case MENU_BUILDER_ACCESS_LOGGED_OUT:
                         if (elgg_is_logged_in()) {
                             $can_add_menu_item = false;
                         }
                         break;
                     case ACCESS_LOGGED_IN:
                         if (!elgg_is_logged_in()) {
                             $can_add_menu_item = false;
                         }
                         break;
                 }
             }
             if (!$can_add_menu_item) {
                 continue;
             }
             // strip out deprecated use of [wwwroot] as menu items will be normalized by default
             $menu_item['href'] = str_replace('[wwwroot]', '', $menu_item['href']);
             // add global replacable action tokens
             if ($menu_item['is_action'] && !elgg_in_context('menu_builder_manage')) {
                 unset($menu_item['is_action']);
                 $concat = '?';
                 if (stristr($menu_item['href'], '?')) {
                     $concat = '&';
                 }
                 $menu_item['href'] .= $concat . '__elgg_ts=[__elgg_ts]&__elgg_token[__elgg_token]';
             }
             if (empty($menu_item['href'])) {
                 $menu_item['href'] = false;
             }
             $return[] = \ElggMenuItem::factory($menu_item);
         }
     }
     // add 'new menu item' menu item
     if (elgg_in_context('menu_builder_manage')) {
         $return[] = \ElggMenuItem::factory(['name' => 'menu_builder_add', 'text' => '<strong>+</strong>&nbsp;&nbsp;' . elgg_echo('menu_builder:edit_mode:add'), 'href' => 'ajax/view/menu_builder/edit_item?item_name=menu_builder_add&menu_name=' . $current_menu, 'link_class' => 'elgg-lightbox', 'menu_builder_menu_name' => $current_menu, 'priority' => time()]);
     }
     return $return;
 }
Exemplo n.º 2
0
<?php

$menu_name = elgg_extract('name', $vars);
$data = false;
if (!elgg_in_context('admin')) {
    $menu = new \ColdTrick\MenuBuilder\Menu($menu_name);
    $data = $menu->getCachedData();
}
if ($data) {
    echo $data;
} elseif ($menu_name !== 'site') {
    echo elgg_view('navigation/menu/default', $vars);
}
if (!$data) {
    // hook after view to save cache
    elgg_register_plugin_hook_handler('view', "navigation/menu/{$menu_name}", '\\ColdTrick\\MenuBuilder\\MenuHooks::viewMenu', 999);
}