diff options
-rw-r--r-- | engine/lib/admin.php | 224 |
1 files changed, 115 insertions, 109 deletions
diff --git a/engine/lib/admin.php b/engine/lib/admin.php index ea18d9e3f..2384a9278 100644 --- a/engine/lib/admin.php +++ b/engine/lib/admin.php @@ -8,29 +8,102 @@ */ /** - * Create the plugin settings submenu. + * Write a persistent message to the admin view. + * Useful to alert the admin to take a certain action. + * The id is a unique ID that can be cleared once the admin + * completes the action. * - * This is done in a separate function called from the admin - * page handler because of performance concerns. + * 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>'); * - * @return void + * @param string $id A unique ID that your plugin can remember + * @param string $message Body of the message + * + * @return bool + * @since 1.8.0 */ -function elgg_admin_add_plugin_settings_menu() { +function elgg_add_admin_notice($id, $message) { + if ($id && $message) { + $admin_notice = new ElggObject(); + $admin_notice->subtype = 'admin_notice'; + // admins can see ACCESS_PRIVATE but no one else can. + $admin_notice->access_id = ACCESS_PRIVATE; + $admin_notice->admin_notice_id = $id; + $admin_notice->description = $message; - $active_plugins = elgg_get_plugins('active'); - if (!$active_plugins) { - // nothing added because no items - return FALSE; + return $admin_notice->save(); } - elgg_add_admin_menu_item('plugin_settings', elgg_echo('admin:plugin_settings'), null, 51); + return FALSE; +} - foreach ($active_plugins as $plugin) { - $plugin_id = $plugin->getID(); - if (elgg_view_exists("settings/$plugin_id/edit")) { - elgg_add_admin_menu_item($plugin_id, $plugin->manifest->getName(), 'plugin_settings'); + +/** + * Remove an admin notice by ID. + * + * eg In actions/twitter_service/save_settings: + * if (is_valid_twitter_api_key()) { + * delete_admin_notice('twitter_services_no_api'); + * } + * + * @param string $id The unique ID assigned in add_admin_notice() + * + * @return bool + * @since 1.8.0 + */ +function elgg_delete_admin_notice($id) { + if (!$id) { + return FALSE; + } + $result = TRUE; + $notices = elgg_get_entities_from_metadata(array( + 'metadata_name' => 'admin_notice_id', + 'metadata_value' => $id + )); + + if ($notices) { + // in case a bad plugin adds many, let it remove them all at once. + foreach ($notices as $notice) { + $result = ($result && $notice->delete()); } + return $result; } + return FALSE; +} + +/** + * List all admin messages. + * + * @param int $limit Limit + * + * @return array List of admin notices + * @since 1.8.0 + */ +function elgg_get_admin_notices($limit = 10) { + return elgg_get_entities_from_metadata(array( + 'type' => 'object', + 'subtype' => 'admin_notice', + 'limit' => $limit + )); +} + +/** + * Check if an admin notice is currently active. + * + * @param string $id The unique ID used to register the notice. + * + * @return bool + * @since 1.8.0 + */ +function elgg_admin_notice_exists($id) { + $notice = elgg_get_entities_from_metadata(array( + 'type' => 'object', + 'subtype' => 'admin_notice', + 'metadata_name_value_pair' => array('name' => 'admin_notice_id', 'value' => $id) + )); + + return ($notice) ? TRUE : FALSE; } /** @@ -153,7 +226,35 @@ function admin_init() { } /** + * Create the plugin settings submenu. + * + * This is done in a separate function called from the admin + * page handler because of performance concerns. + * + * @return void + * @access private + */ +function elgg_admin_add_plugin_settings_menu() { + + $active_plugins = elgg_get_plugins('active'); + if (!$active_plugins) { + // nothing added because no items + return FALSE; + } + + elgg_add_admin_menu_item('plugin_settings', elgg_echo('admin:plugin_settings'), null, 51); + + foreach ($active_plugins as $plugin) { + $plugin_id = $plugin->getID(); + if (elgg_view_exists("settings/$plugin_id/edit")) { + elgg_add_admin_menu_item($plugin_id, $plugin->manifest->getName(), 'plugin_settings'); + } + } +} + +/** * Handles any set up required for administration pages + * @access private */ function admin_pagesetup() { if (elgg_in_context('admin')) { @@ -280,100 +381,5 @@ function admin_plugin_screenshot_page_handler($pages) { return true; } -/** - * Write a persistent message to the admin view. - * Useful to alert the admin to take a certain action. - * The id is a unique ID that can be cleared once the admin - * completes the action. - * - * 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>'); - * - * @param string $id A unique ID that your plugin can remember - * @param string $message Body of the message - * - * @return boo - */ -function elgg_add_admin_notice($id, $message) { - if ($id && $message) { - $admin_notice = new ElggObject(); - $admin_notice->subtype = 'admin_notice'; - // admins can see ACCESS_PRIVATE but no one else can. - $admin_notice->access_id = ACCESS_PRIVATE; - $admin_notice->admin_notice_id = $id; - $admin_notice->description = $message; - - return $admin_notice->save(); - } - - return FALSE; -} - - -/** - * Remove an admin notice by ID. - * - * eg In actions/twitter_service/save_settings: - * if (is_valid_twitter_api_key()) { - * delete_admin_notice('twitter_services_no_api'); - * } - * - * @param string $id The unique ID assigned in add_admin_notice() - * - * @return bool - */ -function elgg_delete_admin_notice($id) { - if (!$id) { - return FALSE; - } - $result = TRUE; - $notices = elgg_get_entities_from_metadata(array( - 'metadata_name' => 'admin_notice_id', - 'metadata_value' => $id - )); - - if ($notices) { - // in case a bad plugin adds many, let it remove them all at once. - foreach ($notices as $notice) { - $result = ($result && $notice->delete()); - } - return $result; - } - return FALSE; -} - -/** - * List all admin messages. - * - * @param int $limit Limit - * - * @return array List of admin notices - */ -function elgg_get_admin_notices($limit = 10) { - return elgg_get_entities_from_metadata(array( - 'type' => 'object', - 'subtype' => 'admin_notice', - 'limit' => $limit - )); -} - -/** - * Check if an admin notice is currently active. - * - * @param string $id The unique ID used to register the notice. - * - * @return bool - */ -function elgg_admin_notice_exists($id) { - $notice = elgg_get_entities_from_metadata(array( - 'type' => 'object', - 'subtype' => 'admin_notice', - 'metadata_name_value_pair' => array('name' => 'admin_notice_id', 'value' => $id) - )); - - return ($notice) ? TRUE : FALSE; -} - elgg_register_event_handler('init', 'system', 'admin_init'); elgg_register_event_handler('pagesetup', 'system', 'admin_pagesetup', 1000); |