aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--actions/admin/menu_items.php36
-rw-r--r--admin/menu_items.php21
-rw-r--r--engine/lib/admin.php17
-rw-r--r--engine/lib/elgglib.php57
-rw-r--r--engine/lib/users.php2
-rw-r--r--languages/en.php5
-rw-r--r--views/default/admin/menu_items.php61
-rw-r--r--views/default/navigation/site_nav.php76
-rw-r--r--views/default/navigation/topbar_tools.php5
9 files changed, 202 insertions, 78 deletions
diff --git a/actions/admin/menu_items.php b/actions/admin/menu_items.php
new file mode 100644
index 000000000..b271e1c2b
--- /dev/null
+++ b/actions/admin/menu_items.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * Save menu items.
+ *
+ * @package Elgg
+ * @subpackage Core
+ * @author Curverider Ltd
+ * @link http://elgg.org/
+ */
+
+$featured_urls = get_input('featured_urls', array());
+$hide_toolbar_entries = get_input('menu_items_hide_toolbar_entries', 'yes');
+$featured_url_info = array();
+
+// save the full information from the menu item into the config table
+// this will be checked upon display that it is still valid (based upon url)
+$menu_items = get_register('menu');
+$menu_urls = array();
+
+foreach ($menu_items as $name => $info) {
+ $menu_urls[$info->value->url] = $info;
+}
+
+foreach ($featured_urls as $url) {
+ if (array_key_exists($url, $menu_urls)) {
+ $featured_url_info[] = $menu_urls[$url];
+ }
+}
+
+// set_config() always returns 0 so can't check for failures
+set_config('menu_items_featured_urls', $featured_url_info);
+set_config('menu_items_hide_toolbar_entries', $hide_toolbar_entries);
+
+system_message(elgg_echo('admin:menu_items:saved'));
+
+forward($_SERVER['HTTP_REFERER']); \ No newline at end of file
diff --git a/admin/menu_items.php b/admin/menu_items.php
new file mode 100644
index 000000000..5642957e1
--- /dev/null
+++ b/admin/menu_items.php
@@ -0,0 +1,21 @@
+<?php
+/**
+ * Elgg administration menu items
+ *
+ * @package Elgg
+ * @subpackage Core
+ * @author Curverider Ltd
+ * @link http://elgg.org/
+ */
+
+require_once(dirname(dirname(__FILE__)) . "/engine/start.php");
+admin_gatekeeper();
+
+$vars = array(
+ 'menu_items' => get_register('menu')
+);
+
+$main_box = elgg_view("admin/menu_items", $vars);
+$content = elgg_view_layout("one_column_with_sidebar", $main_box);
+
+page_draw(elgg_echo('admin:plugins'), $content); \ No newline at end of file
diff --git a/engine/lib/admin.php b/engine/lib/admin.php
index c8ca90a2f..8d9ffeba0 100644
--- a/engine/lib/admin.php
+++ b/engine/lib/admin.php
@@ -48,17 +48,12 @@ function admin_init() {
register_action('admin/user/resetpassword', false, "", true);
register_action('admin/user/makeadmin', false, "", true);
register_action('admin/user/removeadmin', false, "", true);
+ register_action('admin/site/update_basic', false, "", true);
+ register_action('admin/menu_items', false, "", true);
- // Register some actions
- register_action('admin/site/update_basic', false, "", true); // Register basic site admin action
// Page handler
- register_page_handler('admin','admin_settings_page_handler');
-
-// if (isadminloggedin()) {
-// global $is_admin;
-// $is_admin = true;
-// }
+ register_page_handler('admin', 'admin_settings_page_handler');
}
/**
@@ -74,6 +69,7 @@ function admin_pagesetup() {
add_submenu_item(elgg_echo('admin:site'), $CONFIG->wwwroot . 'pg/admin/site/');
add_submenu_item(elgg_echo('admin:user'), $CONFIG->wwwroot . 'pg/admin/user/');
add_submenu_item(elgg_echo('admin:plugins'), $CONFIG->wwwroot . 'pg/admin/plugins/');
+ add_submenu_item(elgg_echo('admin:menu_items'), $CONFIG->wwwroot . 'pg/admin/menu_items/');
}
}
@@ -94,6 +90,7 @@ function admin_settings_page_handler($page) {
case 'statistics' : $path = $CONFIG->path . "admin/statistics.php"; break;
case 'plugins' : $path = $CONFIG->path . "admin/plugins.php"; break;
case 'site' : $path = $CONFIG->path . "admin/site.php"; break;
+ case 'menu_items' : $path = $CONFIG->path . 'admin/menu_items.php'; break;
}
}
@@ -136,8 +133,8 @@ function send_admin_message($subject, $message) {
*/
function list_admin_messages($limit = 10) {
return elgg_list_entities(array(
- 'type' => 'object',
- 'subtype' => 'admin_message',
+ 'type' => 'object',
+ 'subtype' => 'admin_message',
'limit' => $limit
));
}
diff --git a/engine/lib/elgglib.php b/engine/lib/elgglib.php
index 95292a2d7..5a7fca837 100644
--- a/engine/lib/elgglib.php
+++ b/engine/lib/elgglib.php
@@ -1453,11 +1453,12 @@ function get_register($register_name) {
* @param string $menu_name The name of the menu item
* @param string $menu_url The URL of the page
* @param array $menu_children Optionally, an array of submenu items (not currently used)
- * @param string $context (not used and will likely be deprecated)
+ * @param string $context
* @return true|false Depending on success
*/
function add_menu($menu_name, $menu_url, $menu_children = array(), $context = "") {
global $CONFIG;
+
if (!isset($CONFIG->menucontexts)) {
$CONFIG->menucontexts = array();
}
@@ -1466,8 +1467,12 @@ function add_menu($menu_name, $menu_url, $menu_children = array(), $context = ""
$context = get_plugin_name();
}
+ $value = new stdClass();
+ $value->url = $menu_url;
+ $value->context = $context;
+
$CONFIG->menucontexts[] = $context;
- return add_to_register('menu', $menu_name, $menu_url, $menu_children);
+ return add_to_register('menu', $menu_name, $value, $menu_children);
}
/**
@@ -2885,6 +2890,50 @@ function elgg_api_test($hook, $type, $value, $params) {
}
/**
+ * Sorts out the topbar menu and the featured URLs
+ * and saves them to $CONFIG->menu_items = array ('featured_urls' and 'toolbar')
+ *
+ */
+function ui_page_setup() {
+ global $CONFIG;
+
+ $hide_toolbar_dupes = get_config('menu_items_hide_toolbar_entries') == 'yes' ? TRUE : FALSE;
+ $menu_items = get_register('menu');
+ $featured_urls_info = get_config('menu_items_featured_urls');
+ $toolbar = array();
+ $featured_urls = array();
+ $featured_urls_sanitised = array();
+
+ // easier to compare with in_array() than embedded foreach()es
+ $valid_urls = array();
+ foreach ($menu_items as $info) {
+ $valid_urls[] = $info->value->url;
+ }
+
+ // make sure the url is a valid link.
+ // this prevents disabled plugins leaving behind
+ // valid links when no using a pagehandler.
+ foreach ($featured_urls_info as $info) {
+ if (in_array($info->value->url, $valid_urls)) {
+ $featured_urls[] = $info->value->url;
+ $featured_urls_sanitised[] = $info;
+ }
+ }
+
+ // add toolbar entries if not hiding dupes.
+ foreach ($menu_items as $name => $info) {
+ if (!($hide_toolbar_dupes && in_array($info->value->url, $featured_urls))) {
+ $toolbar[] = $info;
+ }
+ }
+
+ $CONFIG->menu_items = array(
+ 'featured_urls' => $featured_urls_sanitised,
+ 'toolbar' => $toolbar
+ );
+}
+
+/**
* Some useful constant definitions
*/
define('ACCESS_DEFAULT', -1);
@@ -2898,4 +2947,6 @@ define('ELGG_ENTITIES_NO_VALUE', 0);
register_elgg_event_handler('init', 'system', 'elgg_init');
register_elgg_event_handler('boot', 'system', 'elgg_boot', 1000);
-register_plugin_hook('unit_test', 'system', 'elgg_api_test'); \ No newline at end of file
+register_plugin_hook('unit_test', 'system', 'elgg_api_test');
+
+register_elgg_event_handler('pagesetup', 'system', 'ui_page_setup', 1000); \ No newline at end of file
diff --git a/engine/lib/users.php b/engine/lib/users.php
index a0bdeabc5..46ccd8dc3 100644
--- a/engine/lib/users.php
+++ b/engine/lib/users.php
@@ -1628,7 +1628,7 @@ function users_init() {
// add Friends to tools menu - if profile mod is running
if ( isloggedin() && is_plugin_enabled('profile') ) {
$user = get_loggedin_user();
- add_menu(elgg_echo('friends'), $CONFIG->wwwroot . "pg/friends/" . $user->username);
+ add_menu(elgg_echo('friends'), $CONFIG->wwwroot . "pg/friends/" . $user->username, array(), 'core:friends');
}
register_page_handler('friends', 'friends_page_handler');
diff --git a/languages/en.php b/languages/en.php
index a84000039..f93e6c655 100644
--- a/languages/en.php
+++ b/languages/en.php
@@ -510,6 +510,11 @@ To remove a widget drag it back to the <b>Widget gallery</b>.",
'admin:user:removeadmin:yes' => "User is no longer an admin.",
'admin:user:removeadmin:no' => "We could not remove administrator privileges from this user.",
+ 'admin:menu_items' => 'Menu Items',
+ 'admin:menu_items:description' => 'Select which menu items you want to show as featured links. You can optionally remove these items from the dropdown menu.',
+ 'admin:menu_items:hide_toolbar_entries' => 'Remove links from tool bar menu?',
+ 'admin:menu_items:saved' => 'Menu items saved.',
+
/**
* User settings
*/
diff --git a/views/default/admin/menu_items.php b/views/default/admin/menu_items.php
new file mode 100644
index 000000000..68f3688d8
--- /dev/null
+++ b/views/default/admin/menu_items.php
@@ -0,0 +1,61 @@
+<?php
+/**
+ * Elgg administration menu items
+ *
+ * @package Elgg
+ * @subpackage Core
+ * @author Curverider Ltd
+ * @link http://elgg.org/
+ */
+
+$menu_items = $vars['menu_items'];
+$featured_urls = get_config('menu_items_featured_urls');
+
+// get an alphabetical sort of the items + urls
+foreach ($menu_items as $name => $info) {
+ $menu_sorted[$info->name] = $info->value->url;
+}
+
+ksort($menu_sorted);
+
+$pulldown_values = array_flip($menu_sorted);
+$pulldown_values[''] = elgg_echo('none');
+
+echo elgg_view_title(elgg_echo('admin:menu_items'));
+echo elgg_view('output/longtext', array('value' => elgg_echo("admin:menu_items:description")));
+
+$form_body = '';
+
+// @todo Could probably make this number configurable
+for ($i=0; $i<7; $i++) {
+ if (array_key_exists($i, $featured_urls)) {
+ $current_value = $featured_urls[$i]->value->url;
+ } else {
+ $current_value = '';
+ }
+
+ $form_body .= elgg_view('input/pulldown', array(
+ 'options_values' => $pulldown_values,
+ 'internalname' => 'featured_urls[]',
+ 'value' => $current_value
+ ));
+}
+$form_body .= '<br /><br />';
+$form_body .= '<label for="menu_items_hide_toolbar_entries">'
+ . elgg_echo('admin:menu_items:hide_toolbar_entries') . '</label>';
+$form_body .= elgg_view('input/pulldown', array(
+ 'internalname' => 'menu_items_hide_toolbar_entries',
+ 'internalid' => 'menu_items_hide_toolbar_entries',
+ 'value' => get_config('menu_items_hide_toolbar_entries'),
+ 'options_values' => array(
+ 'yes' => elgg_echo('option:yes'),
+ 'no' => elgg_echo('option:no')
+)));
+
+$form_body .= '<br /><br />';
+$form_body .= elgg_view('input/submit', array('value' => elgg_echo('save')));
+
+echo elgg_view('input/form', array(
+ 'body' => $form_body,
+ 'action' => "{$vars['url']}action/admin/menu_items"
+)); \ No newline at end of file
diff --git a/views/default/navigation/site_nav.php b/views/default/navigation/site_nav.php
index 8431188d8..965eb7e63 100644
--- a/views/default/navigation/site_nav.php
+++ b/views/default/navigation/site_nav.php
@@ -2,67 +2,21 @@
/**
* Main site-wide navigation
**/
-
-echo "<div id='elgg_main_nav' class='clearfloat'>";
-echo "<ul class='navigation'>";
-if(is_plugin_enabled('riverdashboard')){
- if(get_context() == 'riverdashboard')
- $selected = 'class="selected"';
- else
- $selected = "";
- echo "<li {$selected}><a href=\"{$vars['url']}mod/riverdashboard/\" title='Activity'><span>Activity</span></a></li>";
-}
-if(is_plugin_enabled('thewire') && isloggedin()){
- if(get_context() == 'thewire')
- $selected = 'class="selected"';
- else
- $selected = "";
- echo "<li {$selected}><a href=\"{$vars['url']}mod/thewire/everyone.php\" title='The Wire'><span>" . elgg_echo('thewire:title') . "</span></a></li>";
-}
-if(is_plugin_enabled('conversations') && isloggedin()){
- if(get_context() == 'conversations')
- $selected = 'class="selected"';
- else
- $selected = "";
- echo "<li {$selected}><a href=\"{$vars['url']}mod/conversations/all.php\" title='Conversations'><span>" . elgg_echo('conversations') . "</span></a></li>";
-}
-if(is_plugin_enabled('blog')){
- if(get_context() == 'blog')
- $selected = 'class="selected"';
- else
- $selected = "";
- echo "<li {$selected}><a href=\"{$vars['url']}mod/blog/all.php\" title='Blogs'><span>Blogs</span></a></li>";
-}
-if(is_plugin_enabled('pages')){
- if(get_context() == 'pages')
- $selected = 'class="selected"';
- else
- $selected = "";
- echo "<li {$selected}><a href=\"{$vars['url']}mod/pages/all.php\" title='Pages'><span>Pages</span></a></li>";
-}
-if(is_plugin_enabled('file')){
- if(get_context() == 'file')
- $selected = 'class="selected"';
- else
- $selected = "";
- echo "<li {$selected}><a href=\"{$vars['url']}pg/file/world/world/\" title='Files'><span>Files</span></a></li>";
-}
-if(is_plugin_enabled('bookmarks')){
- if(get_context() == 'bookmarks')
- $selected = 'class="selected"';
- else
- $selected = "";
- echo "<li {$selected}><a href=\"{$vars['url']}mod/bookmarks/all.php\" title='Bookmarks'><span>Bookmarks</span></a></li>";
-}
-if(is_plugin_enabled('groups')){
- if(get_context() == 'groups')
- $selected = 'class="selected"';
- else
- $selected = "";
- echo "<li {$selected}><a href=\"{$vars['url']}pg/groups/world/\" title='Groups'><span>". elgg_echo('groups') . "</span></a></li>";
+$featured = $vars['config']->menu_items['featured_urls'];
+$current_context = get_context();
+
+echo '<div id="elgg_main_nav" class="clearfloat">
+ <ul class="navigation">';
+
+foreach ($featured as $info) {
+ $selected = ($info->value->context == $current_context) ? 'class="selected"' : '';
+ $title = htmlentities($info->name, ENT_QUOTES, 'UTF-8');
+ $url = htmlentities($info->value->url, ENT_QUOTES, 'UTF-8');
+
+ echo "<li $selected><a href=\"$url\" title=\"$title\"><span>$title</span></a></li>";
}
-echo "</ul>";
-echo "</div>";
-?> \ No newline at end of file
+echo '
+ </ul>
+</div>'; \ No newline at end of file
diff --git a/views/default/navigation/topbar_tools.php b/views/default/navigation/topbar_tools.php
index 0e0eec097..2e48a4a85 100644
--- a/views/default/navigation/topbar_tools.php
+++ b/views/default/navigation/topbar_tools.php
@@ -9,8 +9,7 @@
* @link http://elgg.org/
*
*/
-
-$menu = get_register('menu');
+$menu = $vars['config']->menu_items['toolbar'];
if (is_array($menu) && sizeof($menu) > 0) {
$alphamenu = array();
@@ -26,7 +25,7 @@ if (is_array($menu) && sizeof($menu) > 0) {
<ul>
<?php
foreach($alphamenu as $item) {
- echo "<li><a href=\"{$item->value}\">" . $item->name . "</a></li>";
+ echo "<li><a href=\"{$item->value->url}\">" . $item->name . "</a></li>";
}
?>
</ul>