aboutsummaryrefslogtreecommitdiff
path: root/engine/lib/admin.php
diff options
context:
space:
mode:
Diffstat (limited to 'engine/lib/admin.php')
-rw-r--r--engine/lib/admin.php139
1 files changed, 86 insertions, 53 deletions
diff --git a/engine/lib/admin.php b/engine/lib/admin.php
index 73e891332..81ef69baf 100644
--- a/engine/lib/admin.php
+++ b/engine/lib/admin.php
@@ -34,54 +34,75 @@ function extend_elgg_admin_page($new_admin_view, $view = 'admin/main', $priority
}
/**
- * Add an admin area section or child section (aka tab).
+ * Calculate the plugin settings submenu.
+ * This is done in a separate function called from the admin
+ * page handler because of performance concerns.
*
- * Used in conjuction with http://elgg.org/admin/section/child_section style
- * page handler.
- *
- * @param string $section_id Globally unique section id.
- * @param string $section_title Human readable section title.
- * @param string $parent_id If a child section, the parent section id. Cannot have grandchildren.
*/
-function elgg_add_admin_section($section_id, $section_title, $parent_id = NULL) {
+function elgg_admin_add_plugin_settings_sidemenu() {
global $CONFIG;
- if (!isset($CONFIG->admin_sections)) {
- $CONFIG->admin_sections = array();
+ if (!$installed_plugins = get_installed_plugins()) {
+ // nothing added because no items
+ return FALSE;
}
- // have to support adding a child section to a missing parent
- // because of plugin order problems. A plugin can extend
- // an admin section added by different plugin lower in the load priority.
- if ($parent_id) {
- if (!isset($CONFIG->admin_sections[$parent_id])) {
- $CONFIG->admin_sections[$parent_id] = array('children' => array());
- }
+ $parent_item = array(
+ 'text' => elgg_echo('admin:plugin_settings'),
+ 'id' => 'admin:plugin_settings'
+ );
+
+ elgg_add_submenu_item($parent_item, 'admin');
- if (!isset($CONFIG->admin_sections[$parent_id][$section_id])) {
- $CONFIG->admin_sections[$parent_id]['children'][$section_id] = array('title' => $section_title);
- return TRUE;
- } else {
- return FALSE;
+ foreach ($installed_plugins as $plugin_id => $info) {
+ if (!$info['active']) {
+ continue;
}
- } else {
- // children can be defined before parents
- if (!isset($CONFIG->admin_sections[$section_id])) {
- $CONFIG->admin_sections[$section_id] = array(
- 'title' => $section_title,
- 'children' => array()
- );
- return TRUE;
- } else {
- // allow to define this since children can be defined before the parent.
- $CONFIG->admin_sections[$section_id] = array(
- 'title' => $section_title
+
+ if (elgg_view_exists("settings/{$plugin_id}/edit")) {
+ $item = array(
+ 'text' => $info['manifest']['name'],
+ 'href' => "{$CONFIG->url}pg/admin/plugin_settings/$plugin_id",
+ 'parent_id' => 'admin:plugin_settings'
);
+
+ elgg_add_submenu_item($item, 'admin');
}
}
}
/**
+ * Add an admin area section or child section.
+ * This is a wrapper for elgg_add_admin_item(array(...), 'admin').
+ *
+ * Used in conjuction with http://elgg.org/admin/section_id/child_section style
+ * page handler.
+ *
+ * @param string $section_id
+ * @param string $section_title Human readable section title.
+ * @param string $parent_id If a child section, the parent section id.
+ */
+function elgg_add_admin_submenu_item($section_id, $section_title, $parent_id = NULL) {
+ global $CONFIG;
+
+ // in the admin section parents never have links
+ if ($parent_id) {
+ $href = "{$CONFIG->url}pg/admin/$parent_id/$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');
+}
+
+/**
* Initialise the admin page.
*/
function admin_init() {
@@ -99,31 +120,30 @@ function admin_init() {
register_action('admin/plugins/simple_update_states', FALSE, '', TRUE);
-
// admin area overview and basic site settings
- elgg_add_admin_section('overview', elgg_echo('admin:overview'));
- elgg_add_admin_section('site', elgg_echo('admin:site'));
- elgg_add_admin_section('basic', elgg_echo('admin:site:basic'), 'site');
- elgg_add_admin_section('advanced', elgg_echo('admin:site:advanced'), 'site');
+ elgg_add_admin_submenu_item('overview', elgg_echo('admin:overview'));
+ elgg_add_admin_submenu_item('site', elgg_echo('admin:site'));
+ elgg_add_admin_submenu_item('basic', elgg_echo('admin:site:basic'), 'admin:overview:site');
+ elgg_add_admin_submenu_item('advanced', elgg_echo('admin:site:advanced'), 'admin:overview:site');
// appearance
- elgg_add_admin_section('appearance', elgg_echo('admin:appearance'));
- //elgg_add_admin_section('basic', elgg_echo('admin:appearance'), 'appearance');
- elgg_add_admin_section('menu_items', elgg_echo('admin:menu_items'), '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');
// users
- elgg_add_admin_section('users', elgg_echo('admin:users'));
- elgg_add_admin_section('online', elgg_echo('admin:users:online'), 'users');
- elgg_add_admin_section('add', elgg_echo('admin:users:add'), 'users');
- elgg_add_admin_section('find', elgg_echo('admin:users:find'), '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('add', elgg_echo('admin:users:add'), 'users');
+ elgg_add_admin_submenu_item('find', elgg_echo('admin:users:find'), 'users');
// plugins
- elgg_add_admin_section('plugins', elgg_echo('admin:plugins'));
- elgg_add_admin_section('simple', elgg_echo('admin:plugins:simple'), 'plugins');
- elgg_add_admin_section('advanced', elgg_echo('admin:plugins:advanced'), '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_section('plugin_settings', elgg_echo('admin:plugin_settings'));
+ //elgg_add_admin_submenu_item('plugin_settings', elgg_echo('admin:plugin_settings'));
register_page_handler('admin', 'admin_settings_page_handler');
}
@@ -138,6 +158,8 @@ function admin_settings_page_handler($page) {
global $CONFIG;
admin_gatekeeper();
+ elgg_admin_add_plugin_settings_sidemenu();
+ set_context('admin');
// default to overview
if (!isset($page[0]) || empty($page[0])) {
@@ -169,7 +191,18 @@ function admin_settings_page_handler($page) {
$content = elgg_echo('admin:unknown_section');
}
- $body = elgg_view('admin/components/admin_page_layout', array('content' => $content, 'page' => $page));
+ //$body = elgg_view('admin/components/admin_page_layout', array('content' => $content, 'page' => $page));
+
+ $notices_html = '';
+ if ($notices = elgg_get_admin_notices()) {
+ foreach ($notices as $notice) {
+ $notices_html .= elgg_view_entity($notice);
+ }
+
+ $content = "<div class=\"admin_notices\">$notices_html</div>$content";
+ }
+
+ $body = elgg_view_layout('one_column_with_sidebar', $content);
page_draw($title, $body);
}
@@ -179,7 +212,7 @@ function admin_settings_page_handler($page) {
* The id is a unique ID that can be cleared once the admin
* completes the action.
*
- * eg: add_admin_notice('twitter_service_no_api',
+ * eg: add_admin_notice('twitter_services_no_api',
* 'Before your users can use Twitter services on this site, you must set up
* the Twitter API key in the <a href="link">Twitter Services Settings</a>');
*
@@ -198,7 +231,7 @@ function elgg_add_admin_notice($id, $message) {
return $admin_notice->save();
}
- return false;
+ return FALSE;
}