From 9a936eb7d0f5c1f6ada02bfffb3bc62c3e40c978 Mon Sep 17 00:00:00 2001 From: Andrew Nacin Date: Fri, 15 Nov 2013 20:14:44 +0000 Subject: [PATCH] Dash cleanup. * Use wp_add_dashboard_widget() rather than add_meta_box(). * Use original functions like wp_dashboard_primary(), wp_dashboard_right_now(), wp_dashboard_quick_press() (where possible). * Only include plugins section of the news widget when appropriate, which necessitates the set_current_screen() via the ajax action. * Remove some debug cruft that was preventing caching and invalidation. * Simplify lots of things where possible. see #25824. git-svn-id: https://develop.svn.wordpress.org/trunk@26220 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/css/wp-admin.css | 22 +-- src/wp-admin/includes/ajax-actions.php | 9 +- src/wp-admin/includes/dashboard.php | 254 +++++++++++-------------- src/wp-admin/includes/deprecated.php | 2 +- src/wp-admin/js/dashboard.js | 7 +- 5 files changed, 134 insertions(+), 160 deletions(-) diff --git a/src/wp-admin/css/wp-admin.css b/src/wp-admin/css/wp-admin.css index 9270fee4e6..917516c452 100644 --- a/src/wp-admin/css/wp-admin.css +++ b/src/wp-admin/css/wp-admin.css @@ -2969,19 +2969,19 @@ body #dashboard-widgets .postbox form .submit { /* Dashboard Quick Draft */ -#dashboard_quick_draft div.updated { +#dashboard_quick_press div.updated { margin-bottom: 10px; border: 1px solid #eee; border-width: 1px 1px 1px 0; } -#dashboard_quick_draft form { +#dashboard_quick_press form { padding: 0 12px 1px 12px; overflow: hidden; } -#dashboard_quick_draft .drafts, -#dashboard_quick_draft .easy-blogging { +#dashboard_quick_press .drafts, +#dashboard_quick_press .easy-blogging { padding: 8px 12px 0; } @@ -3012,15 +3012,15 @@ form.initial-form.quickpress-open input#title { height: auto; } -#dashboard_quick_draft input, -#dashboard_quick_draft textarea { +#dashboard_quick_press input, +#dashboard_quick_press textarea { box-sizing: border-box; -moz-box-sizing:border-box; -webkit-box-sizing:border-box; margin: 0; } -#dashboard_quick_draft textarea { +#dashboard_quick_press textarea { resize: vertical; } @@ -3070,21 +3070,21 @@ form.initial-form.quickpress-open input#title { /* Dashboard Quick Draft - Drafts list */ -#dashboard_quick_draft .drafts { +#dashboard_quick_press .drafts { border-top: 1px solid #eee; margin-top: 12px; } -#dashboard_quick_draft .drafts abbr { +#dashboard_quick_press .drafts abbr { border: none; } -#dashboard_quick_draft .drafts h4 { +#dashboard_quick_press .drafts h4 { margin: 0 0 8px 0; font-weight: normal; } -#dashboard_quick_draft .drafts .view-all { +#dashboard_quick_press .drafts .view-all { float: right; margin-top: 0; } diff --git a/src/wp-admin/includes/ajax-actions.php b/src/wp-admin/includes/ajax-actions.php index 2533dd6fa5..a28e2c68c0 100644 --- a/src/wp-admin/includes/ajax-actions.php +++ b/src/wp-admin/includes/ajax-actions.php @@ -233,9 +233,14 @@ function wp_ajax_autocomplete_user() { function wp_ajax_dashboard_widgets() { require_once ABSPATH . 'wp-admin/includes/dashboard.php'; + $pagenow = $_GET['pagenow']; + if ( $pagenow === 'dashboard-user' || $pagenow === 'dashboard-network' || $pagenow === 'dashboard' ) { + set_current_screen( $pagenow ); + } + switch ( $_GET['widget'] ) { - case 'dashboard_rss' : - wp_dashboard_rss(); + case 'dashboard_primary' : + wp_dashboard_primary(); break; } wp_die(); diff --git a/src/wp-admin/includes/dashboard.php b/src/wp-admin/includes/dashboard.php index 0991dd3cf5..90fe304112 100644 --- a/src/wp-admin/includes/dashboard.php +++ b/src/wp-admin/includes/dashboard.php @@ -37,20 +37,20 @@ function wp_dashboard_setup() { // Right Now if ( is_blog_admin() && current_user_can('edit_posts') ) - add_meta_box( 'dash-right-now', 'Site Content', 'dashboard_new_right_now', 'dashboard', 'normal', 'high' ); + wp_add_dashboard_widget( 'dash-right-now', __( 'Site Content' ), 'wp_dashboard_right_now' ); if ( is_network_admin() ) wp_add_dashboard_widget( 'network_dashboard_right_now', __( 'Right Now' ), 'wp_network_dashboard_right_now' ); // Activity Widget - add_meta_box( 'dashboard_activity', __( 'Activity' ), 'wp_dashboard_activity', 'dashboard', 'normal', 'high' ); + wp_add_dashboard_widget( 'dashboard_activity', __( 'Activity' ), 'wp_dashboard_activity' ); // QuickPress Widget if ( is_blog_admin() && current_user_can( 'edit_posts' ) ) - add_meta_box( 'dashboard_quick_draft', __( 'Quick Draft' ), 'wp_dashboard_quick_draft', 'dashboard', 'side', 'high' ); + wp_add_dashboard_widget( 'dashboard_quick_press', __( 'Quick Draft' ), 'wp_dashboard_quick_press' ); // WordPress News - add_meta_box( 'dashboard_rss', __( 'WordPress News' ), 'wp_dashboard_rss', 'dashboard', 'side', 'low' ); + wp_add_dashboard_widget( 'dashboard_primary', __( 'WordPress News' ), 'wp_dashboard_primary' ); // Hook to register new widgets // Filter widget order @@ -104,12 +104,7 @@ function wp_add_dashboard_widget( $widget_id, $widget_name, $callback, $control_ } } - if ( is_blog_admin () ) - $side_widgets = array('dashboard_quick_draft'); - else if (is_network_admin() ) - $side_widgets = array(); - else - $side_widgets = array(); + $side_widgets = array( 'dashboard_quick_press', 'dashboard_primary' ); $location = 'normal'; if ( in_array($widget_id, $side_widgets) ) @@ -118,6 +113,8 @@ function wp_add_dashboard_widget( $widget_id, $widget_name, $callback, $control_ $priority = 'core'; if ( 'dashboard_browser_nag' === $widget_id ) $priority = 'high'; + elseif ( 'dashboard_primary' === $widget_id ) + $priority = 'low'; add_meta_box( $widget_id, $widget_name, $callback, $screen, $location, $priority, $callback_args ); } @@ -164,7 +161,14 @@ function wp_dashboard() { /* Dashboard Widgets */ -function dashboard_new_right_now() { +/** + * Dashboard widget that displays some basic stats about the site. + * + * Formerly 'Right Now'. A streamlined 'Site Content' as of 3.8. + * + * @since 2.7.0 + */ +function wp_dashboard_right_now() { $theme = wp_get_theme(); if ( current_user_can( 'switch_themes' ) ) $theme_name = sprintf( '%1$s', $theme->display('Name') ); @@ -283,7 +287,7 @@ function wp_network_dashboard_right_now() { * @since 3.8.0 * */ -function wp_dashboard_quick_draft( $error_msg=false ) { +function wp_dashboard_quick_press( $error_msg=false ) { global $post_ID; /* Check if a new auto-draft (= no new post_ID) is needed or if the old can be used */ @@ -305,8 +309,6 @@ function wp_dashboard_quick_draft( $error_msg=false ) { } $post_ID = (int) $post->ID; - - do_action( 'dashboard_quickdraft_beginning', $post ); ?>
@@ -338,8 +340,6 @@ function wp_dashboard_quick_draft( $error_msg=false ) { '; + wp_widget_rss_output( $widgets[ $widget_id ] ); + echo ""; +} + /** * Checks to see if all of the feed url in $check_urls are cached. * @@ -745,15 +759,12 @@ function wp_dashboard_trigger_widget_control( $widget_control_id = false ) { } /** - * Returns default WordPress News feeds - * - * - * - * @since 3.8.0 + * WordPress News dashboard widget. * + * @since 2.7.0 */ -function wp_dashboard_default_feeds() { - return array( +function wp_dashboard_primary() { + $feeds = array( 'news' => array( 'link' => apply_filters( 'dashboard_primary_link', __( 'http://wordpress.org/news/' ) ), 'url' => apply_filters( 'dashboard_primary_feed', __( 'http://wordpress.org/news/feed/' ) ), @@ -771,161 +782,120 @@ function wp_dashboard_default_feeds() { 'show_summary' => 0, 'show_author' => 0, 'show_date' => 0, - ), - 'plugins' => array( + ) + ); + + 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' ) ) ) { + $feeds['plugins'] = array( 'link' => '', 'url' => array( - 'popular' => 'http://wordpress.org/plugins/rss/browse/popular/' + 'popular' => 'http://wordpress.org/plugins/rss/browse/popular/', ), 'title' => '', 'items' => 1, 'show_summary' => 0, 'show_author' => 0, 'show_date' => 0, - ) - ); -} - -/** - * Check for cached feeds - * - * - * - * @since 3.8.0 - * - */ -function wp_dashboard_rss() { - $default_feeds = wp_dashboard_default_feeds(); - - $widget_options = get_option( 'dashboard_widget_options' ); - - if ( !$widget_options || !is_array($widget_options) ) - $widget_options = array(); - - //if ( ! isset( $widget_options['dashboard_rss'] ) ) { - $widget_options['dashboard_rss'] = $default_feeds; - update_option( 'dashboard_widget_options', $widget_options ); - //} - - foreach( $default_feeds as $key => $value ) { - $default_urls[] = $value['url']; + ); } - $cache_key = 'dash_' . md5( 'dashboard_rss' ); - delete_transient( $cache_key ); - - do_action( 'dashboard_news_beginning' ); - - wp_dashboard_cached_rss_widget( 'dashboard_rss', 'wp_dashboard_news_output', $default_urls ); - - do_action( 'dashboard_news_end' ); + wp_dashboard_cached_rss_widget( 'dashboard_primary', 'wp_dashboard_primary_output', $feeds ); } /** - * Display news feeds - * - * + * Display the WordPress news feeds. * * @since 3.8.0 - * */ -function wp_dashboard_news_output() { - $widgets = get_option( 'dashboard_widget_options' ); - - foreach( $widgets['dashboard_rss'] as $type => $args ) { +function wp_dashboard_primary_output( $widget_id, $feeds ) { + foreach( $feeds as $type => $args ) { $args['type'] = $type; echo '
'; - wp_widget_news_output( $args['url'], $args ); + if ( $type === 'plugins' ) { + wp_dashboard_plugins_output( $args['url'], $args ); + } else { + wp_widget_rss_output( $args['url'], $args ); + } echo "
"; } } /** - * Generate code for each news feed - * - * - * - * @since 3.8.0 + * Display plugins text for the WordPress news widget. * + * @since 2.5.0 */ -function wp_widget_news_output( $rss, $args = array() ) { - - // Regular RSS feeds - if ( isset( $args['type'] ) && 'plugins' != $args['type'] ) - return wp_widget_rss_output( $rss, $args ); - +function wp_dashboard_plugins_output( $rss, $args = array() ) { // Plugin feeds plus link to install them - if ( ! is_multisite() && current_user_can( 'install_plugins' ) ) { - $popular = fetch_feed( $args['url']['popular'] ); + $popular = fetch_feed( $args['url']['popular'] ); - if ( false === $plugin_slugs = get_transient( 'plugin_slugs' ) ) { - $plugin_slugs = array_keys( get_plugins() ); - set_transient( 'plugin_slugs', $plugin_slugs, DAY_IN_SECONDS ); - } + if ( false === $plugin_slugs = get_transient( 'plugin_slugs' ) ) { + $plugin_slugs = array_keys( get_plugins() ); + set_transient( 'plugin_slugs', $plugin_slugs, DAY_IN_SECONDS ); + } - echo ''; } /** diff --git a/src/wp-admin/includes/deprecated.php b/src/wp-admin/includes/deprecated.php index 78193bb097..e6d42abde8 100644 --- a/src/wp-admin/includes/deprecated.php +++ b/src/wp-admin/includes/deprecated.php @@ -730,7 +730,7 @@ function get_others_pending($user_id) { */ function wp_dashboard_quick_press_output() { _deprecated_function( __FUNCTION__, '3.2', 'wp_dashboard_quick_press()' ); - wp_dashboard_quick_draft(); + wp_dashboard_quick_press(); } /** diff --git a/src/wp-admin/js/dashboard.js b/src/wp-admin/js/dashboard.js index 34e6dad229..41cd61bd83 100644 --- a/src/wp-admin/js/dashboard.js +++ b/src/wp-admin/js/dashboard.js @@ -1,3 +1,4 @@ +/* global pagenow */ var ajaxWidgets, ajaxPopulateWidgets, quickPressLoad; jQuery(document).ready( function($) { @@ -28,9 +29,7 @@ jQuery(document).ready( function($) { }); // These widgets are sometimes populated via ajax - ajaxWidgets = [ - 'dashboard_rss' - ]; + ajaxWidgets = ['dashboard_primary']; ajaxPopulateWidgets = function(el) { function show(i, id) { @@ -38,7 +37,7 @@ jQuery(document).ready( function($) { if ( e.length ) { p = e.parent(); setTimeout( function(){ - p.load( ajaxurl + '?action=dashboard-widgets&widget=' + id, '', function() { + p.load( ajaxurl + '?action=dashboard-widgets&widget=' + id + '&pagenow=' + pagenow, '', function() { p.hide().slideDown('normal', function(){ $(this).css('display', ''); });