/** * 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> ' . 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; }
<?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); }