diff -r c7c34916027a -r 177826044cd9 wp/wp-admin/includes/dashboard.php --- a/wp/wp-admin/includes/dashboard.php Mon Oct 14 18:06:33 2019 +0200 +++ b/wp/wp-admin/includes/dashboard.php Mon Oct 14 18:28:13 2019 +0200 @@ -20,38 +20,36 @@ 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(); + $screen = get_current_screen(); /* Register Widgets and Controls */ - // Try Gutenberg - - // If Gutenberg isn't activated, only show the panel to users who can install and activate it. - $plugins = get_plugins(); - if ( is_plugin_inactive( 'gutenberg/gutenberg.php' ) && ! current_user_can( 'install_plugins' ) ) { - remove_action( 'try_gutenberg_panel', 'wp_try_gutenberg_panel' ); - } - // If Gutenberg is activated, only show it to users who can use it. - if ( is_plugin_active( 'gutenberg/gutenberg.php' ) && ! current_user_can( 'edit_posts' ) ) { - remove_action( 'try_gutenberg_panel', 'wp_try_gutenberg_panel' ); - } - $response = wp_check_browser_version(); if ( $response && $response['upgrade'] ) { add_filter( 'postbox_classes_dashboard_dashboard_browser_nag', 'dashboard_browser_nag_class' ); - if ( $response['insecure'] ) + if ( $response['insecure'] ) { wp_add_dashboard_widget( 'dashboard_browser_nag', __( 'You are using an insecure browser!' ), 'wp_dashboard_browser_nag' ); - else + } else { wp_add_dashboard_widget( 'dashboard_browser_nag', __( 'Your browser is out of date!' ), 'wp_dashboard_browser_nag' ); + } + } + + // PHP Version. + $response = wp_check_php_version(); + if ( $response && isset( $response['is_acceptable'] ) && ! $response['is_acceptable'] && current_user_can( 'update_php' ) ) { + add_filter( 'postbox_classes_dashboard_dashboard_php_nag', 'dashboard_php_nag_class' ); + wp_add_dashboard_widget( 'dashboard_php_nag', __( 'PHP Update Required' ), 'wp_dashboard_php_nag' ); } // Right Now - if ( is_blog_admin() && current_user_can('edit_posts') ) + if ( is_blog_admin() && current_user_can( 'edit_posts' ) ) { wp_add_dashboard_widget( 'dashboard_right_now', __( 'At a Glance' ), 'wp_dashboard_right_now' ); + } - if ( is_network_admin() ) + if ( is_network_admin() ) { wp_add_dashboard_widget( 'network_dashboard_right_now', __( 'Right Now' ), 'wp_network_dashboard_right_now' ); + } // Activity Widget if ( is_blog_admin() ) { @@ -81,7 +79,7 @@ * * @since 3.1.0 * - * @param array $dashboard_widgets An array of dashboard widgets. + * @param string[] $dashboard_widgets An array of dashboard widget IDs. */ $dashboard_widgets = apply_filters( 'wp_network_dashboard_widgets', array() ); } elseif ( is_user_admin() ) { @@ -98,7 +96,7 @@ * * @since 3.1.0 * - * @param array $dashboard_widgets An array of dashboard widgets. + * @param string[] $dashboard_widgets An array of dashboard widget IDs. */ $dashboard_widgets = apply_filters( 'wp_user_dashboard_widgets', array() ); } else { @@ -115,17 +113,17 @@ * * @since 2.5.0 * - * @param array $dashboard_widgets An array of dashboard widgets. + * @param string[] $dashboard_widgets An array of dashboard widget IDs. */ $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') . ''; - wp_add_dashboard_widget( $widget_id, $name, $wp_registered_widgets[$widget_id]['callback'], $wp_registered_widget_controls[$widget_id]['callback'] ); + $name = empty( $wp_registered_widgets[ $widget_id ]['all_link'] ) ? $wp_registered_widgets[ $widget_id ]['name'] : $wp_registered_widgets[ $widget_id ]['name'] . " " . __( 'View all' ) . ''; + 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']) ) { + 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'] ); @@ -134,10 +132,10 @@ exit; } - /** This action is documented in wp-admin/edit-form-advanced.php */ + /** This action is documented in wp-admin/includes/meta-boxes.php */ do_action( 'do_meta_boxes', $screen->id, 'normal', '' ); - /** This action is documented in wp-admin/edit-form-advanced.php */ + /** This action is documented in wp-admin/includes/meta-boxes.php */ do_action( 'do_meta_boxes', $screen->id, 'side', '' ); } @@ -164,18 +162,18 @@ if ( is_null( $callback_args ) ) { $callback_args = $private_callback_args; - } else if ( is_array( $callback_args ) ) { + } elseif ( is_array( $callback_args ) ) { $callback_args = array_merge( $callback_args, $private_callback_args ); } if ( $control_callback && current_user_can( 'edit_dashboard' ) && is_callable( $control_callback ) ) { - $wp_dashboard_control_callbacks[$widget_id] = $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 ); + list($url) = explode( '#', add_query_arg( 'edit', false ), 2 ); $widget_name .= ' ' . __( 'Cancel' ) . ''; - $callback = '_wp_dashboard_control_callback'; + $callback = '_wp_dashboard_control_callback'; } else { - list($url) = explode( '#', add_query_arg( 'edit', $widget_id ), 2 ); + list($url) = explode( '#', add_query_arg( 'edit', $widget_id ), 2 ); $widget_name .= ' ' . __( 'Configure' ) . ''; } } @@ -183,12 +181,16 @@ $side_widgets = array( 'dashboard_quick_press', 'dashboard_primary' ); $location = 'normal'; - if ( in_array($widget_id, $side_widgets) ) + if ( in_array( $widget_id, $side_widgets ) ) { $location = 'side'; + } + + $high_priority_widgets = array( 'dashboard_browser_nag', 'dashboard_php_nag' ); $priority = 'core'; - if ( 'dashboard_browser_nag' === $widget_id ) + if ( in_array( $widget_id, $high_priority_widgets, true ) ) { $priority = 'high'; + } add_meta_box( $widget_id, $widget_name, $callback, $screen, $location, $priority, $callback_args ); } @@ -206,8 +208,8 @@ echo '
'; wp_dashboard_trigger_widget_control( $meta_box['id'] ); wp_nonce_field( 'edit-dashboard-widget_' . $meta_box['id'], 'dashboard-widget-nonce' ); - echo ''; - submit_button( __('Submit') ); + echo ''; + submit_button( __( 'Submit' ) ); echo '
'; } @@ -217,14 +219,14 @@ * @since 2.5.0 */ function wp_dashboard() { - $screen = get_current_screen(); - $columns = absint( $screen->get_columns() ); + $screen = get_current_screen(); + $columns = absint( $screen->get_columns() ); $columns_css = ''; if ( $columns ) { $columns_css = " columns-$columns"; } -?> + ?>
id, 'normal', '' ); ?> @@ -240,7 +242,7 @@
- + ?>
\n
"; } @@ -614,8 +617,8 @@ if ( $comment->comment_post_ID > 0 ) { $comment_post_title = _draft_or_post_title( $comment->comment_post_ID ); - $comment_post_url = get_the_permalink( $comment->comment_post_ID ); - $comment_post_link = "$comment_post_title"; + $comment_post_url = get_the_permalink( $comment->comment_post_ID ); + $comment_post_link = "$comment_post_title"; } else { $comment_post_link = ''; } @@ -624,33 +627,35 @@ if ( current_user_can( 'edit_comment', $comment->comment_ID ) ) { // Pre-order it: Approve | Reply | Edit | Spam | Trash. $actions = array( - 'approve' => '', 'unapprove' => '', - 'reply' => '', - 'edit' => '', - 'spam' => '', - 'trash' => '', 'delete' => '', - 'view' => '', + 'approve' => '', + 'unapprove' => '', + 'reply' => '', + 'edit' => '', + 'spam' => '', + 'trash' => '', + 'delete' => '', + 'view' => '', ); - $del_nonce = esc_html( '_wpnonce=' . wp_create_nonce( "delete-comment_$comment->comment_ID" ) ); + $del_nonce = esc_html( '_wpnonce=' . wp_create_nonce( "delete-comment_$comment->comment_ID" ) ); $approve_nonce = esc_html( '_wpnonce=' . wp_create_nonce( "approve-comment_$comment->comment_ID" ) ); - $approve_url = esc_url( "comment.php?action=approvecomment&p=$comment->comment_post_ID&c=$comment->comment_ID&$approve_nonce" ); + $approve_url = esc_url( "comment.php?action=approvecomment&p=$comment->comment_post_ID&c=$comment->comment_ID&$approve_nonce" ); $unapprove_url = esc_url( "comment.php?action=unapprovecomment&p=$comment->comment_post_ID&c=$comment->comment_ID&$approve_nonce" ); - $spam_url = esc_url( "comment.php?action=spamcomment&p=$comment->comment_post_ID&c=$comment->comment_ID&$del_nonce" ); - $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" ); + $spam_url = esc_url( "comment.php?action=spamcomment&p=$comment->comment_post_ID&c=$comment->comment_ID&$del_nonce" ); + $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'] = ''; + $actions['spam'] = "" . /* translators: mark as spam link */ _x( 'Spam', 'verb' ) . ''; if ( ! EMPTY_TRASH_DAYS ) { - $actions['delete'] = "" . __( 'Delete Permanently' ) . ''; + $actions['delete'] = "" . __( 'Delete Permanently' ) . ''; } else { - $actions['trash'] = "" . _x( 'Trash', 'verb' ) . ''; + $actions['trash'] = "" . _x( 'Trash', 'verb' ) . ''; } $actions['view'] = '' . __( 'View' ) . ''; @@ -661,17 +666,17 @@ * * @since 2.6.0 * - * @param array $actions An array of comment actions. Default actions include: + * @param string[] $actions An array of comment actions. Default actions include: * 'Approve', 'Unapprove', 'Edit', 'Reply', 'Spam', * 'Delete', and 'Trash'. * @param WP_Comment $comment The comment object. */ - $actions = apply_filters( 'comment_row_actions', array_filter($actions), $comment ); + $actions = apply_filters( 'comment_row_actions', array_filter( $actions ), $comment ); $i = 0; foreach ( $actions as $action => $link ) { ++$i; - ( ( ('approve' == $action || 'unapprove' == $action) && 2 === $i ) || 1 === $i ) ? $sep = '' : $sep = ' | '; + ( ( ( 'approve' == $action || 'unapprove' == $action ) && 2 === $i ) || 1 === $i ) ? $sep = '' : $sep = ' | '; // Reply and quickedit need a hide-if-no-js span if ( 'reply' == $action || 'quickedit' == $action ) { @@ -684,17 +689,17 @@ $actions_string .= "$sep$link"; } } -?> + ?>
  • > - comment_type || 'comment' == $comment->comment_type ) : ?> + comment_type || 'comment' == $comment->comment_type ) : ?>

    - ' . __( '[Pending]' ) . '' ); } - ?> + ?>

    - comment_type ) { - case 'pingback' : + case 'pingback': $type = __( 'Pingback' ); break; - case 'trackback' : + case 'trackback': $type = __( 'Trackback' ); break; - default : + default: $type = ucwords( $comment->comment_type ); } $type = esc_html( $type ); - ?> + ?>

    - ' . __( '[Pending]' ) . '' ); } - ?> + ?>

    @@ -760,7 +765,7 @@
  • -'; - $future_posts = wp_dashboard_recent_posts( array( - 'max' => 5, - 'status' => 'future', - 'order' => 'ASC', - 'title' => __( 'Publishing Soon' ), - 'id' => 'future-posts', - ) ); - $recent_posts = wp_dashboard_recent_posts( array( - 'max' => 5, - 'status' => 'publish', - 'order' => 'DESC', - 'title' => __( 'Recently Published' ), - 'id' => 'published-posts', - ) ); + $future_posts = wp_dashboard_recent_posts( + array( + 'max' => 5, + 'status' => 'future', + 'order' => 'ASC', + 'title' => __( 'Publishing Soon' ), + 'id' => 'future-posts', + ) + ); + $recent_posts = wp_dashboard_recent_posts( + array( + 'max' => 5, + 'status' => 'publish', + 'order' => 'DESC', + 'title' => __( 'Recently Published' ), + 'id' => 'published-posts', + ) + ); $recent_comments = wp_dashboard_recent_comments(); - if ( !$future_posts && !$recent_posts && !$recent_comments ) { + if ( ! $future_posts && ! $recent_posts && ! $recent_comments ) { echo '
    '; echo ''; echo '

    ' . __( 'No activity yet!' ) . '

    '; @@ -836,7 +845,7 @@ * @param array $query_args The arguments passed to WP_Query to produce the list of posts. */ $query_args = apply_filters( 'dashboard_recent_posts_query_args', $query_args ); - $posts = new WP_Query( $query_args ); + $posts = new WP_Query( $query_args ); if ( $posts->have_posts() ) { @@ -846,8 +855,9 @@ echo '
    '; } /** @@ -980,19 +994,19 @@ * @return bool False on failure. True on success. */ function wp_dashboard_cached_rss_widget( $widget_id, $callback, $check_urls = array() ) { - $loading = '

    ' . __( 'Loading…' ) . '

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

    '; + $loading = '

    ' . __( 'Loading…' ) . '

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

    '; $doing_ajax = wp_doing_ajax(); - if ( empty($check_urls) ) { + if ( empty( $check_urls ) ) { $widgets = get_option( 'dashboard_widget_options' ); - if ( empty($widgets[$widget_id]['url']) && ! $doing_ajax ) { + if ( empty( $widgets[ $widget_id ]['url'] ) && ! $doing_ajax ) { echo $loading; return false; } - $check_urls = array( $widgets[$widget_id]['url'] ); + $check_urls = array( $widgets[ $widget_id ]['url'] ); } - $locale = get_user_locale(); + $locale = get_user_locale(); $cache_key = 'dash_v2_' . md5( $widget_id . '_' . $locale ); if ( false !== ( $output = get_transient( $cache_key ) ) ) { echo $output; @@ -1031,8 +1045,15 @@ function wp_dashboard_trigger_widget_control( $widget_control_id = false ) { global $wp_dashboard_control_callbacks; - if ( is_scalar($widget_control_id) && $widget_control_id && isset($wp_dashboard_control_callbacks[$widget_control_id]) && is_callable($wp_dashboard_control_callbacks[$widget_control_id]) ) { - call_user_func( $wp_dashboard_control_callbacks[$widget_control_id], '', array( 'id' => $widget_control_id, 'callback' => $wp_dashboard_control_callbacks[$widget_control_id] ) ); + if ( is_scalar( $widget_control_id ) && $widget_control_id && isset( $wp_dashboard_control_callbacks[ $widget_control_id ] ) && is_callable( $wp_dashboard_control_callbacks[ $widget_control_id ] ) ) { + call_user_func( + $wp_dashboard_control_callbacks[ $widget_control_id ], + '', + array( + 'id' => $widget_control_id, + 'callback' => $wp_dashboard_control_callbacks[ $widget_control_id ], + ) + ); } } @@ -1048,38 +1069,40 @@ * @param array $form_inputs */ function wp_dashboard_rss_control( $widget_id, $form_inputs = array() ) { - if ( !$widget_options = get_option( 'dashboard_widget_options' ) ) + if ( ! $widget_options = get_option( 'dashboard_widget_options' ) ) { $widget_options = array(); + } - if ( !isset($widget_options[$widget_id]) ) - $widget_options[$widget_id] = array(); + if ( ! isset( $widget_options[ $widget_id ] ) ) { + $widget_options[ $widget_id ] = array(); + } - $number = 1; // Hack to use wp_widget_rss_form() - $widget_options[$widget_id]['number'] = $number; + $number = 1; // Hack to use wp_widget_rss_form() + $widget_options[ $widget_id ]['number'] = $number; - if ( 'POST' == $_SERVER['REQUEST_METHOD'] && isset($_POST['widget-rss'][$number]) ) { - $_POST['widget-rss'][$number] = wp_unslash( $_POST['widget-rss'][$number] ); - $widget_options[$widget_id] = wp_widget_rss_process( $_POST['widget-rss'][$number] ); - $widget_options[$widget_id]['number'] = $number; + if ( 'POST' == $_SERVER['REQUEST_METHOD'] && isset( $_POST['widget-rss'][ $number ] ) ) { + $_POST['widget-rss'][ $number ] = wp_unslash( $_POST['widget-rss'][ $number ] ); + $widget_options[ $widget_id ] = wp_widget_rss_process( $_POST['widget-rss'][ $number ] ); + $widget_options[ $widget_id ]['number'] = $number; // 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) ) { - $widget_options[$widget_id]['title'] = htmlentities(__('Unknown Feed')); + 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 ) ) { + $widget_options[ $widget_id ]['title'] = htmlentities( __( 'Unknown Feed' ) ); } else { - $widget_options[$widget_id]['title'] = htmlentities(strip_tags($rss->get_title())); + $widget_options[ $widget_id ]['title'] = htmlentities( strip_tags( $rss->get_title() ) ); $rss->__destruct(); - unset($rss); + unset( $rss ); } } update_option( 'dashboard_widget_options', $widget_options ); - $locale = get_user_locale(); + $locale = get_user_locale(); $cache_key = 'dash_v2_' . md5( $widget_id . '_' . $locale ); delete_transient( $cache_key ); } - wp_widget_rss_form( $widget_options[$widget_id], $form_inputs ); + wp_widget_rss_form( $widget_options[ $widget_id ], $form_inputs ); } @@ -1104,7 +1127,7 @@ 'https://make.wordpress.org/community/meetups-landing-page', __( 'Meetups' ), /* translators: accessibility text */ - __( '(opens in a new window)' ) + __( '(opens in a new tab)' ) ); ?> @@ -1116,7 +1139,7 @@ 'https://central.wordcamp.org/schedule/', __( 'WordCamps' ), /* translators: accessibility text */ - __( '(opens in a new window)' ) + __( '(opens in a new tab)' ) ); ?> @@ -1129,7 +1152,7 @@ esc_url( _x( 'https://wordpress.org/news/', 'Events and News dashboard widget' ) ), __( 'News' ), /* translators: accessibility text */ - __( '(opens in a new window)' ) + __( '(opens in a new tab)' ) ); ?>

    @@ -1218,15 +1241,18 @@ ?> @@ -1281,35 +1312,35 @@ } /** - * WordPress News dashboard widget. + * 'WordPress Events and News' dashboard widget. * * @since 2.7.0 * @since 4.8.0 Removed popular plugins feed. */ function wp_dashboard_primary() { $feeds = array( - 'news' => array( + 'news' => array( /** - * Filters the primary link URL for the 'WordPress News' dashboard widget. + * Filters the primary link URL for the 'WordPress Events and News' dashboard widget. * * @since 2.5.0 * * @param string $link The widget's primary link URL. */ - 'link' => apply_filters( 'dashboard_primary_link', __( 'https://wordpress.org/news/' ) ), + 'link' => apply_filters( 'dashboard_primary_link', __( 'https://wordpress.org/news/' ) ), /** - * Filters the primary feed URL for the 'WordPress News' dashboard widget. + * Filters the primary feed URL for the 'WordPress Events and News' dashboard widget. * * @since 2.3.0 * * @param string $url The widget's primary feed URL. */ - 'url' => apply_filters( 'dashboard_primary_feed', __( 'http://wordpress.org/news/feed/' ) ), + 'url' => apply_filters( 'dashboard_primary_feed', __( 'https://wordpress.org/news/feed/' ) ), /** - * Filters the primary link title for the 'WordPress News' dashboard widget. + * Filters the primary link title for the 'WordPress Events and News' dashboard widget. * * @since 2.3.0 * @@ -1324,25 +1355,25 @@ 'planet' => array( /** - * Filters the secondary link URL for the 'WordPress News' dashboard widget. + * Filters the secondary link URL for the 'WordPress Events and News' dashboard widget. * * @since 2.3.0 * * @param string $link The widget's secondary link URL. */ - 'link' => apply_filters( 'dashboard_secondary_link', __( 'https://planet.wordpress.org/' ) ), + 'link' => apply_filters( 'dashboard_secondary_link', __( 'https://planet.wordpress.org/' ) ), /** - * Filters the secondary feed URL for the 'WordPress News' dashboard widget. + * Filters the secondary feed URL for the 'WordPress Events and News' dashboard widget. * * @since 2.3.0 * * @param string $url The widget's secondary feed URL. */ - 'url' => apply_filters( 'dashboard_secondary_feed', __( 'https://planet.wordpress.org/feed/' ) ), + 'url' => apply_filters( 'dashboard_secondary_feed', __( 'https://planet.wordpress.org/feed/' ) ), /** - * Filters the secondary link title for the 'WordPress News' dashboard widget. + * Filters the secondary link title for the 'WordPress Events and News' dashboard widget. * * @since 2.3.0 * @@ -1351,7 +1382,7 @@ 'title' => apply_filters( 'dashboard_secondary_title', __( 'Other WordPress News' ) ), /** - * Filters the number of secondary link items for the 'WordPress News' dashboard widget. + * Filters the number of secondary link items for the 'WordPress Events and News' dashboard widget. * * @since 4.4.0 * @@ -1361,14 +1392,14 @@ 'show_summary' => 0, 'show_author' => 0, 'show_date' => 0, - ) + ), ); wp_dashboard_cached_rss_widget( 'dashboard_primary', 'wp_dashboard_primary_output', $feeds ); } /** - * Display the WordPress news feeds. + * Display the WordPress events and news feeds. * * @since 3.8.0 * @since 4.8.0 Removed popular plugins feed. @@ -1381,7 +1412,7 @@ $args['type'] = $type; echo '
    '; wp_widget_rss_output( $args['url'], $args ); - echo "
    "; + echo ''; } } @@ -1395,18 +1426,20 @@ * @return bool|null True if not multisite, user can't upload files, or the space check option is disabled. */ function wp_dashboard_quota() { - if ( !is_multisite() || !current_user_can( 'upload_files' ) || get_site_option( 'upload_space_check_disabled' ) ) + if ( ! is_multisite() || ! current_user_can( 'upload_files' ) || get_site_option( 'upload_space_check_disabled' ) ) { return true; + } $quota = get_space_allowed(); - $used = get_space_used(); + $used = get_space_used(); - if ( $used > $quota ) + if ( $used > $quota ) { $percentused = '100'; - else + } else { $percentused = ( $used / $quota ) * 100; - $used_class = ( $percentused >= 70 ) ? ' warning' : ''; - $used = round( $used, 2 ); + } + $used_class = ( $percentused >= 70 ) ? ' warning' : ''; + $used = round( $used, 2 ); $percentused = number_format( $percentused ); ?> @@ -1414,7 +1447,8 @@
    @@ -1446,35 +1483,38 @@ // Display Browser Nag Meta Box function wp_dashboard_browser_nag() { - $notice = ''; + $notice = ''; $response = wp_check_browser_version(); if ( $response ) { if ( $response['insecure'] ) { /* translators: %s: browser name and link */ - $msg = sprintf( __( "It looks like you're using an insecure version of %s. Using an outdated browser makes your computer unsafe. For the best WordPress experience, please update your browser." ), + $msg = sprintf( + __( "It looks like you're using an insecure version of %s. Using an outdated browser makes your computer unsafe. For the best WordPress experience, please update your browser." ), sprintf( '%s', esc_url( $response['update_url'] ), esc_html( $response['name'] ) ) ); } else { /* translators: %s: browser name and link */ - $msg = sprintf( __( "It looks like you're using an old version of %s. For the best WordPress experience, please update your browser." ), + $msg = sprintf( + __( "It looks like you're using an old version of %s. For the best WordPress experience, please update your browser." ), sprintf( '%s', esc_url( $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']; + if ( ! empty( $response['img_src'] ) ) { + $img_src = ( is_ssl() && ! empty( $response['img_src_ssl'] ) ) ? $response['img_src_ssl'] : $response['img_src']; - $notice .= '
    '; + $notice .= '
    '; $browser_nag_class = ' has-browser-icon'; } $notice .= "

    {$msg}

    "; $browsehappy = 'https://browsehappy.com/'; - $locale = get_user_locale(); - if ( 'en_US' !== $locale ) + $locale = get_user_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' ) . '

    '; @@ -1482,13 +1522,13 @@ } /** - * Filters the notice output for the 'Browse Happy' nag meta box. - * - * @since 3.2.0 - * - * @param string $notice The notice content. - * @param array $response An array containing web browser information. - */ + * Filters the notice output for the 'Browse Happy' nag meta box. + * + * @since 3.2.0 + * + * @param string $notice The notice content. + * @param array $response An array containing web browser information. See `wp_check_browser_version()`. + */ echo apply_filters( 'browse-happy-notice', $notice, $response ); } @@ -1501,8 +1541,9 @@ function dashboard_browser_nag_class( $classes ) { $response = wp_check_browser_version(); - if ( $response && $response['insecure'] ) + if ( $response && $response['insecure'] ) { $classes[] = 'browser-insecure'; + } return $classes; } @@ -1515,19 +1556,20 @@ * @return array|bool False on failure, array of browser data on success. */ function wp_check_browser_version() { - if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) + if ( empty( $_SERVER['HTTP_USER_AGENT'] ) ) { return false; + } $key = md5( $_SERVER['HTTP_USER_AGENT'] ); - if ( false === ($response = get_site_transient('browser_' . $key) ) ) { + if ( false === ( $response = get_site_transient( 'browser_' . $key ) ) ) { // include an unmodified $wp_version include( ABSPATH . WPINC . '/version.php' ); - $url = 'http://api.wordpress.org/core/browse-happy/1.1/'; + $url = 'http://api.wordpress.org/core/browse-happy/1.1/'; $options = array( 'body' => array( 'useragent' => $_SERVER['HTTP_USER_AGENT'] ), - 'user-agent' => 'WordPress/' . $wp_version . '; ' . home_url( '/' ) + 'user-agent' => 'WordPress/' . $wp_version . '; ' . home_url( '/' ), ); if ( wp_http_supports( array( 'ssl' ) ) ) { @@ -1536,8 +1578,9 @@ $response = wp_remote_post( $url, $options ); - if ( is_wp_error( $response ) || 200 != wp_remote_retrieve_response_code( $response ) ) + if ( is_wp_error( $response ) || 200 != wp_remote_retrieve_response_code( $response ) ) { return false; + } /** * Response should be an array with: @@ -1553,8 +1596,9 @@ */ $response = json_decode( wp_remote_retrieve_body( $response ), true ); - if ( ! is_array( $response ) ) + if ( ! is_array( $response ) ) { return false; + } set_site_transient( 'browser_' . $key, $response, WEEK_IN_SECONDS ); } @@ -1563,6 +1607,65 @@ } /** + * Displays the PHP update nag. + * + * @since 5.1.0 + */ +function wp_dashboard_php_nag() { + $response = wp_check_php_version(); + + if ( ! $response ) { + return; + } + + if ( isset( $response['is_secure'] ) && ! $response['is_secure'] ) { + $msg = __( 'WordPress has detected that your site is running on an insecure version of PHP.' ); + } else { + $msg = __( 'WordPress has detected that your site is running on an outdated version of PHP.' ); + } + + ?> +

    + +

    +

    + +

    + %2$s %3$s', + esc_url( wp_get_update_php_url() ), + __( 'Learn more about updating PHP' ), + /* translators: accessibility text */ + __( '(opens in a new tab)' ) + ); + ?> +

    +
  • ' . __( 'Write your first blog post' ) . '', admin_url( 'post-new.php' ) ); ?>
  • ' . __( 'Add an About page' ) . '', admin_url( 'post-new.php?post_type=page' ) ); ?>
  • +
  • ' . __( 'Set up your homepage' ) . '', current_user_can( 'customize' ) ? add_query_arg( 'autofocus[section]', 'static_front_page', admin_url( 'customize.php' ) ) : admin_url( 'options-reading.php' ) ); ?>
  • ' . __( 'View your site' ) . '', home_url( '/' ) ); ?>
  • @@ -1610,16 +1714,21 @@