X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/58f607a1de715c9bca69340a4d6fb9e1b9c2bed2..refs/tags/wordpress-3.4:/wp-admin/includes/dashboard.php?ds=sidebyside diff --git a/wp-admin/includes/dashboard.php b/wp-admin/includes/dashboard.php index 8486581b..6e7d5f0d 100644 --- a/wp-admin/includes/dashboard.php +++ b/wp-admin/includes/dashboard.php @@ -1,6 +1,6 @@ 5, - ); + 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' ); } - $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 ( !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 - ); + 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_add_dashboard_widget( 'dashboard_incoming_links', __( 'Incoming Links' ), 'wp_dashboard_incoming_links', 'wp_dashboard_incoming_links_control' ); // WP Plugins Widget - if ( current_user_can( 'install_plugins' ) ) + 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 ( current_user_can('edit_posts') ) + if ( is_blog_admin() && current_user_can('edit_posts') ) wp_add_dashboard_widget( 'dashboard_quick_press', __( 'QuickPress' ), 'wp_dashboard_quick_press' ); // Recent Drafts - if ( current_user_can('edit_posts') ) + 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/' ) ), + '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, @@ -82,8 +101,8 @@ function wp_dashboard_setup() { 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/' ) ), + '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, @@ -94,10 +113,17 @@ function wp_dashboard_setup() { wp_add_dashboard_widget( 'dashboard_secondary', $widget_options['dashboard_secondary']['title'], 'wp_dashboard_secondary', 'wp_dashboard_secondary_control' ); // Hook to register new widgets - do_action( 'wp_dashboard_setup' ); - // Filter widget order - $dashboard_widgets = apply_filters( 'wp_dashboard_widgets', array() ); + 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'] . " " . __('View all') . ''; @@ -115,90 +141,81 @@ function wp_dashboard_setup() { if ( $update ) update_option( 'dashboard_widget_options', $widget_options ); - do_action('do_meta_boxes', 'dashboard', 'normal', ''); - do_action('do_meta_boxes', 'dashboard', 'side', ''); + do_action('do_meta_boxes', $screen->id, 'normal', ''); + do_action('do_meta_boxes', $screen->id, 'side', ''); } function wp_add_dashboard_widget( $widget_id, $widget_name, $callback, $control_callback = null ) { + $screen = get_current_screen(); global $wp_dashboard_control_callbacks; + if ( $control_callback && current_user_can( 'edit_dashboard' ) && is_callable( $control_callback ) ) { $wp_dashboard_control_callbacks[$widget_id] = $control_callback; if ( isset( $_GET['edit'] ) && $widget_id == $_GET['edit'] ) { list($url) = explode( '#', add_query_arg( 'edit', false ), 2 ); $widget_name .= ' ' . __( 'Cancel' ) . ''; - add_meta_box( $widget_id, $widget_name, '_wp_dashboard_control_callback', 'dashboard', 'normal', 'core' ); - return; + $callback = '_wp_dashboard_control_callback'; + } else { + list($url) = explode( '#', add_query_arg( 'edit', $widget_id ), 2 ); + $widget_name .= ' ' . __( 'Configure' ) . ''; } - list($url) = explode( '#', add_query_arg( 'edit', $widget_id ), 2 ); - $widget_name .= ' ' . __( 'Configure' ) . ''; } - $side_widgets = array('dashboard_quick_press', 'dashboard_recent_drafts', 'dashboard_primary', 'dashboard_secondary'); + + if ( is_blog_admin () ) + $side_widgets = array('dashboard_quick_press', 'dashboard_recent_drafts', 'dashboard_primary', 'dashboard_secondary'); + else if (is_network_admin() ) + $side_widgets = array('dashboard_primary', 'dashboard_secondary'); + else + $side_widgets = array(); + $location = 'normal'; if ( in_array($widget_id, $side_widgets) ) $location = 'side'; - add_meta_box( $widget_id, $widget_name , $callback, 'dashboard', $location, 'core' ); + + $priority = 'core'; + if ( 'dashboard_browser_nag' === $widget_id ) + $priority = 'high'; + + add_meta_box( $widget_id, $widget_name, $callback, $screen, $location, $priority ); } function _wp_dashboard_control_callback( $dashboard, $meta_box ) { echo '
'; wp_dashboard_trigger_widget_control( $meta_box['id'] ); - echo '

'; - + echo ''; + submit_button( __('Submit') ); echo '
'; } /** * Displays the dashboard. * - * @since unknown + * @since 2.5.0 */ function wp_dashboard() { - global $screen_layout_columns; - - $hide2 = $hide3 = $hide4 = ''; - switch ( $screen_layout_columns ) { - case 4: - $width = 'width:24.5%;'; - break; - case 3: - $width = 'width:32.67%;'; - $hide4 = 'display:none;'; - break; - case 2: - $width = 'width:49%;'; - $hide3 = $hide4 = 'display:none;'; - break; - default: - $width = 'width:98%;'; - $hide2 = $hide3 = $hide4 = 'display:none;'; - } -?> -
-\n"; - do_meta_boxes( 'dashboard', 'normal', '' ); - - echo "\t
\n"; - do_meta_boxes( 'dashboard', 'side', '' ); + $screen = get_current_screen(); + $class = 'columns-' . get_current_screen()->get_columns(); - echo "\t
\n"; - do_meta_boxes( 'dashboard', 'column3', '' ); - - echo "\t
\n"; - do_meta_boxes( 'dashboard', 'column4', '' ); ?> -
+
+
+ id, 'normal', '' ); ?> +
+
+ id, 'side', '' ); ?> +
+
+ id, 'column3', '' ); ?> +
+
+ id, 'column4', '' ); ?> +
+
-
-

-

-
-'; /* TODO: Show status breakdown on hover - if ( $can_edit_pages && !empty($num_pages->publish) ) { // how many pages is not exposed in feeds. Don't show if !current_user_can + if ( $can_edit_pages && !empty($num_pages->publish) ) { // how many pages is not exposed in feeds. Don't show if !current_user_can $post_type_texts[] = ''.sprintf( _n( '%s page', '%s pages', $num_pages->publish ), number_format_i18n( $num_pages->publish ) ).''; } if ( $can_edit_posts && !empty($num_posts->draft) ) { @@ -285,7 +302,6 @@ function wp_dashboard_right_now() { do_action('right_now_content_table_end'); echo "\n\t\n\t"; - echo "\n\t".'
'; echo "\n\t".'

' . __('Discussion') . '

'."\n\t".''; echo "\n\t".''; @@ -342,40 +358,48 @@ function wp_dashboard_right_now() { echo "\n\t
\n\t
"; echo "\n\t".'
'; - $ct = current_theme_info(); + $theme = wp_get_theme(); echo "\n\t

"; - if ( !empty($wp_registered_sidebars) ) { + + if ( $theme->errors() ) { + if ( ! is_multisite() || is_super_admin() ) + echo '' . __('ERROR: The themes directory is either empty or doesn’t exist. Please check your installation.') . ''; + } elseif ( ! empty($wp_registered_sidebars) ) { $sidebars_widgets = wp_get_sidebars_widgets(); $num_widgets = 0; foreach ( (array) $sidebars_widgets as $k => $v ) { - if ( 'wp_inactive_widgets' == $k ) + if ( 'wp_inactive_widgets' == $k || 'orphaned_widgets' == substr( $k, 0, 16 ) ) continue; if ( is_array($v) ) $num_widgets = $num_widgets + count($v); } $num = number_format_i18n( $num_widgets ); - $switch_themes = $ct->title; - if ( current_user_can( 'switch_themes') ) { - echo '' . __('Change Theme') . ''; + $switch_themes = $theme->display('Name'); + if ( current_user_can( 'switch_themes') ) $switch_themes = '' . $switch_themes . ''; - } if ( current_user_can( 'edit_theme_options' ) ) { printf(_n('Theme %1$s with %2$s Widget', 'Theme %1$s with %2$s Widgets', $num_widgets), $switch_themes, $num); } else { printf(_n('Theme %1$s with %2$s Widget', 'Theme %1$s with %2$s Widgets', $num_widgets), $switch_themes, $num); } } else { - if ( current_user_can( 'switch_themes' ) ) { - echo '' . __('Change Theme') . ''; - printf( __('Theme %1$s'), $ct->title ); - } else { - printf( __('Theme %1$s'), $ct->title ); - } + if ( current_user_can( 'switch_themes' ) ) + printf( __('Theme %1$s'), $theme->display('Name') ); + else + printf( __('Theme %1$s'), $theme->display('Name') ); } echo '

'; + // Check if search engines are blocked. + if ( !is_network_admin() && !is_user_admin() && current_user_can('manage_options') && '1' != get_option('blog_public') ) { + $title = apply_filters('privacy_on_link_title', __('Your site is asking search engines not to index its content') ); + $content = apply_filters('privacy_on_link_text', __('Search Engines Blocked') ); + + echo "

$content

"; + } + update_right_now_message(); echo "\n\t".'
'; @@ -383,7 +407,54 @@ function wp_dashboard_right_now() { do_action( 'activity_box_end' ); } -function wp_dashboard_quick_press_output() { +function wp_network_dashboard_right_now() { + $actions = array(); + if ( current_user_can('create_sites') ) + $actions['create-site'] = '' . __( 'Create a New Site' ) . ''; + if ( current_user_can('create_users') ) + $actions['create-user'] = '' . __( 'Create a New User' ) . ''; + + $c_users = get_user_count(); + $c_blogs = get_blog_count(); + + $user_text = sprintf( _n( '%s user', '%s users', $c_users ), number_format_i18n( $c_users ) ); + $blog_text = sprintf( _n( '%s site', '%s sites', $c_blogs ), number_format_i18n( $c_blogs ) ); + + $sentence = sprintf( __( 'You have %1$s and %2$s.' ), $blog_text, $user_text ); + + if ( $actions ) { + echo ''; + } +?> +
+ +

+ + +
+

+ + 'submit_users' ) ); ?> +

+
+ +
+

+ + 'submit_sites' ) ); ?> +

+
+ -
- +
+

- +
@@ -457,14 +528,14 @@ function wp_dashboard_quick_press_output() {

- + - + 'save-post', 'tabindex'=> 4 ) ); ?> - +

@@ -476,10 +547,6 @@ function wp_dashboard_quick_press_output() { wp_dashboard_recent_drafts( $drafts ); } -function wp_dashboard_quick_press() { - echo '

' . __( 'Loading…' ) . '

' . __('This widget requires JavaScript.') . '

'; -} - function wp_dashboard_recent_drafts( $drafts = false ) { if ( !$drafts ) { $drafts_query = new WP_Query( array( @@ -507,7 +574,7 @@ function wp_dashboard_recent_drafts( $drafts = false ) { -

+

get_results( "SELECT * FROM $wpdb->comments c LEFT JOIN $wpdb->posts p ON c.comment_post_ID = p.ID WHERE p.post_status != 'trash' ORDER BY c.comment_date_gmt DESC LIMIT $start, 50" ) ) { + $comments_query = array( 'number' => $total_items * 5, 'offset' => 0 ); + if ( ! current_user_can( 'edit_posts' ) ) + $comments_query['status'] = 'approve'; + while ( count( $comments ) < $total_items && $possible = get_comments( $comments_query ) ) { foreach ( $possible as $comment ) { - if ( count( $comments ) >= $total_items ) - break; - if ( in_array( $comment->comment_approved, $allowed_states ) && current_user_can( 'read_post', $comment->comment_post_ID ) ) - $comments[] = $comment; + if ( ! current_user_can( 'read_post', $comment->comment_post_ID ) ) + continue; + $comments[] = $comment; + if ( count( $comments ) == $total_items ) + break 2; } - - $start = $start + 50; + $comments_query['offset'] += $comments_query['number']; + $comments_query['number'] = $total_items * 10; } - if ( $comments ) : -?> - -
-'; foreach ( $comments as $comment ) _wp_dashboard_recent_comments_row( $comment ); -?> - -
+ echo '
'; - -

-views(); wp_comment_reply( -1, false, 'dashboard', false ); wp_comment_trashnotice(); - - else : -?> - -

- -' . __( 'No comments yet.' ) . '

'; + } } function _wp_dashboard_recent_comments_row( &$comment, $show_date = true ) { @@ -586,7 +638,7 @@ function _wp_dashboard_recent_comments_row( &$comment, $show_date = true ) { $comment_link = '#'; $actions_string = ''; - if ( current_user_can('edit_post', $comment->comment_post_ID) ) { + if ( current_user_can( 'edit_comment', $comment->comment_ID ) ) { // preorder it: Approve | Reply | Edit | Spam | Trash $actions = array( 'approve' => '', 'unapprove' => '', @@ -605,15 +657,15 @@ function _wp_dashboard_recent_comments_row( &$comment, $show_date = true ) { $trash_url = esc_url( "comment.php?action=trashcomment&p=$comment->comment_post_ID&c=$comment->comment_ID&$del_nonce" ); $delete_url = esc_url( "comment.php?action=deletecomment&p=$comment->comment_post_ID&c=$comment->comment_ID&$del_nonce" ); - $actions['approve'] = "" . __( 'Approve' ) . ''; - $actions['unapprove'] = "" . __( 'Unapprove' ) . ''; - $actions['edit'] = "". __('Edit') . ''; - $actions['reply'] = '' . __('Reply') . ''; - $actions['spam'] = "" . /* translators: mark as spam link */ _x( 'Spam', 'verb' ) . ''; + $actions['approve'] = "" . __( 'Approve' ) . ''; + $actions['unapprove'] = "" . __( 'Unapprove' ) . ''; + $actions['edit'] = "". __('Edit') . ''; + $actions['reply'] = '' . __('Reply') . ''; + $actions['spam'] = "" . /* translators: mark as spam link */ _x( 'Spam', 'verb' ) . ''; if ( !EMPTY_TRASH_DAYS ) $actions['delete'] = "" . __('Delete Permanently') . ''; else - $actions['trash'] = "" . _x('Trash', 'verb') . ''; + $actions['trash'] = "" . _x('Trash', 'verb') . ''; $actions = apply_filters( 'comment_row_actions', array_filter($actions), $comment ); @@ -683,9 +735,7 @@ function wp_dashboard_recent_comments_control() { $widget_options['dashboard_recent_comments'] = array(); if ( 'POST' == $_SERVER['REQUEST_METHOD'] && isset($_POST['widget-recent-comments']) ) { - $number = (int) stripslashes($_POST['widget-recent-comments']['items']); - if ( $number < 1 || $number > 30 ) - $number = 5; + $number = absint( $_POST['widget-recent-comments']['items'] ); $widget_options['dashboard_recent_comments']['items'] = $number; update_option( 'dashboard_widget_options', $widget_options ); } @@ -693,17 +743,17 @@ function wp_dashboard_recent_comments_control() { $number = isset( $widget_options['dashboard_recent_comments']['items'] ) ? (int) $widget_options['dashboard_recent_comments']['items'] : ''; echo '

'; - echo ' ' . __( '(at most 30)' ) . '

'; + echo '

'; } function wp_dashboard_incoming_links() { - echo '

' . __( 'Loading…' ) . '

' . __('This widget requires JavaScript.') . '

'; + wp_dashboard_cached_rss_widget( 'dashboard_incoming_links', 'wp_dashboard_incoming_links_output' ); } /** * Display incoming links dashboard widget content. * - * @since unknown + * @since 2.5.0 */ function wp_dashboard_incoming_links_output() { $widgets = get_option( 'dashboard_widget_options' ); @@ -763,8 +813,8 @@ function wp_dashboard_incoming_links_output() { /* translators: incoming links feed, %1$s is other person, %3$s is content */ $text = __( '%1$s linked here saying, "%3$s"' ); - if ( $show_date ) { - if ( $show_author || $show_summary ) + if ( !empty($show_date) ) { + if ( !empty($show_author) || !empty($show_summary) ) /* translators: incoming links feed, %4$s is the date */ $text .= ' ' . __( 'on %4$s' ); $date = esc_html( strip_tags( $item->get_date() ) ); @@ -785,7 +835,7 @@ function wp_dashboard_incoming_links_control() { } function wp_dashboard_primary() { - echo '

' . __( 'Loading…' ) . '

' . __('This widget requires JavaScript.') . '

'; + wp_dashboard_cached_rss_widget( 'dashboard_primary', 'wp_dashboard_rss_output' ); } function wp_dashboard_primary_control() { @@ -795,9 +845,9 @@ function wp_dashboard_primary_control() { /** * {@internal Missing Short Description}} * - * @since unknown + * @since 2.5.0 * - * @param int $widget_id + * @param string $widget_id */ function wp_dashboard_rss_output( $widget_id ) { $widgets = get_option( 'dashboard_widget_options' ); @@ -807,7 +857,7 @@ function wp_dashboard_rss_output( $widget_id ) { } function wp_dashboard_secondary() { - echo '

' . __( 'Loading…' ) . '

' . __('This widget requires JavaScript.') . '

'; + wp_dashboard_cached_rss_widget( 'dashboard_secondary', 'wp_dashboard_secondary_output' ); } function wp_dashboard_secondary_control() { @@ -817,7 +867,7 @@ function wp_dashboard_secondary_control() { /** * Display secondary dashboard RSS widget feed. * - * @since unknown + * @since 2.5.0 * * @return unknown */ @@ -846,25 +896,27 @@ function wp_dashboard_secondary_output() { } function wp_dashboard_plugins() { - echo '

' . __( 'Loading…' ) . '

' . __('This widget requires JavaScript.') . '

'; + wp_dashboard_cached_rss_widget( 'dashboard_plugins', 'wp_dashboard_plugins_output', array( + 'http://wordpress.org/extend/plugins/rss/browse/popular/', + 'http://wordpress.org/extend/plugins/rss/browse/new/' + ) ); } /** * Display plugins most popular, newest plugins, and recently updated widget text. * - * @since unknown + * @since 2.5.0 */ function wp_dashboard_plugins_output() { $popular = fetch_feed( 'http://wordpress.org/extend/plugins/rss/browse/popular/' ); $new = fetch_feed( 'http://wordpress.org/extend/plugins/rss/browse/new/' ); - $updated = fetch_feed( 'http://wordpress.org/extend/plugins/rss/browse/updated/' ); if ( false === $plugin_slugs = get_transient( 'plugin_slugs' ) ) { $plugin_slugs = array_keys( get_plugins() ); set_transient( 'plugin_slugs', $plugin_slugs, 86400 ); } - foreach ( array( 'popular' => __('Most Popular'), 'new' => __('Newest Plugins'), 'updated' => __('Recently Updated') ) as $feed => $label ) { + foreach ( array( 'popular' => __('Most Popular'), 'new' => __('Newest Plugins') ) as $feed => $label ) { if ( is_wp_error($$feed) || !$$feed->get_item_quantity() ) continue; @@ -934,42 +986,47 @@ function wp_dashboard_plugins_output() { * Checks to see if all of the feed url in $check_urls are cached. * * If $check_urls is empty, look for the rss feed url found in the dashboard - * widget optios of $widget_id. If cached, call $callback, a function that + * widget options of $widget_id. If cached, call $callback, a function that * echoes out output for this widget. If not cache, echo a "Loading..." stub * which is later replaced by AJAX call (see top of /wp-admin/index.php) * - * @since unknown + * @since 2.5.0 * - * @param int $widget_id + * @param string $widget_id * @param callback $callback * @param array $check_urls RSS feeds * @return bool False on failure. True on success. */ function wp_dashboard_cached_rss_widget( $widget_id, $callback, $check_urls = array() ) { - $loading = '

' . __( 'Loading…' ) . '

'; + $loading = '

' . __( 'Loading…' ) . '

' . __( 'This widget requires JavaScript.' ) . '

'; + $doing_ajax = ( defined('DOING_AJAX') && DOING_AJAX ); if ( empty($check_urls) ) { $widgets = get_option( 'dashboard_widget_options' ); - if ( empty($widgets[$widget_id]['url']) ) { + if ( empty($widgets[$widget_id]['url']) && ! $doing_ajax ) { echo $loading; return false; } $check_urls = array( $widgets[$widget_id]['url'] ); } - include_once ABSPATH . WPINC . '/class-feed.php'; - foreach ( $check_urls as $check_url ) { - $cache = new WP_Feed_Cache_Transient('', md5($check_url), ''); - if ( ! $cache->load() ) { - echo $loading; - return false; - } + $cache_key = 'dash_' . md5( $widget_id ); + if ( false !== ( $output = get_transient( $cache_key ) ) ) { + echo $output; + return true; + } + + if ( ! $doing_ajax ) { + echo $loading; + return false; } if ( $callback && is_callable( $callback ) ) { $args = array_slice( func_get_args(), 2 ); array_unshift( $args, $widget_id ); + ob_start(); call_user_func_array( $callback, $args ); + set_transient( $cache_key, ob_get_flush(), 43200); // Default lifetime in cache of 12 hours (same as the feeds) } return true; @@ -981,7 +1038,7 @@ function wp_dashboard_cached_rss_widget( $widget_id, $callback, $check_urls = ar /** * Calls widget control callback. * - * @since unknown + * @since 2.5.0 * * @param int $widget_control_id Registered Widget ID. */ @@ -999,10 +1056,10 @@ function wp_dashboard_trigger_widget_control( $widget_control_id = false ) { * Sets up $args to be used as input to wp_widget_rss_form(). Handles POST data * from RSS-type widgets. * - * @since unknown + * @since 2.5.0 * - * @param string widget_id - * @param array form_inputs + * @param string $widget_id + * @param array $form_inputs */ function wp_dashboard_rss_control( $widget_id, $form_inputs = array() ) { if ( !$widget_options = get_option( 'dashboard_widget_options' ) ) @@ -1017,7 +1074,7 @@ function wp_dashboard_rss_control( $widget_id, $form_inputs = array() ) { if ( 'POST' == $_SERVER['REQUEST_METHOD'] && isset($_POST['widget-rss'][$number]) ) { $_POST['widget-rss'][$number] = stripslashes_deep( $_POST['widget-rss'][$number] ); $widget_options[$widget_id] = wp_widget_rss_process( $_POST['widget-rss'][$number] ); - // title is optional. If black, fill it if possible + // title is optional. If black, fill it if possible if ( !$widget_options[$widget_id]['title'] && isset($_POST['widget-rss'][$number]['title']) ) { $rss = fetch_feed($widget_options[$widget_id]['url']); if ( is_wp_error($rss) ) { @@ -1029,14 +1086,241 @@ function wp_dashboard_rss_control( $widget_id, $form_inputs = array() ) { } } update_option( 'dashboard_widget_options', $widget_options ); + $cache_key = 'dash_' . md5( $widget_id ); + delete_transient( $cache_key ); } wp_widget_rss_form( $widget_options[$widget_id], $form_inputs ); } +// Display File upload quota on dashboard +function wp_dashboard_quota() { + if ( !is_multisite() || !current_user_can('upload_files') || get_site_option( 'upload_space_check_disabled' ) ) + return true; + + $quota = get_space_allowed(); + $used = get_dirsize( BLOGUPLOADDIR ) / 1024 / 1024; + + if ( $used > $quota ) + $percentused = '100'; + else + $percentused = ( $used / $quota ) * 100; + $used_color = ( $percentused >= 70 ) ? ' spam' : ''; + $used = round( $used, 2 ); + $percentused = number_format( $percentused ); + + ?> +

+
+ + + + + +
%2$sMB' ), esc_url( admin_url( 'upload.php' ) ), $quota ); ?>
+
+
+ + + + + +
%2$sMB (%3$s%%)' ), esc_url( admin_url( 'upload.php' ) ), $used, $percentused ); ?>
+
+
+ %s. Using an outdated browser makes your computer unsafe. For the best WordPress experience, please update your browser." ), esc_attr( $response['update_url'] ), esc_html( $response['name'] ) ); + } else { + $msg = sprintf( __( "It looks like you're using an old version of %s. For the best WordPress experience, please update your browser." ), esc_attr( $response['update_url'] ), esc_html( $response['name'] ) ); + } + + $browser_nag_class = ''; + if ( !empty( $response['img_src'] ) ) { + $img_src = ( is_ssl() && ! empty( $response['img_src_ssl'] ) )? $response['img_src_ssl'] : $response['img_src']; + + $notice .= '
'; + $browser_nag_class = ' has-browser-icon'; + } + $notice .= "

{$msg}

"; + + $browsehappy = 'http://browsehappy.com/'; + $locale = get_locale(); + if ( 'en_US' !== $locale ) + $browsehappy = add_query_arg( 'locale', $locale, $browsehappy ); + + $notice .= '

' . sprintf( __( 'Update %2$s or learn how to browse happy' ), esc_attr( $response['update_url'] ), esc_html( $response['name'] ), esc_url( $browsehappy ) ) . '

'; + $notice .= '

' . __( 'Dismiss' ) . '

'; + $notice .= '
'; + } + + echo apply_filters( 'browse-happy-notice', $notice, $response ); +} + +function dashboard_browser_nag_class( $classes ) { + $response = wp_check_browser_version(); + + if ( $response && $response['insecure'] ) + $classes[] = 'browser-insecure'; + + return $classes; +} + +/** + * Check if the user needs a browser update + * + * @since 3.2.0 + * + * @return array|bool False on failure, array of browser data on success. + */ +function wp_check_browser_version() { + if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) + return false; + + $key = md5( $_SERVER['HTTP_USER_AGENT'] ); + + if ( false === ($response = get_site_transient('browser_' . $key) ) ) { + global $wp_version; + + $options = array( + 'body' => array( 'useragent' => $_SERVER['HTTP_USER_AGENT'] ), + 'user-agent' => 'WordPress/' . $wp_version . '; ' . home_url() + ); + + $response = wp_remote_post( 'http://api.wordpress.org/core/browse-happy/1.0/', $options ); + + if ( is_wp_error( $response ) || 200 != wp_remote_retrieve_response_code( $response ) ) + return false; + + /** + * Response should be an array with: + * 'name' - string - A user friendly browser name + * 'version' - string - The most recent version of the browser + * 'current_version' - string - The version of the browser the user is using + * 'upgrade' - boolean - Whether the browser needs an upgrade + * 'insecure' - boolean - Whether the browser is deemed insecure + * 'upgrade_url' - string - The url to visit to upgrade + * 'img_src' - string - An image representing the browser + * 'img_src_ssl' - string - An image (over SSL) representing the browser + */ + $response = maybe_unserialize( wp_remote_retrieve_body( $response ) ); + + if ( ! is_array( $response ) ) + return false; + + set_site_transient( 'browser_' . $key, $response, 604800 ); // cache for 1 week + } + + return $response; +} + /** * Empty function usable by plugins to output empty dashboard widget (to be populated later by JS). */ function wp_dashboard_empty() {} -?> +/** + * Displays a welcome panel to introduce users to WordPress. + * + * @since 3.3.0 + */ +function wp_welcome_panel() { + global $wp_version; + + if ( ! current_user_can( 'edit_theme_options' ) ) + return; + + $classes = 'welcome-panel'; + + $option = get_user_meta( get_current_user_id(), 'show_welcome_panel', true ); + // 0 = hide, 1 = toggled to show or single site creator, 2 = multisite site owner + $hide = 0 == $option || ( 2 == $option && wp_get_current_user()->user_email != get_option( 'admin_email' ) ); + if ( $hide ) + $classes .= ' hidden'; + + list( $display_version ) = explode( '-', $wp_version ); + ?> +
+ + +
+ +
+

+

First Steps with WordPress. If you’d rather dive right in, here are a few things most people do first when they set up a new WordPress site. If you need help, use the Help tabs in the upper right corner to get information on how to use your current screen and where to go for more assistance.' ); ?>

+
+
+

+

+
    +
  • Choose your privacy setting' ), esc_url( admin_url('options-privacy.php') ) ); ?>
  • +
  • Select your tagline and time zone' ), esc_url( admin_url('options-general.php') ) ); ?>
  • +
  • Turn comments on or off' ), esc_url( admin_url('options-discussion.php') ) ); ?>
  • +
  • Fill in your profile' ), esc_url( admin_url('profile.php') ) ); ?>
  • +
+
+
+

+

+
    +
  • sample page and post' ), esc_url( get_permalink( 2 ) ), esc_url( get_permalink( 1 ) ) ); ?>
  • +
  • sample page and post' ), esc_url( admin_url('edit.php?post_type=page') ), esc_url( admin_url('edit.php') ) ); ?>
  • +
  • Create an About Me page' ), esc_url( admin_url('edit.php?post_type=page') ) ); ?>
  • +
  • Write your first post' ), esc_url( admin_url('post-new.php') ) ); ?>
  • +
+
+
+

+ errors() ) : + echo '

'; + printf( __( 'Install a theme to get started customizing your site.' ), esc_url( admin_url( 'themes.php' ) ) ); + echo '

'; + else: + $customize_links = array(); + if ( 'twentyeleven' == $theme->get_stylesheet() ) + $customize_links[] = sprintf( __( 'Choose light or dark' ), esc_url( admin_url( 'themes.php?page=theme_options' ) ) ); + + if ( current_theme_supports( 'custom-background' ) ) + $customize_links[] = sprintf( __( 'Set a background color' ), esc_url( admin_url( 'themes.php?page=custom-background' ) ) ); + + if ( current_theme_supports( 'custom-header' ) ) + $customize_links[] = sprintf( __( 'Select a new header image' ), esc_url( admin_url( 'themes.php?page=custom-header' ) ) ); + + if ( current_theme_supports( 'widgets' ) ) + $customize_links[] = sprintf( __( 'Add some widgets' ), esc_url( admin_url( 'widgets.php' ) ) ); + + if ( ! empty( $customize_links ) ) { + echo '

'; + printf( __( 'Use the current theme — %1$s — or choose a new one. If you stick with %1$s, here are a few ways to make your site look unique.' ), $theme->display('Name'), esc_url( admin_url( 'themes.php' ) ) ); + echo '

'; + ?> +
    + +
  • + +
+ '; + printf( __( 'Use the current theme — %1$s — or choose a new one.' ), $theme->display('Name'), esc_url( admin_url( 'themes.php' ) ) ); + echo '

'; + } + endif; ?> +
+
+

Dismiss this message.' ), esc_url( admin_url( '?welcome=0' ) ) ); ?>

+
+
+