Example #1
0
/**
 * 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;
}
Example #2
0
File: hooks.php Project: n8b/VMN
/**
 * 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;
}