]> gitweb.fluxo.info Git - lorea/elgg.git/commitdiff
page menu using the new menu system - admin menu updated
authorcash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
Wed, 29 Dec 2010 13:36:33 +0000 (13:36 +0000)
committercash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
Wed, 29 Dec 2010 13:36:33 +0000 (13:36 +0000)
git-svn-id: http://code.elgg.org/elgg/trunk@7738 36083f99-b078-4883-b0ff-0f9b5a30f544

13 files changed:
engine/classes/ElggMenuBuilder.php
engine/classes/ElggMenuItem.php
engine/lib/admin.php
engine/lib/navigation.php
engine/lib/users.php
js/lib/ui.js
views/default/admin/overview/statistics.php [moved from views/default/admin/overview.php with 100% similarity]
views/default/css/admin.php
views/default/css/elements/navigation.php
views/default/layout/elements/sidebar.php
views/default/navigation/menu/elements/group.php [new file with mode: 0644]
views/default/navigation/menu/elements/item.php
views/default/navigation/menu/page.php [new file with mode: 0644]

index 3528eaef8ea0f0ef49f34bfb1ec82569d26c6004..f51ec8c62eb6af67809944d2c7e73288f1693da7 100644 (file)
@@ -32,7 +32,7 @@ class ElggMenuBuilder {
 
                $this->selectFromContext();
 
-               $selected = $this->findSelected();
+               $this->selected = $this->findSelected();
 
                $this->setupSections();
 
index 2205ebc895fd4f0873963bce0b6c675a93e8e4f6..40df8f182e953c4754d96c49340d79dcfc99aef4 100644 (file)
@@ -21,7 +21,7 @@ class ElggMenuItem {
        /**
         * @var string The menu url
         */
-       protected $url;
+       protected $url = null;
 
        /**
         * @var array Page context array
@@ -68,7 +68,9 @@ class ElggMenuItem {
        public function __construct($name, $title, $url) {
                $this->name = $name;
                $this->title = $title;
-               $this->url = elgg_normalize_url($url);
+               if ($url) {
+                       $this->url = elgg_normalize_url($url);
+               }
        }
 
        /**
@@ -82,7 +84,7 @@ class ElggMenuItem {
         * @return ElggMenuItem or NULL on error
         */
        public static function factory($options) {
-               if (!isset($options['name']) || !isset($options['title']) || !isset($options['url'])) {
+               if (!isset($options['name']) || !isset($options['title'])) {
                        return NULL;
                }
 
@@ -323,8 +325,10 @@ class ElggMenuItem {
         * @return string
         */
        public function getLink(array $vars = array()) {
-               $vars['href'] = $this->url;
                $vars['text'] = $this->title;
+               if ($this->url) {
+                       $vars['href'] = $this->url;
+               }
 
                return elgg_view('output/url', $vars);
        }
index 106e899f97b5faf2adac8f7660e16028133c06fe..0fa3c95a5b52d94d2e8149db328dc32d6df922fe 100644 (file)
@@ -32,13 +32,14 @@ function extend_elgg_admin_page($new_admin_view, $view = 'admin/main', $priority
 }
 
 /**
- * Calculate the plugin settings submenu.
+ * Create the plugin settings submenu.
+ *
  * This is done in a separate function called from the admin
  * page handler because of performance concerns.
  *
  * @return void
  */
-function elgg_admin_add_plugin_settings_sidemenu() {
+function elgg_admin_add_plugin_settings_menu() {
        global $CONFIG;
 
        if (!$installed_plugins = get_installed_plugins()) {
@@ -46,12 +47,7 @@ function elgg_admin_add_plugin_settings_sidemenu() {
                return FALSE;
        }
 
-       $parent_item = array(
-               'text' => elgg_echo('admin:plugin_settings'),
-               'id' => 'admin:plugin_settings'
-       );
-
-       elgg_add_submenu_item($parent_item, 'admin');
+       elgg_add_admin_menu_item('plugin_settings', elgg_echo('admin:plugin_settings'));
 
        foreach ($installed_plugins as $plugin_id => $info) {
                if (!$info['active']) {
@@ -59,20 +55,14 @@ function elgg_admin_add_plugin_settings_sidemenu() {
                }
 
                if (elgg_view_exists("settings/{$plugin_id}/edit")) {
-                       $item = array(
-                               'text' => $info['manifest']['name'],
-                               'href' => "pg/admin/plugin_settings/$plugin_id",
-                               'parent_id' => 'admin:plugin_settings'
-                       );
-
-                       elgg_add_submenu_item($item, 'admin');
+                       elgg_add_admin_menu_item($plugin_id, $info['manifest']['name'], 'plugin_settings');
                }
        }
 }
 
 /**
  * Add an admin area section or child section.
- * This is a wrapper for elgg_add_admin_item(array(...), 'admin').
+ * This is a wrapper for elgg_register_menu_item().
  *
  * Used in conjuction with http://elgg.org/admin/section_id/child_section style
  * page handler.
@@ -83,27 +73,22 @@ function elgg_admin_add_plugin_settings_sidemenu() {
  *
  * @return bool
  */
-function elgg_add_admin_submenu_item($section_id, $section_title, $parent_id = NULL) {
-       global $CONFIG;
+function elgg_add_admin_menu_item($section_id, $section_title, $parent_id = NULL) {
 
        // in the admin section parents never have links
        if ($parent_id) {
                $href = "pg/admin/$parent_id/$section_id";
-       } elseif ($section_id == 'overview') {
-               $href = "pg/admin/$section_id";
-
        } else {
                $href = NULL;
        }
 
-       $item = array(
-               'text' => $section_title,
-               'href' => $href,
-               'id' => $section_id,
-               'parent_id' => $parent_id
-       );
-
-       return elgg_add_submenu_item($item, 'admin');
+       return elgg_register_menu_item('page', array(
+               'name' => $section_id,
+               'url' => $href,
+               'title' => $section_title,
+               'context' => 'admin',
+               'parent_name' => $parent_id,
+       ));
 }
 
 /**
@@ -132,34 +117,29 @@ function admin_init() {
        elgg_register_action('profile/fields/reorder', '', 'admin');
 
        // admin area overview and basic site settings
-       elgg_add_admin_submenu_item('overview', elgg_echo('admin:overview'));
+       elgg_add_admin_menu_item('overview', elgg_echo('admin:overview'));
+       elgg_add_admin_menu_item('statistics', elgg_echo('admin:statistics'), 'overview');
 
-       elgg_add_admin_submenu_item('site', elgg_echo('admin:site'));
-       elgg_add_admin_submenu_item('basic', elgg_echo('admin:site:basic'), 'site');
-       elgg_add_admin_submenu_item('advanced', elgg_echo('admin:site:advanced'), 'site');
+       // site
+       elgg_add_admin_menu_item('site', elgg_echo('admin:site'));
+       elgg_add_admin_menu_item('site_basic', elgg_echo('admin:site:basic'), 'site');
+       elgg_add_admin_menu_item('site_advanced', elgg_echo('admin:site:advanced'), 'site');
 
        // appearance
-       elgg_add_admin_submenu_item('appearance', elgg_echo('admin:appearance'));
-
-       //elgg_add_admin_submenu_item('basic', elgg_echo('admin:appearance'), 'appearance');
-       elgg_add_admin_submenu_item('menu_items', elgg_echo('admin:menu_items'), 'appearance');
+       elgg_add_admin_menu_item('appearance', elgg_echo('admin:appearance'));
+       elgg_add_admin_menu_item('menu_items', elgg_echo('admin:menu_items'), 'appearance');
+       elgg_add_admin_menu_item('profile_fields', elgg_echo('admin:profile:fields'), 'appearance');
 
        // users
-       elgg_add_admin_submenu_item('users', elgg_echo('admin:users'));
-       elgg_add_admin_submenu_item('online', elgg_echo('admin:users:online'), 'users');
-       elgg_add_admin_submenu_item('newest', elgg_echo('admin:users:newest'), 'users');
-       elgg_add_admin_submenu_item('add', elgg_echo('admin:users:add'), 'users');
+       elgg_add_admin_menu_item('users', elgg_echo('admin:users'));
+       elgg_add_admin_menu_item('users_online', elgg_echo('admin:users:online'), 'users');
+       elgg_add_admin_menu_item('users_newest', elgg_echo('admin:users:newest'), 'users');
+       elgg_add_admin_menu_item('users_add', elgg_echo('admin:users:add'), 'users');
 
        // plugins
-       elgg_add_admin_submenu_item('plugins', elgg_echo('admin:plugins'));
-       elgg_add_admin_submenu_item('simple', elgg_echo('admin:plugins:simple'), 'plugins');
-       elgg_add_admin_submenu_item('advanced', elgg_echo('admin:plugins:advanced'), 'plugins');
-
-       // handled in the admin sidemenu so we don't have to generate this on every page load.
-       //elgg_add_admin_submenu_item('plugin_settings', elgg_echo('admin:plugin_settings'));
-
-       // default profile fields admin item
-       elgg_add_admin_submenu_item('profile_fields', elgg_echo('admin:profile:fields'), 'appearance');
+       elgg_add_admin_menu_item('plugins', elgg_echo('admin:plugins'));
+       elgg_add_admin_menu_item('plugins_simple', elgg_echo('admin:plugins:simple'), 'plugins');
+       elgg_add_admin_menu_item('plugins_advanced', elgg_echo('admin:plugins:advanced'), 'plugins');
 
        register_page_handler('admin', 'admin_settings_page_handler');
 }
@@ -186,14 +166,14 @@ function admin_settings_page_handler($page) {
        global $CONFIG;
 
        admin_gatekeeper();
-       elgg_admin_add_plugin_settings_sidemenu();
+       elgg_admin_add_plugin_settings_menu();
        elgg_set_context('admin');
 
        elgg_unregister_css('screen');
 
        // default to overview
        if (!isset($page[0]) || empty($page[0])) {
-               $page = array('overview');
+               $page = array('overview', 'statistics');
        }
 
        // was going to fix this in the page_handler() function but
@@ -206,7 +186,7 @@ function admin_settings_page_handler($page) {
 
        // special page for plugin settings since we create the form for them
        if ($page[0] == 'plugin_settings' && isset($page[1])
-       && elgg_view_exists("settings/{$page[1]}/edit")) {
+               && elgg_view_exists("settings/{$page[1]}/edit")) {
 
                $view = '/admin/components/plugin_settings';
                $vars['plugin'] = $page[1];
index ed19976cda2b4f0a877980861790414840f251d9..773e6f25b207e36c199336026a0ff111a87b582c 100644 (file)
@@ -88,20 +88,6 @@ function elgg_unregister_menu_item($menu_name, $item_name) {
 function add_submenu_item($label, $link, $group = 'default', $onclick = false, $selected = NULL) {
        elgg_deprecated_notice('add_submenu_item was deprecated by elgg_add_submenu_item', 1.8);
 
-       $item = array(
-               'text' => $label,
-               'href' => $link,
-               'selected' => $selected
-       );
-
-       if (!$group) {
-               $group = 'default';
-       }
-
-       if ($onclick) {
-               $js = "onclick=\"javascript:return confirm('" . elgg_echo('deleteconfirm') . "')\"";
-               $item['vars'] = array('js' => $js);
-       }
        // submenu items were added in the page setup hook usually by checking
        // the context.  We'll pass in the current context here, which will
        // emulate that effect.
@@ -112,7 +98,35 @@ function add_submenu_item($label, $link, $group = 'default', $onclick = false, $
        if ($context == 'main') {
                $context = 'all';
        }
+
+       $item = array(
+               'name' => $label,
+               'title' => $label,
+               'url' => $link,
+               'context' => $context,
+               'section' => $group,
+       );
+
+       if ($selected) {
+               $item['selected'] = true;
+       }
+
+       if ($onclick) {
+               $js = "onclick=\"javascript:return confirm('" . elgg_echo('deleteconfirm') . "')\"";
+               $item['vars'] = array('js' => $js);
+       }
+
+       return elgg_register_menu_item('page', $item);
+/*
+       $item = array(
+               'text' => $label,
+               'href' => $link,
+               'selected' => $selected
+       );
+
        return elgg_add_submenu_item($item, $context, $group);
+ * 
+ */
 }
 
 /**
index 6fe400f62455b1741a55b3b6cbc6609b2adfafd4..25b269873252710c463918a006b3d93555b0e4b5 100644 (file)
@@ -1299,13 +1299,20 @@ function request_user_validation($user_guid) {
  * @return void
  */
 function collections_submenu_items() {
-       global $CONFIG;
+
        $user = get_loggedin_user();
 
-       add_submenu_item(elgg_echo('friends:collections'),
-               $CONFIG->wwwroot . "pg/collections/" . $user->username);
+       elgg_register_menu_item('page', array(
+               'name' => 'friends:collections',
+               'title' => elgg_echo('friends:collections'),
+               'url' => "pg/collections/$user->username",
+       ));
 
-       add_submenu_item(elgg_echo('friends:collections:add'), $CONFIG->wwwroot . "pg/collections/add");
+       elgg_register_menu_item('page', array(
+               'name' => 'friends:collections',
+               'title' => elgg_echo('friends:collections:add'),
+               'url' => "pg/collections/add",
+       ));
 }
 
 /**
index c7eda593c940fcbc9d3a334546be807eb90f9cfc..02d49794d808dd4ec3df37c112836540edd48a12 100644 (file)
@@ -7,6 +7,9 @@ elgg.ui.init = function () {
        });\r
 \r
        $('.elgg-toggle').live('click', elgg.ui.toggle);\r
+\r
+       $('.elgg-menu-parent').live('click', elgg.ui.menuToggle);\r
+\r
        \r
        $('a.collapsibleboxlink').click(elgg.ui.toggleCollapsibleBox);\r
 \r
@@ -39,9 +42,21 @@ elgg.ui.toggle = function(event) {
        event.preventDefault();\r
 }\r
 \r
+/**\r
+ * Toggles a child menu when the parent is clicked\r
+ *\r
+ * @param {Object} event\r
+ * @return void\r
+ */\r
+elgg.ui.menuToggle = function(event) {\r
+       $(this).siblings().slideToggle('medium');\r
+       $(this).toggleClass('elgg-menu-closed elgg-menu-opened');\r
+       event.preventDefault();\r
+}\r
+\r
 // reusable generic hidden panel\r
 elgg.ui.toggleCollapsibleBox = function () {\r
-       $(this.parentNode.parentNode).children(".collapsible_box").slideToggle("fast");\r
+       //$(this.parentNode.parentNode).children(".collapsible_box").slideToggle("fast");\r
        return false;\r
 };\r
 \r
index c73bbfe423d0e0191c4f81e4a2e07e4aa37f0792..ce31a0036a024653d90ed8b53450ee2a12616b25 100644 (file)
@@ -106,48 +106,27 @@ table.mceLayout {
 .elgg-admin h6 {
        color:#666666;
 }
-.elgg-admin .elgg-sidebar .submenu {
-       margin:0;
-       padding:0;
-       list-style: none;
-       background-color: transparent;
-       background-image: none;
-       -webkit-box-shadow: none;
-       -moz-box-shadow: none;
-       -webkit-border-radius: 0;
-       -moz-border-radius: 0;
-}
-.elgg-admin .submenu li.selected a,
-.elgg-admin .submenu li.selected li.selected a,
-.elgg-admin .submenu li.selected li.selected li.selected a {
-       background-color: black;
-       color:white;
-}
-.elgg-admin .submenu li a {
-       display:block;
+
+.elgg-page-menu a {
+       display: block;
        -webkit-border-radius: 8px;
        -moz-border-radius: 8px;
-       background-color:white;
-       margin:0 0 3px 0;
-       padding:2px 4px 2px 8px;
-       color:#333333;
-}
-.elgg-admin .submenu li a:hover {
-       background-color:black;
-       color:white;
-       text-decoration:none;
+       background-color: white;
+       margin: 0 0 3px 0;
+       padding: 2px 4px 2px 8px;
+       color: #333333;
 }
-.elgg-admin .submenu ul.child {
-       margin-bottom:10px;
+.elgg-page-menu a:hover {
+       background-color: black;
+       color: white;
+       text-decoration: none;
 }
-.elgg-admin .submenu .child li a {
-       margin-left:15px;
-       background-color:#dedede;
-       color:#333333;
+.elgg-page-menu li.selected > a {
+       background-color: black;
+       color: white;
 }
-.elgg-admin .submenu .child li a:hover {
-       background-color:black;
-       color:white;
+.elgg-page-menu li.selected > ul {
+       display: block;
 }
 
 .admin_settings h3 {
index 7975dde2503384707d66db4a1cab0c2789fb20eb..359e10be4a529356a7e1df7056c7adb75a917548 100644 (file)
        color: white;
        text-decoration: none;
 }
-.elgg-page-menu .selected a {
+.elgg-page-menu li.selected > a {
        background-color: #4690D6;
        color: white;
 }
-
-.submenu {
-       margin:0;
-       padding:0;
-       list-style: none;
+.elgg-page-menu .elgg-child-menu {
+       display: none;
+       margin-left: 15px;
 }
-.submenu ul {
-       margin-bottom:0;
-       padding-left:0;
-       list-style: none;
+.elgg-menu-closed:before, .elgg-menu-opened:before {
+       display: inline-block;
+       padding-right: 4px;
 }
-.submenu li.selected a,
-.submenu li.selected li.selected a,
-.submenu li.selected li.selected li.selected a {
-       background: #4690D6;
-       color:white;
+.elgg-menu-closed:before {
+       content: "\002B";
 }
-.submenu li a {
-       display:block;
-       -webkit-border-radius: 8px;
-       -moz-border-radius: 8px;
-       background-color:white;
-       margin:0 0 3px 0;
-       padding:2px 4px 2px 8px;
-}
-.submenu li a:hover {
-       background:#0054A7;
-       color:white;
-       text-decoration:none;
-}
-.submenu .child li a {
-       margin-left:15px;
-       background-color:white;
-       color:#4690D6;
-}
-.submenu .child li a:hover {
-       background:#0054A7;
-       color:white;
-       text-decoration:none;
+.elgg-menu-opened:before {
+       content: "\002D";
 }
-
-.elgg-owner-block-menu li {
-       float: left;
-       width: 50%;
-       font-size: 90%;
-}
-
+/* ***************************************
+       HOVER MENU
+*************************************** */
 .elgg-hover-menu {
        display: none;
        position: absolute;
        color: white;
        background-color: red;
 }
+
+.elgg-owner-block-menu li {
+       float: left;
+       width: 50%;
+       font-size: 90%;
+}
index c03700c8a447022f4ea38a4889cfb4687590ab99..f2071adb5d63d201f1e6468d19c32fdeb08e3dcb 100644 (file)
@@ -24,10 +24,7 @@ END;
 echo elgg_view('layout/elements/owner_block');
 
 echo elgg_view('navigation/sidebar_menu');
-echo elgg_view_menu('page', array(
-       'sort_by' => 'name',
-       'class' => 'elgg-page-menu',
-));
+echo elgg_view_menu('page', array('sort_by' => 'name'));
 
 // optional 'sidebar' parameter
 if (isset($vars['sidebar'])) {
diff --git a/views/default/navigation/menu/elements/group.php b/views/default/navigation/menu/elements/group.php
new file mode 100644 (file)
index 0000000..09474ea
--- /dev/null
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Menu group
+ *
+ * @uses $vars['items']
+ * @uses $vars['class']
+ * @uses $vars['section']
+ */
+
+$class = elgg_get_array_value('class', $vars, '');
+if (isset($vars['section'])) {
+       $class = "$class elgg-section-{$vars['section']}";
+}
+
+echo "<ul class=\"$class\">";
+foreach ($vars['items'] as $menu_item) {
+       echo elgg_view('navigation/menu/elements/item', array('item' => $menu_item));
+}
+echo '</ul>';
index f6959b2f4876dfec4e9a8028aa0c21e0d299b738..7903dbdc074216d94e4d2592af81f94c92ba6378 100644 (file)
@@ -7,4 +7,19 @@ if ($item->getSelected()) {
        $class = 'class="selected"';
 }
 
-echo "<li $class>{$item->getLink()}</li>";
+$link_vars = array();
+
+$children = $item->getChildren();
+if ($children) {
+       $link_vars['class'] = 'elgg-menu-parent elgg-menu-closed';
+}
+
+echo "<li $class>";
+echo $item->getLink($link_vars);
+if ($children) {
+       echo elgg_view('navigation/menu/elements/group', array(
+               'items' => $children,
+               'class' => 'elgg-menu elgg-child-menu',
+       ));
+}
+echo '</li>';
diff --git a/views/default/navigation/menu/page.php b/views/default/navigation/menu/page.php
new file mode 100644 (file)
index 0000000..00fa1ef
--- /dev/null
@@ -0,0 +1,29 @@
+<?php
+/**
+ * Page menu
+ *
+ * @uses $vars['menu']
+ * @uses $vars['selected_item']
+ * @uses $vars['class']
+ */
+
+$class = 'elgg-menu elgg-page-menu';
+if (isset($vars['class'])) {
+       $class = "$class {$vars['class']}";
+}
+
+if (isset($vars['selected_item'])) {
+       $parent = $vars['selected_item']->getParent();
+       while ($parent) {
+               $parent->setSelected();
+               $parent = $parent->getParent();
+       }
+}
+
+foreach ($vars['menu'] as $section => $menu_items) {
+       echo elgg_view('navigation/menu/elements/group', array(
+               'items' => $menu_items,
+               'section' => $section,
+               'class' => $class,
+       ));
+}