/** * Reorders menu item and adds an add button * * @param ElggMenuItem $item menu item * @param int $depth depth of the menu item * * @return ElggMenuItem */ function menu_builder_order_menu_item(ElggMenuItem $item, $depth) { $depth = (int) $depth; if ($children = $item->getChildren()) { // sort children $ordered_children = array(); foreach ($children as $child) { $child = menu_builder_order_menu_item($child, $depth + 1); $child_priority = $child->getPriority(); while (array_key_exists($child_priority, $ordered_children)) { $child_priority++; } $ordered_children[$child_priority] = $child; if (isset($_SESSION["menu_builder_edit_mode"]) && $depth < 5) { // add button $child_add = ElggMenuItem::factory(array("name" => 'menu_builder_add', "text" => elgg_view_icon("round-plus"), "href" => '/menu_builder/edit?parent_guid=' . $child->getName(), "class" => "menu_builder_add_link", "title" => elgg_echo("menu_builder:edit_mode:add"))); $child->addChild($child_add); } } ksort($ordered_children); $item->setChildren($ordered_children); } return $item; }
/** * Applies correct order to the menu items * * @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 */ function menu_builder_site_menu_prepare($hook, $type, $return, $params) { // select parent menu items $item = elgg_extract('selected_item', $params); while ($item && ($item = $item->getParent())) { $item->setSelected(true); } // update order $ordered = array(); if (isset($return["default"])) { foreach ($return["default"] as $menu_item) { $menu_item = menu_builder_order_menu_item($menu_item, 2); $priority = $menu_item->getPriority(); while (array_key_exists($priority, $ordered)) { $priority++; } $ordered[$priority] = $menu_item; if (isset($_SESSION["menu_builder_edit_mode"])) { // add button $item = ElggMenuItem::factory(array("name" => 'menu_builder_add', "text" => elgg_view_icon("round-plus"), "href" => '/menu_builder/edit?parent_guid=' . $menu_item->getName(), "class" => "menu_builder_add_link", "title" => elgg_echo("menu_builder:edit_mode:add"))); $menu_item->addChild($item); } } } ksort($ordered); $return["default"] = $ordered; // add edit buttons if (elgg_is_admin_logged_in()) { if (isset($_SESSION["menu_builder_edit_mode"])) { $item = ElggMenuItem::factory(array("name" => 'menu_builder_add', "text" => elgg_view_icon("round-plus"), "href" => '/menu_builder/edit', "class" => "menu_builder_add_link", "title" => elgg_echo("menu_builder:edit_mode:add"))); $return["default"][] = $item; $item = ElggMenuItem::factory(array("name" => 'menu_builder_edit_mode', "text" => elgg_view_icon("settings"), "href" => '?menu_builder_edit_mode=off', "title" => elgg_echo("menu_builder:edit_mode:off"))); $return["default"][] = $item; // add context switcher at the front of the menu $item = ElggMenuItem::factory(array("name" => 'menu_builder_switch_context', "text" => elgg_view_icon("eye"), "href" => 'javascript:menu_builder_toggle_context();', "title" => elgg_echo("menu_builder:toggle_context"))); array_unshift($return["default"], $item); } else { $item = ElggMenuItem::factory(array("name" => 'menu_builder_edit_mode', "text" => elgg_view_icon("settings"), "href" => '?menu_builder_edit_mode=on', "title" => elgg_echo("menu_builder:edit_mode:on"))); $return["default"][] = $item; } } return $return; }