WordPress Version: 3.7
/**
* WordPress Dashboard Widget Administration Screen API
*
* @package WordPress
* @subpackage Administration
*/
/**
* Registers dashboard widgets.
*
* Handles POST data, sets up filters.
*
* @since 2.5.0
*/
function wp_dashboard_setup()
{
global $wp_registered_widgets, $wp_registered_widget_controls, $wp_dashboard_control_callbacks;
$wp_dashboard_control_callbacks = array();
$screen = get_current_screen();
$update = false;
$widget_options = get_option('dashboard_widget_options');
if (!$widget_options || !is_array($widget_options)) {
$widget_options = array();
}
/* Register Widgets and Controls */
$response = wp_check_browser_version();
if ($response && $response['upgrade']) {
add_filter('postbox_classes_dashboard_dashboard_browser_nag', 'dashboard_browser_nag_class');
if ($response['insecure']) {
wp_add_dashboard_widget('dashboard_browser_nag', __('You are using an insecure browser!'), 'wp_dashboard_browser_nag');
} else {
wp_add_dashboard_widget('dashboard_browser_nag', __('Your browser is out of date!'), 'wp_dashboard_browser_nag');
}
}
// Right Now
if (is_blog_admin() && current_user_can('edit_posts')) {
wp_add_dashboard_widget('dashboard_right_now', __('Right Now'), 'wp_dashboard_right_now');
}
if (is_network_admin()) {
wp_add_dashboard_widget('network_dashboard_right_now', __('Right Now'), 'wp_network_dashboard_right_now');
}
// Recent Comments Widget
if (is_blog_admin() && current_user_can('moderate_comments')) {
if (!isset($widget_options['dashboard_recent_comments']) || !isset($widget_options['dashboard_recent_comments']['items'])) {
$update = true;
$widget_options['dashboard_recent_comments'] = array('items' => 5);
}
$recent_comments_title = __('Recent Comments');
wp_add_dashboard_widget('dashboard_recent_comments', $recent_comments_title, 'wp_dashboard_recent_comments', 'wp_dashboard_recent_comments_control');
}
// Incoming Links Widget
if (is_blog_admin() && current_user_can('publish_posts')) {
if (!isset($widget_options['dashboard_incoming_links']) || !isset($widget_options['dashboard_incoming_links']['home']) || $widget_options['dashboard_incoming_links']['home'] != get_option('home')) {
$update = true;
$num_items = isset($widget_options['dashboard_incoming_links']['items']) ? $widget_options['dashboard_incoming_links']['items'] : 10;
$widget_options['dashboard_incoming_links'] = array('home' => get_option('home'), 'link' => apply_filters('dashboard_incoming_links_link', 'http://blogsearch.google.com/blogsearch?scoring=d&partner=wordpress&q=link:' . trailingslashit(get_option('home'))), 'url' => isset($widget_options['dashboard_incoming_links']['url']) ? apply_filters('dashboard_incoming_links_feed', $widget_options['dashboard_incoming_links']['url']) : apply_filters('dashboard_incoming_links_feed', 'http://blogsearch.google.com/blogsearch_feeds?scoring=d&ie=utf-8&num=' . $num_items . '&output=rss&partner=wordpress&q=link:' . trailingslashit(get_option('home'))), 'items' => $num_items, 'show_date' => isset($widget_options['dashboard_incoming_links']['show_date']) ? $widget_options['dashboard_incoming_links']['show_date'] : false);
}
wp_add_dashboard_widget('dashboard_incoming_links', __('Incoming Links'), 'wp_dashboard_incoming_links', 'wp_dashboard_incoming_links_control');
}
// WP Plugins Widget
if (!is_multisite() && is_blog_admin() && current_user_can('install_plugins') || is_network_admin() && current_user_can('manage_network_plugins') && current_user_can('install_plugins')) {
wp_add_dashboard_widget('dashboard_plugins', __('Plugins'), 'wp_dashboard_plugins');
}
// QuickPress Widget
if (is_blog_admin() && current_user_can('edit_posts')) {
wp_add_dashboard_widget('dashboard_quick_press', __('QuickPress'), 'wp_dashboard_quick_press');
}
// Recent Drafts
if (is_blog_admin() && current_user_can('edit_posts')) {
wp_add_dashboard_widget('dashboard_recent_drafts', __('Recent Drafts'), 'wp_dashboard_recent_drafts');
}
// Primary feed (Dev Blog) Widget
if (!isset($widget_options['dashboard_primary'])) {
$update = true;
$widget_options['dashboard_primary'] = array('link' => apply_filters('dashboard_primary_link', __('http://wordpress.org/news/')), 'url' => apply_filters('dashboard_primary_feed', __('http://wordpress.org/news/feed/')), 'title' => apply_filters('dashboard_primary_title', __('WordPress Blog')), 'items' => 2, 'show_summary' => 1, 'show_author' => 0, 'show_date' => 1);
}
wp_add_dashboard_widget('dashboard_primary', $widget_options['dashboard_primary']['title'], 'wp_dashboard_primary', 'wp_dashboard_primary_control');
// Secondary Feed (Planet) Widget
if (!isset($widget_options['dashboard_secondary'])) {
$update = true;
$widget_options['dashboard_secondary'] = array('link' => apply_filters('dashboard_secondary_link', __('http://planet.wordpress.org/')), 'url' => apply_filters('dashboard_secondary_feed', __('http://planet.wordpress.org/feed/')), 'title' => apply_filters('dashboard_secondary_title', __('Other WordPress News')), 'items' => 5, 'show_summary' => 0, 'show_author' => 0, 'show_date' => 0);
}
wp_add_dashboard_widget('dashboard_secondary', $widget_options['dashboard_secondary']['title'], 'wp_dashboard_secondary', 'wp_dashboard_secondary_control');
// Hook to register new widgets
// Filter widget order
if (is_network_admin()) {
do_action('wp_network_dashboard_setup');
$dashboard_widgets = apply_filters('wp_network_dashboard_widgets', array());
} elseif (is_user_admin()) {
do_action('wp_user_dashboard_setup');
$dashboard_widgets = apply_filters('wp_user_dashboard_widgets', array());
} else {
do_action('wp_dashboard_setup');
$dashboard_widgets = apply_filters('wp_dashboard_widgets', array());
}
foreach ($dashboard_widgets as $widget_id) {
$name = empty($wp_registered_widgets[$widget_id]['all_link']) ? $wp_registered_widgets[$widget_id]['name'] : ($wp_registered_widgets[$widget_id]['name'] . " <a href='{$wp_registered_widgets[$widget_id]['all_link']}' class='edit-box open-box'>" . __('View all') . '</a>');
wp_add_dashboard_widget($widget_id, $name, $wp_registered_widgets[$widget_id]['callback'], $wp_registered_widget_controls[$widget_id]['callback']);
}
if ('POST' == $_SERVER['REQUEST_METHOD'] && isset($_POST['widget_id'])) {
check_admin_referer('edit-dashboard-widget_' . $_POST['widget_id'], 'dashboard-widget-nonce');
ob_start();
// hack - but the same hack wp-admin/widgets.php uses
wp_dashboard_trigger_widget_control($_POST['widget_id']);
ob_end_clean();
wp_redirect(remove_query_arg('edit'));
exit;
}
if ($update) {
update_option('dashboard_widget_options', $widget_options);
}
/** This action is documented in wp-admin/edit-form-advanced.php */
do_action('do_meta_boxes', $screen->id, 'normal', '');
/** This action is documented in wp-admin/edit-form-advanced.php */
do_action('do_meta_boxes', $screen->id, 'side', '');
}