]> gitweb.fluxo.info Git - lorea/elgg.git/commitdiff
sorting plugin settings menu items by text
authorcash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
Sat, 11 Jun 2011 14:01:13 +0000 (14:01 +0000)
committercash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
Sat, 11 Jun 2011 14:01:13 +0000 (14:01 +0000)
git-svn-id: http://code.elgg.org/elgg/trunk@9169 36083f99-b078-4883-b0ff-0f9b5a30f544

engine/classes/ElggMenuItem.php
engine/lib/admin.php

index 61dbf539e0e906e5e53a65fe9c0954747878a935..caaba49a1a000b5a04ae3a6eaee4656381968969 100644 (file)
@@ -419,6 +419,17 @@ class ElggMenuItem {
                $this->children[] = $item;
        }
 
+       /**
+        * Set the menu item's children
+        *
+        * @param array $children Array of ElggMenuItems
+        *
+        * @return void
+        */
+       public function setChildren($children) {
+               $this->children = $children;
+       }
+
        /**
         * Get the children menu items
         *
index 6ef626f81cd3ac449035c1f761c8de837bab0e1a..3bfb69102de2fa58add6e1929c10873fc37f405f 100644 (file)
@@ -211,7 +211,7 @@ function elgg_register_admin_menu_item($section, $menu_id, $parent_id = NULL, $p
 }
 
 /**
- * Initialise the admin backend.
+ * Initialize the admin backend.
  *
  * @return void
  */
@@ -284,6 +284,11 @@ function admin_init() {
        // plugin settings are added in elgg_admin_add_plugin_settings_menu() via the admin page handler
        // for performance reasons.
 
+       // we want plugin settings menu items to be sorted alphabetical
+       if (elgg_in_context('admin')) {
+               elgg_register_plugin_hook_handler('prepare', 'menu:page', 'elgg_admin_sort_page_menu');
+       }
+
        if (elgg_is_admin_logged_in()) {
                elgg_register_menu_item('topbar', array(
                        'name' => 'administration',
@@ -321,6 +326,7 @@ function admin_init() {
  *
  * @return void
  * @access private
+ * @since 1.8.0
  */
 function elgg_admin_add_plugin_settings_menu() {
 
@@ -347,6 +353,33 @@ function elgg_admin_add_plugin_settings_menu() {
        }
 }
 
+/**
+ * Sort the plugin settings menu items
+ *
+ * @param string $hook
+ * @param string $type
+ * @param array  $return
+ * @param array  $params
+ *
+ * @return void
+ * @since 1.8.0
+ */
+function elgg_admin_sort_page_menu($hook, $type, $return, $params) {
+       $configure_items = $return['configure'];
+       foreach ($configure_items as $menu_item) {
+               if ($menu_item->getName() == 'settings') {
+                       $settings = $menu_item;
+               }
+       }
+
+       // keep the basic and advanced settings at the top
+       $children = $settings->getChildren();
+       $site_settings = array_splice($children, 0, 2);
+       usort($children, array('ElggMenuBuilder', 'compareByText'));
+       array_splice($children, 0, 0, $site_settings);
+       $settings->setChildren($children);
+}
+
 /**
  * Handles any set up required for administration pages
  *