wp/wp-admin/includes/dashboard.php
changeset 9 177826044cd9
parent 7 cf61fcea0001
child 16 a86126ab1dd4
--- 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'] . " <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'] );
+		$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']) ) {
+	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 .= ' <span class="postbox-title-action"><a href="' . esc_url( $url ) . '">' . __( 'Cancel' ) . '</a></span>';
-			$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 .= ' <span class="postbox-title-action"><a href="' . esc_url( "$url#$widget_id" ) . '" class="edit-box open-box">' . __( 'Configure' ) . '</a></span>';
 		}
 	}
@@ -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 '<form method="post" class="dashboard-widget-control-form wp-clearfix">';
 	wp_dashboard_trigger_widget_control( $meta_box['id'] );
 	wp_nonce_field( 'edit-dashboard-widget_' . $meta_box['id'], 'dashboard-widget-nonce' );
-	echo '<input type="hidden" name="widget_id" value="' . esc_attr($meta_box['id']) . '" />';
-	submit_button( __('Submit') );
+	echo '<input type="hidden" name="widget_id" value="' . esc_attr( $meta_box['id'] ) . '" />';
+	submit_button( __( 'Submit' ) );
 	echo '</form>';
 }
 
@@ -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";
 	}
 
-?>
+	?>
 <div id="dashboard-widgets" class="metabox-holder<?php echo $columns_css; ?>">
 	<div id="postbox-container-1" class="postbox-container">
 	<?php do_meta_boxes( $screen->id, 'normal', '' ); ?>
@@ -240,7 +242,7 @@
 	</div>
 </div>
 
-<?php
+	<?php
 	wp_nonce_field( 'closedpostboxes', 'closedpostboxesnonce', false );
 	wp_nonce_field( 'meta-box-order', 'meta-box-order-nonce', false );
 
@@ -258,7 +260,7 @@
  * @since 2.7.0
  */
 function wp_dashboard_right_now() {
-?>
+	?>
 	<div class="main">
 	<ul>
 	<?php
@@ -271,14 +273,13 @@
 			} else {
 				$text = _n( '%s Page', '%s Pages', $num_posts->publish );
 			}
-			$text = sprintf( $text, number_format_i18n( $num_posts->publish ) );
+			$text             = sprintf( $text, number_format_i18n( $num_posts->publish ) );
 			$post_type_object = get_post_type_object( $post_type );
 			if ( $post_type_object && current_user_can( $post_type_object->cap->edit_posts ) ) {
 				printf( '<li class="%1$s-count"><a href="edit.php?post_type=%1$s">%2$s</a></li>', $post_type, $text );
 			} else {
 				printf( '<li class="%1$s-count"><span>%2$s</span></li>', $post_type, $text );
 			}
-
 		}
 	}
 	// Comments
@@ -290,15 +291,15 @@
 		<?php
 		$moderated_comments_count_i18n = number_format_i18n( $num_comm->moderated );
 		/* translators: %s: number of comments in moderation */
-		$text = sprintf( _nx( '%s in moderation', '%s in moderation', $num_comm->moderated, 'comments' ), $moderated_comments_count_i18n );
-		/* translators: %s: number of comments in moderation */
-		$aria_label = sprintf( _nx( '%s comment in moderation', '%s comments in moderation', $num_comm->moderated, 'comments' ), $moderated_comments_count_i18n );
+		$text = sprintf( _n( '%s Comment in moderation', '%s Comments in moderation', $num_comm->moderated ), $moderated_comments_count_i18n );
 		?>
-		<li class="comment-mod-count<?php
-			if ( ! $num_comm->moderated ) {
-				echo ' hidden';
-			}
-		?>"><a href="edit-comments.php?comment_status=moderated" aria-label="<?php esc_attr_e( $aria_label ); ?>"><?php echo $text; ?></a></li>
+		<li class="comment-mod-count
+		<?php
+		if ( ! $num_comm->moderated ) {
+			echo ' hidden';
+		}
+		?>
+		"><a href="edit-comments.php?comment_status=moderated" class="comments-in-moderation-text"><?php echo $text; ?></a></li>
 		<?php
 	}
 
@@ -311,7 +312,7 @@
 	 *
 	 * @since 3.8.0
 	 *
-	 * @param array $items Array of extra 'At a Glance' widget items.
+	 * @param string[] $items Array of extra 'At a Glance' widget items.
 	 */
 	$elements = apply_filters( 'dashboard_glance_items', array() );
 
@@ -350,7 +351,7 @@
 		 *
 		 * @param string $content Default text.
 		 */
-		$content = apply_filters( 'privacy_on_link_text' , __( 'Search Engines Discouraged' ) );
+		$content    = apply_filters( 'privacy_on_link_text', __( 'Search Engines Discouraged' ) );
 		$title_attr = '' === $title ? '' : " title='$title'";
 
 		echo "<p><a href='options-reading.php'$title_attr>$content</a></p>";
@@ -384,11 +385,13 @@
 
 	$actions = ob_get_clean();
 
-	if ( !empty( $actions ) ) : ?>
+	if ( ! empty( $actions ) ) :
+		?>
 	<div class="sub">
 		<?php echo $actions; ?>
 	</div>
-	<?php endif;
+		<?php
+	endif;
 }
 
 /**
@@ -396,10 +399,12 @@
  */
 function wp_network_dashboard_right_now() {
 	$actions = array();
-	if ( current_user_can('create_sites') )
-		$actions['create-site'] = '<a href="' . network_admin_url('site-new.php') . '">' . __( 'Create a New Site' ) . '</a>';
-	if ( current_user_can('create_users') )
-		$actions['create-user'] = '<a href="' . network_admin_url('user-new.php') . '">' . __( 'Create a New User' ) . '</a>';
+	if ( current_user_can( 'create_sites' ) ) {
+		$actions['create-site'] = '<a href="' . network_admin_url( 'site-new.php' ) . '">' . __( 'Create a New Site' ) . '</a>';
+	}
+	if ( current_user_can( 'create_users' ) ) {
+		$actions['create-user'] = '<a href="' . network_admin_url( 'user-new.php' ) . '">' . __( 'Create a New User' ) . '</a>';
+	}
 
 	$c_users = get_user_count();
 	$c_blogs = get_blog_count();
@@ -415,12 +420,12 @@
 	if ( $actions ) {
 		echo '<ul class="subsubsub">';
 		foreach ( $actions as $class => $action ) {
-			 $actions[ $class ] = "\t<li class='$class'>$action";
+			$actions[ $class ] = "\t<li class='$class'>$action";
 		}
 		echo implode( " |</li>\n", $actions ) . "</li>\n";
 		echo '</ul>';
 	}
-?>
+	?>
 	<br class="clear" />
 
 	<p class="youhave"><?php echo $sentence; ?></p>
@@ -432,13 +437,11 @@
 		 * just before the user and site search form fields.
 		 *
 		 * @since MU (3.0.0)
-		 *
-		 * @param null $unused
 		 */
-		do_action( 'wpmuadminresult', '' );
+		do_action( 'wpmuadminresult' );
 	?>
 
-	<form action="<?php echo network_admin_url('users.php'); ?>" method="get">
+	<form action="<?php echo network_admin_url( 'users.php' ); ?>" method="get">
 		<p>
 			<label class="screen-reader-text" for="search-users"><?php _e( 'Search Users' ); ?></label>
 			<input type="search" name="s" value="" size="30" autocomplete="off" id="search-users"/>
@@ -446,14 +449,14 @@
 		</p>
 	</form>
 
-	<form action="<?php echo network_admin_url('sites.php'); ?>" method="get">
+	<form action="<?php echo network_admin_url( 'sites.php' ); ?>" method="get">
 		<p>
 			<label class="screen-reader-text" for="search-sites"><?php _e( 'Search Sites' ); ?></label>
 			<input type="search" name="s" value="" size="30" autocomplete="off" id="search-sites"/>
 			<?php submit_button( __( 'Search Sites' ), '', false, false, array( 'id' => 'submit_sites' ) ); ?>
 		</p>
 	</form>
-<?php
+	<?php
 	/**
 	 * Fires at the end of the 'Right Now' widget in the Network Admin dashboard.
 	 *
@@ -496,15 +499,16 @@
 			$post->post_title = ''; // Remove the auto draft title
 		}
 	} else {
-		$post = get_default_post_to_edit( 'post' , true);
+		$post    = get_default_post_to_edit( 'post', true );
 		$user_id = get_current_user_id();
 		// Don't create an option if this is a super admin who does not belong to this site.
-		if ( in_array( get_current_blog_id(), array_keys( get_blogs_of_user( $user_id ) ) ) )
+		if ( in_array( get_current_blog_id(), array_keys( get_blogs_of_user( $user_id ) ) ) ) {
 			update_user_option( $user_id, 'dashboard_quick_press_last_post_id', (int) $post->ID ); // Save post_ID
+		}
 	}
 
 	$post_ID = (int) $post->ID;
-?>
+	?>
 
 	<form name="post" action="<?php echo esc_url( admin_url( 'post.php' ) ); ?>" method="post" id="quick-press" class="initial-form hide-if-no-js">
 
@@ -513,8 +517,7 @@
 		<?php endif; ?>
 
 		<div class="input-text-wrap" id="title-wrap">
-			<label class="screen-reader-text prompt" for="title" id="title-prompt-text">
-
+			<label for="title">
 				<?php
 				/** This filter is documented in wp-admin/edit-form-advanced.php */
 				echo apply_filters( 'enter_title_here', __( 'Title' ), $post );
@@ -524,8 +527,8 @@
 		</div>
 
 		<div class="textarea-wrap" id="description-wrap">
-			<label class="screen-reader-text prompt" for="content" id="content-prompt-text"><?php _e( 'What&#8217;s on your mind?' ); ?></label>
-			<textarea name="content" id="content" class="mceEditor" rows="3" cols="15" autocomplete="off"></textarea>
+			<label for="content"><?php _e( 'Content' ); ?></label>
+			<textarea name="content" id="content" placeholder="<?php esc_attr_e( 'What&#8217;s on your mind?' ); ?>" class="mceEditor" rows="3" cols="15" autocomplete="off"></textarea>
 		</div>
 
 		<p class="submit">
@@ -547,7 +550,7 @@
  *
  * @since 2.7.0
  *
- * @param array $drafts
+ * @param WP_Post[] $drafts Optional. Array of posts to display. Default false.
  */
 function wp_dashboard_recent_drafts( $drafts = false ) {
 	if ( ! $drafts ) {
@@ -557,7 +560,7 @@
 			'author'         => get_current_user_id(),
 			'posts_per_page' => 4,
 			'orderby'        => 'modified',
-			'order'          => 'DESC'
+			'order'          => 'DESC',
 		);
 
 		/**
@@ -572,18 +575,18 @@
 		$drafts = get_posts( $query_args );
 		if ( ! $drafts ) {
 			return;
- 		}
- 	}
+		}
+	}
 
 	echo '<div class="drafts">';
 	if ( count( $drafts ) > 3 ) {
 		echo '<p class="view-all"><a href="' . esc_url( admin_url( 'edit.php?post_status=draft' ) ) . '">' . __( 'View all drafts' ) . "</a></p>\n";
- 	}
+	}
 	echo '<h2 class="hide-if-no-js">' . __( 'Your Recent Drafts' ) . "</h2>\n<ul>";
 
 	$drafts = array_slice( $drafts, 0, 3 );
 	foreach ( $drafts as $draft ) {
-		$url = get_edit_post_link( $draft->ID );
+		$url   = get_edit_post_link( $draft->ID );
 		$title = _draft_or_post_title( $draft->ID );
 		echo "<li>\n";
 		/* translators: %s: post title */
@@ -591,9 +594,9 @@
 		echo '<time datetime="' . get_the_time( 'c', $draft ) . '">' . get_the_time( __( 'F j, Y' ), $draft ) . '</time></div>';
 		if ( $the_content = wp_trim_words( $draft->post_content, 10 ) ) {
 			echo '<p>' . $the_content . '</p>';
- 		}
+		}
 		echo "</li>\n";
- 	}
+	}
 	echo "</ul>\n</div>";
 }
 
@@ -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 = "<a href='$comment_post_url'>$comment_post_title</a>";
+		$comment_post_url   = get_the_permalink( $comment->comment_post_ID );
+		$comment_post_link  = "<a href='$comment_post_url'>$comment_post_title</a>";
 	} 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'] = "<a href='$approve_url' data-wp-lists='dim:the-comment-list:comment-$comment->comment_ID:unapproved:e7e7d3:e7e7d3:new=approved' class='vim-a' aria-label='" . esc_attr__( 'Approve this comment' ) . "'>" . __( 'Approve' ) . '</a>';
-		$actions['unapprove'] = "<a href='$unapprove_url' data-wp-lists='dim:the-comment-list:comment-$comment->comment_ID:unapproved:e7e7d3:e7e7d3:new=unapproved' class='vim-u' aria-label='" . esc_attr__( 'Unapprove this comment' ) . "'>" . __( 'Unapprove' ) . '</a>';
-		$actions['edit'] = "<a href='comment.php?action=editcomment&amp;c={$comment->comment_ID}' aria-label='" . esc_attr__( 'Edit this comment' ) . "'>". __( 'Edit' ) . '</a>';
-		$actions['reply'] = '<a onclick="window.commentReply && commentReply.open(\'' . $comment->comment_ID . '\',\''.$comment->comment_post_ID.'\');return false;" class="vim-r hide-if-no-js" aria-label="' . esc_attr__( 'Reply to this comment' ) . '" href="#">' . __( 'Reply' ) . '</a>';
-		$actions['spam'] = "<a href='$spam_url' data-wp-lists='delete:the-comment-list:comment-$comment->comment_ID::spam=1' class='vim-s vim-destructive' aria-label='" . esc_attr__( 'Mark this comment as spam' ) . "'>" . /* translators: mark as spam link */ _x( 'Spam', 'verb' ) . '</a>';
+		$actions['approve']   = "<a href='$approve_url' data-wp-lists='dim:the-comment-list:comment-$comment->comment_ID:unapproved:e7e7d3:e7e7d3:new=approved' class='vim-a aria-button-if-js' aria-label='" . esc_attr__( 'Approve this comment' ) . "'>" . __( 'Approve' ) . '</a>';
+		$actions['unapprove'] = "<a href='$unapprove_url' data-wp-lists='dim:the-comment-list:comment-$comment->comment_ID:unapproved:e7e7d3:e7e7d3:new=unapproved' class='vim-u aria-button-if-js' aria-label='" . esc_attr__( 'Unapprove this comment' ) . "'>" . __( 'Unapprove' ) . '</a>';
+		$actions['edit']      = "<a href='comment.php?action=editcomment&amp;c={$comment->comment_ID}' aria-label='" . esc_attr__( 'Edit this comment' ) . "'>" . __( 'Edit' ) . '</a>';
+		$actions['reply']     = '<button type="button" onclick="window.commentReply && commentReply.open(\'' . $comment->comment_ID . '\',\'' . $comment->comment_post_ID . '\');" class="vim-r button-link hide-if-no-js" aria-label="' . esc_attr__( 'Reply to this comment' ) . '">' . __( 'Reply' ) . '</button>';
+		$actions['spam']      = "<a href='$spam_url' data-wp-lists='delete:the-comment-list:comment-$comment->comment_ID::spam=1' class='vim-s vim-destructive aria-button-if-js' aria-label='" . esc_attr__( 'Mark this comment as spam' ) . "'>" . /* translators: mark as spam link */ _x( 'Spam', 'verb' ) . '</a>';
 
 		if ( ! EMPTY_TRASH_DAYS ) {
-			$actions['delete'] = "<a href='$delete_url' data-wp-lists='delete:the-comment-list:comment-$comment->comment_ID::trash=1' class='delete vim-d vim-destructive' aria-label='" . esc_attr__( 'Delete this comment permanently' ) . "'>" . __( 'Delete Permanently' ) . '</a>';
+			$actions['delete'] = "<a href='$delete_url' data-wp-lists='delete:the-comment-list:comment-$comment->comment_ID::trash=1' class='delete vim-d vim-destructive aria-button-if-js' aria-label='" . esc_attr__( 'Delete this comment permanently' ) . "'>" . __( 'Delete Permanently' ) . '</a>';
 		} else {
-			$actions['trash'] = "<a href='$trash_url' data-wp-lists='delete:the-comment-list:comment-$comment->comment_ID::trash=1' class='delete vim-d vim-destructive' aria-label='" . esc_attr__( 'Move this comment to the Trash' ) . "'>" . _x( 'Trash', 'verb' ) . '</a>';
+			$actions['trash'] = "<a href='$trash_url' data-wp-lists='delete:the-comment-list:comment-$comment->comment_ID::trash=1' class='delete vim-d vim-destructive aria-button-if-js' aria-label='" . esc_attr__( 'Move this comment to the Trash' ) . "'>" . _x( 'Trash', 'verb' ) . '</a>';
 		}
 
 		$actions['view'] = '<a class="comment-link" href="' . esc_url( get_comment_link( $comment ) ) . '" aria-label="' . esc_attr__( 'View this comment' ) . '">' . __( 'View' ) . '</a>';
@@ -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 .= "<span class='$action'>$sep$link</span>";
 		}
 	}
-?>
+	?>
 
 		<li id="comment-<?php echo $comment->comment_ID; ?>" <?php comment_class( array( 'comment-item', wp_get_comment_status( $comment ) ), $comment ); ?>>
 
 			<?php echo get_avatar( $comment, 50, 'mystery' ); ?>
 
-			<?php if ( !$comment->comment_type || 'comment' == $comment->comment_type ) : ?>
+			<?php if ( ! $comment->comment_type || 'comment' == $comment->comment_type ) : ?>
 
 			<div class="dashboard-comment-wrap has-row-actions">
 			<p class="comment-meta">
-			<?php
+				<?php
 				// Comments might not have a post they relate to, e.g. programmatically created ones.
 				if ( $comment_post_link ) {
 					printf(
@@ -712,26 +717,26 @@
 						'<span class="approve">' . __( '[Pending]' ) . '</span>'
 					);
 				}
-			?>
+				?>
 			</p>
 
-			<?php
+				<?php
 			else :
 				switch ( $comment->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 );
-			?>
+				?>
 			<div class="dashboard-comment-wrap has-row-actions">
 			<p class="comment-meta">
-			<?php
+				<?php
 				// Pingbacks, Trackbacks or custom comment types might not have a post they relate to, e.g. programmatically created ones.
 				if ( $comment_post_link ) {
 					printf(
@@ -749,7 +754,7 @@
 						'<span class="approve">' . __( '[Pending]' ) . '</span>'
 					);
 				}
-			?>
+				?>
 			</p>
 			<p class="comment-author"><?php comment_author_link( $comment ); ?></p>
 
@@ -760,7 +765,7 @@
 			<?php endif; ?>
 			</div>
 		</li>
-<?php
+	<?php
 	$GLOBALS['comment'] = null;
 }
 
@@ -773,24 +778,28 @@
 
 	echo '<div id="activity-widget">';
 
-	$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 '<div class="no-activity">';
 		echo '<p class="smiley" aria-hidden="true"></p>';
 		echo '<p>' . __( 'No activity yet!' ) . '</p>';
@@ -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 '<ul>';
 
-		$today    = date( 'Y-m-d', current_time( 'timestamp' ) );
-		$tomorrow = date( 'Y-m-d', strtotime( '+1 day', current_time( 'timestamp' ) ) );
+		$today    = current_time( 'Y-m-d' );
+		$tomorrow = gmdate( 'Y-m-d', strtotime( '+1 day', current_time( 'timestamp' ) ) );
+		$year     = current_time( 'Y' );
 
 		while ( $posts->have_posts() ) {
 			$posts->the_post();
@@ -857,7 +867,7 @@
 				$relative = __( 'Today' );
 			} elseif ( date( 'Y-m-d', $time ) == $tomorrow ) {
 				$relative = __( 'Tomorrow' );
-			} elseif ( date( 'Y', $time ) !== date( 'Y', current_time( 'timestamp' ) ) ) {
+			} elseif ( date( 'Y', $time ) !== $year ) {
 				/* translators: date and time format for recent posts on the dashboard, from a different calendar year, see https://secure.php.net/date */
 				$relative = date_i18n( __( 'M jS Y' ), $time );
 			} else {
@@ -906,24 +916,27 @@
 
 	$comments_query = array(
 		'number' => $total_items * 5,
-		'offset' => 0
+		'offset' => 0,
 	);
-	if ( ! current_user_can( 'edit_posts' ) )
+	if ( ! current_user_can( 'edit_posts' ) ) {
 		$comments_query['status'] = 'approve';
+	}
 
 	while ( count( $comments ) < $total_items && $possible = get_comments( $comments_query ) ) {
 		if ( ! is_array( $possible ) ) {
 			break;
 		}
 		foreach ( $possible as $comment ) {
-			if ( ! current_user_can( 'read_post', $comment->comment_post_ID ) )
+			if ( ! current_user_can( 'read_post', $comment->comment_post_ID ) ) {
 				continue;
+			}
 			$comments[] = $comment;
-			if ( count( $comments ) == $total_items )
+			if ( count( $comments ) == $total_items ) {
 				break 2;
+			}
 		}
 		$comments_query['offset'] += $comments_query['number'];
-		$comments_query['number'] = $total_items * 10;
+		$comments_query['number']  = $total_items * 10;
 	}
 
 	if ( $comments ) {
@@ -931,8 +944,9 @@
 		echo '<h3>' . __( 'Recent Comments' ) . '</h3>';
 
 		echo '<ul id="the-comment-list" data-wp-lists="list:comment">';
-		foreach ( $comments as $comment )
+		foreach ( $comments as $comment ) {
 			_wp_dashboard_recent_comments_row( $comment );
+		}
 		echo '</ul>';
 
 		if ( current_user_can( 'edit_posts' ) ) {
@@ -961,7 +975,7 @@
 	$widgets = get_option( 'dashboard_widget_options' );
 	echo '<div class="rss-widget">';
 	wp_widget_rss_output( $widgets[ $widget_id ] );
-	echo "</div>";
+	echo '</div>';
 }
 
 /**
@@ -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 = '<p class="widget-loading hide-if-no-js">' . __( 'Loading&#8230;' ) . '</p><div class="hide-if-js notice notice-error inline"><p>' . __( 'This widget requires JavaScript.' ) . '</p></div>';
+	$loading    = '<p class="widget-loading hide-if-no-js">' . __( 'Loading&#8230;' ) . '</p><div class="hide-if-js notice notice-error inline"><p>' . __( 'This widget requires JavaScript.' ) . '</p></div>';
 	$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)' )
 			);
 		?>
 	</p>
@@ -1218,15 +1241,18 @@
 	?>
 
 	<script id="tmpl-community-events-attend-event-near" type="text/template">
-		<?php printf(
+		<?php
+		printf(
 			/* translators: %s: the name of a city */
 			__( 'Attend an upcoming event near %s.' ),
 			'<strong>{{ data.location.description }}</strong>'
-		); ?>
+		);
+		?>
 	</script>
 
 	<script id="tmpl-community-events-could-not-locate" type="text/template">
-		<?php printf(
+		<?php
+		printf(
 			/* translators: %s is the name of the city we couldn't locate.
 			 * Replace the examples with cities in your locale, but test
 			 * that they match the expected location before including them.
@@ -1234,7 +1260,8 @@
 			 */
 			__( 'We couldn&#8217;t locate %s. Please try another nearby city. For example: Kansas City; Springfield; Portland.' ),
 			'<em>{{data.unknownCity}}</em>'
-		); ?>
+		);
+		?>
 	</script>
 
 	<script id="tmpl-community-events-event-list" type="text/template">
@@ -1261,19 +1288,23 @@
 	<script id="tmpl-community-events-no-upcoming-events" type="text/template">
 		<li class="event-none">
 			<# if ( data.location.description ) { #>
-				<?php printf(
+				<?php
+				printf(
 					/* translators: 1: the city the user searched for, 2: meetup organization documentation URL */
 					__( 'There aren&#8217;t any events scheduled near %1$s at the moment. Would you like to <a href="%2$s">organize one</a>?' ),
 					'{{ data.location.description }}',
 					__( 'https://make.wordpress.org/community/handbook/meetup-organizer/welcome/' )
-				); ?>
+				);
+				?>
 
 			<# } else { #>
-				<?php printf(
+				<?php
+				printf(
 					/* translators: %s: meetup organization documentation URL */
 					__( 'There aren&#8217;t any events scheduled near you at the moment. Would you like to <a href="%s">organize one</a>?' ),
 					__( 'https://make.wordpress.org/community/handbook/meetup-organizer/welcome/' )
-				); ?>
+				);
+				?>
 			<# } #>
 		</li>
 	</script>
@@ -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 '<div class="rss-widget">';
 			wp_widget_rss_output( $args['url'], $args );
-		echo "</div>";
+		echo '</div>';
 	}
 }
 
@@ -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 @@
 	<div class="mu-storage">
 	<ul>
 		<li class="storage-count">
-			<?php $text = sprintf(
+			<?php
+			$text = sprintf(
 				/* translators: %s: number of megabytes */
 				__( '%s MB Space Allowed' ),
 				number_format_i18n( $quota )
@@ -1424,9 +1458,11 @@
 				esc_url( admin_url( 'upload.php' ) ),
 				$text,
 				__( 'Manage Uploads' )
-			); ?>
+			);
+			?>
 		</li><li class="storage-count <?php echo $used_class; ?>">
-			<?php $text = sprintf(
+			<?php
+			$text = sprintf(
 				/* translators: 1: number of megabytes, 2: percentage */
 				__( '%1$s MB (%2$s%%) Space Used' ),
 				number_format_i18n( $used, 2 ),
@@ -1437,7 +1473,8 @@
 				esc_url( admin_url( 'upload.php' ) ),
 				$text,
 				__( 'Manage Uploads' )
-			); ?>
+			);
+			?>
 		</li>
 	</ul>
 	</div>
@@ -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( '<a href="%s">%s</a>', 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( '<a href="%s">%s</a>', 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 .= '<div class="alignright browser-icon"><a href="' . esc_attr($response['update_url']) . '"><img src="' . esc_attr( $img_src ) . '" alt="" /></a></div>';
+			$notice           .= '<div class="alignright browser-icon"><a href="' . esc_attr( $response['update_url'] ) . '"><img src="' . esc_attr( $img_src ) . '" alt="" /></a></div>';
 			$browser_nag_class = ' has-browser-icon';
 		}
 		$notice .= "<p class='browser-update-nag{$browser_nag_class}'>{$msg}</p>";
 
 		$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 .= '<p>' . sprintf( __( '<a href="%1$s" class="update-browser-link">Update %2$s</a> or learn how to <a href="%3$s" class="browse-happy-link">browse happy</a>' ), esc_attr( $response['update_url'] ), esc_html( $response['name'] ), esc_url( $browsehappy ) ) . '</p>';
 		$notice .= '<p class="hide-if-no-js"><a href="" class="dismiss" aria-label="' . esc_attr__( 'Dismiss the browser warning panel' ) . '">' . __( 'Dismiss' ) . '</a></p>';
@@ -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.' );
+	}
+
+	?>
+	<p><?php echo $msg; ?></p>
+
+	<h3><?php _e( 'What is PHP and how does it affect my site?' ); ?></h3>
+	<p><?php _e( 'PHP is the programming language we use to build and maintain WordPress. Newer versions of PHP are both faster and more secure, so updating will have a positive effect on your site&#8217;s performance.' ); ?></p>
+
+	<p class="button-container">
+		<?php
+		printf(
+			'<a class="button button-primary" href="%1$s" target="_blank" rel="noopener noreferrer">%2$s <span class="screen-reader-text">%3$s</span><span aria-hidden="true" class="dashicons dashicons-external"></span></a>',
+			esc_url( wp_get_update_php_url() ),
+			__( 'Learn more about updating PHP' ),
+			/* translators: accessibility text */
+			__( '(opens in a new tab)' )
+		);
+		?>
+	</p>
+	<?php
+
+	wp_update_php_annotation();
+	wp_direct_php_update_button();
+}
+
+/**
+ * Adds an additional class to the PHP nag if the current version is insecure.
+ *
+ * @since 5.1.0
+ *
+ * @param array $classes Metabox classes.
+ * @return array Modified metabox classes.
+ */
+function dashboard_php_nag_class( $classes ) {
+	$response = wp_check_php_version();
+
+	if ( $response && isset( $response['is_secure'] ) && ! $response['is_secure'] ) {
+		$classes[] = 'php-insecure';
+	}
+
+	return $classes;
+}
+
+/**
  * Empty function usable by plugins to output empty dashboard widget (to be populated later by JS).
  */
 function wp_dashboard_empty() {}
@@ -1602,6 +1705,7 @@
 		<?php else : ?>
 			<li><?php printf( '<a href="%s" class="welcome-icon welcome-write-blog">' . __( 'Write your first blog post' ) . '</a>', admin_url( 'post-new.php' ) ); ?></li>
 			<li><?php printf( '<a href="%s" class="welcome-icon welcome-add-page">' . __( 'Add an About page' ) . '</a>', admin_url( 'post-new.php?post_type=page' ) ); ?></li>
+			<li><?php printf( '<a href="%s" class="welcome-icon welcome-setup-home">' . __( 'Set up your homepage' ) . '</a>', current_user_can( 'customize' ) ? add_query_arg( 'autofocus[section]', 'static_front_page', admin_url( 'customize.php' ) ) : admin_url( 'options-reading.php' ) ); ?></li>
 		<?php endif; ?>
 			<li><?php printf( '<a href="%s" class="welcome-icon welcome-view-site">' . __( 'View your site' ) . '</a>', home_url( '/' ) ); ?></li>
 		</ul>
@@ -1610,16 +1714,21 @@
 		<h3><?php _e( 'More Actions' ); ?></h3>
 		<ul>
 		<?php if ( current_theme_supports( 'widgets' ) || current_theme_supports( 'menus' ) ) : ?>
-			<li><div class="welcome-icon welcome-widgets-menus"><?php
-				if ( current_theme_supports( 'widgets' ) && current_theme_supports( 'menus' ) ) {
-					printf( __( 'Manage <a href="%1$s">widgets</a> or <a href="%2$s">menus</a>' ),
-						admin_url( 'widgets.php' ), admin_url( 'nav-menus.php' ) );
-				} elseif ( current_theme_supports( 'widgets' ) ) {
-					echo '<a href="' . admin_url( 'widgets.php' ) . '">' . __( 'Manage widgets' ) . '</a>';
-				} else {
-					echo '<a href="' . admin_url( 'nav-menus.php' ) . '">' . __( 'Manage menus' ) . '</a>';
-				}
-			?></div></li>
+			<li><div class="welcome-icon welcome-widgets-menus">
+			<?php
+			if ( current_theme_supports( 'widgets' ) && current_theme_supports( 'menus' ) ) {
+				printf(
+					__( 'Manage <a href="%1$s">widgets</a> or <a href="%2$s">menus</a>' ),
+					admin_url( 'widgets.php' ),
+					admin_url( 'nav-menus.php' )
+				);
+			} elseif ( current_theme_supports( 'widgets' ) ) {
+				echo '<a href="' . admin_url( 'widgets.php' ) . '">' . __( 'Manage widgets' ) . '</a>';
+			} else {
+				echo '<a href="' . admin_url( 'nav-menus.php' ) . '">' . __( 'Manage menus' ) . '</a>';
+			}
+			?>
+			</div></li>
 		<?php endif; ?>
 		<?php if ( current_user_can( 'manage_options' ) ) : ?>
 			<li><?php printf( '<a href="%s" class="welcome-icon welcome-comments">' . __( 'Turn comments on or off' ) . '</a>', admin_url( 'options-discussion.php' ) ); ?></li>
@@ -1631,140 +1740,3 @@
 	</div>
 	<?php
 }
-
-/**
- * Displays a Try Gutenberg Panel, to introduce people to Gutenberg
- *
- * @since 4.9.8
- */
-function wp_try_gutenberg_panel() {
-	$plugins = get_plugins();
-	$action = $url = $classes = '';
-	$classic_action = $classic_url = $classic_classes = '';
-
-	if ( current_user_can( 'install_plugins' ) ) {
-		if ( empty( $plugins['gutenberg/gutenberg.php'] ) ) {
-			if ( get_filesystem_method( array(), WP_PLUGIN_DIR ) === 'direct' ) {
-				$action = __( 'Install Gutenberg' );
-				$url = wp_nonce_url( self_admin_url( 'update.php?action=install-plugin&plugin=gutenberg' ), 'install-plugin_gutenberg' );
-				$classes = ' install-now';
-			}
-		} else if ( is_plugin_inactive( 'gutenberg/gutenberg.php' ) ) {
-			$action = __( 'Activate Gutenberg' );
-			$url = wp_nonce_url( self_admin_url( 'plugins.php?action=activate&plugin=gutenberg/gutenberg.php&from=try-gutenberg' ), 'activate-plugin_gutenberg/gutenberg.php' );
-			$classes = ' activate-now';
-		}
-
-		if ( empty( $plugins['classic-editor/classic-editor.php'] ) ) {
-			if ( get_filesystem_method( array(), WP_PLUGIN_DIR ) === 'direct' ) {
-				$classic_action = __( 'Install the Classic Editor' );
-				$classic_url = wp_nonce_url( self_admin_url( 'update.php?action=install-plugin&plugin=classic-editor' ), 'install-plugin_classic-editor' );
-				$classic_classes = ' install-now';
-			}
-		} else if ( is_plugin_inactive( 'classic-editor/classic-editor.php' ) ) {
-			$classic_action = __( 'Activate the Classic Editor' );
-			$classic_url = wp_nonce_url( self_admin_url( 'plugins.php?action=activate&plugin=classic-editor/classic-editor.php&from=try-gutenberg' ), 'activate-plugin_classic-editor/classic-editor.php' );
-			$classic_classes = ' activate-now';
-		} else {
-			$classic_action = __( 'The Classic Editor is activated' );
-			$classic_url = wp_nonce_url( self_admin_url( 'plugins.php?action=activate&plugin=classic-editor/classic-editor.php&from=try-gutenberg' ), 'activate-plugin_classic-editor/classic-editor.php' );;
-			$classic_classes = ' button-disabled install-now updated-message';
-		}
-	}
-
-	if ( current_user_can( 'edit_posts' ) && is_plugin_active( 'gutenberg/gutenberg.php' ) ) {
-		$action = __( 'Try Gutenberg' );
-		$url = admin_url( 'admin.php?page=gutenberg' );
-	}
-
-	?>
-	<div class="try-gutenberg-panel-content">
-		<h2><?php _e( 'A new, modern publishing experience is coming soon.' ); ?></h2>
-
-		<p class="about-description"><?php _e( "Take your words, media, and layout in new directions with Gutenberg, the WordPress editor we're currently building." ); ?></p>
-
-		<hr />
-
-		<div class="try-gutenberg-panel-column-container">
-			<div class="try-gutenberg-panel-column try-gutenberg-panel-image-column">
-				<picture>
-					<source srcset="about:blank" media="(max-width: 1024px)">
-					<img src="https://s.w.org/images/core/gutenberg-screenshot.png?<?php echo date( 'Ymd' ); ?>" alt="<?php esc_attr_e( 'Screenshot from the Gutenberg interface' ); ?>" />
-				</picture>
-			</div>
-			<div class="try-gutenberg-panel-column plugin-card-gutenberg">
-
-				<div>
-					<h3><?php _e( 'Test the new editor today.' ); ?></h3>
-
-					<p>
-						<?php _e( "You can take Gutenberg for a spin (and share your feedback, if you’d like) before we officially release it, by installing it as a plugin." ); ?>
-						<?php
-							printf(
-								/* translators: 1: Gutenberg call for testing handbook link, 2: Gutenberg GitHub repository issues link, 3: Gutenberg GitHub repository CONTRIBUTING.md link */
-								__( 'You can help by <a href="%1$s">testing</a>, <a href="%2$s">filing bugs</a>, or contributing on the <a href="%3$s">GitHub repository</a>.' ),
-								'https://make.wordpress.org/test/handbook/call-for-testing/gutenberg-testing/',
-								'https://github.com/WordPress/gutenberg/issues',
-								'https://github.com/WordPress/gutenberg/blob/master/CONTRIBUTING.md'
-							);
-						?>
-					</p>
-				</div>
-
-				<div class="try-gutenberg-action">
-					<?php if ( $action ) { ?>
-						<p><a class="button button-primary button-hero<?php echo $classes; ?>" href="<?php echo esc_url( $url ); ?>" data-name="<?php esc_attr_e( 'Gutenberg' ); ?>" data-slug="gutenberg"><?php echo $action; ?></a></p>
-					<?php } ?>
-
-					<p>
-						<?php
-							$learnmore = sprintf(
-								/* translators: Link to https://wordpress.org/gutenberg/ */
-								__( '<a href="%s">Learn more about Gutenberg</a>' ),
-								__( 'https://wordpress.org/gutenberg/' )
-							);
-
-							/**
-							 * Filters the "Learn more" link in the Try Gutenberg panel.
-							 *
-							 * It allows hosts or site owners to change the link, to provide extra
-							 * information about Gutenberg, specific to their service.
-							 *
-							 * WARNING: This filter will only exist in the 4.9.x series, it will not be
-							 * added to WordPress 5.0 and later.
-							 *
-							 * @since 4.9.8
-							 */
-							echo apply_filters( 'try_gutenberg_learn_more_link', $learnmore );
-						?>
-					</p>
-				</div>
-			</div>
-
-			<div class="try-gutenberg-panel-column plugin-card-classic-editor">
-
-				<div>
-					<h3><?php _e( 'Not quite ready?' ); ?></h3>
-
-					<p>
-						<?php _e( 'The new editor will be enabled by default in the next major release of WordPress. If you’re not sure how compatible your current themes and plugins are, we’ve got you covered.' ); ?>
-						<?php
-							printf(
-								/* translators: Link to the Classic Editor plugin page */
-								__( 'Install the <a href="%s">Classic Editor plugin</a> to keep using the current editor until you’re ready to make the switch.' ),
-								__( 'https://wordpress.org/plugins/classic-editor' )
-							);
-						?>
-					</p>
-				</div>
-
-				<?php if ( $classic_action ) { ?>
-					<div class="try-gutenberg-action">
-						<p><a class="button button-secondary button-hero<?php echo $classic_classes; ?>" href="<?php echo esc_url( $classic_url ); ?>" data-name="<?php esc_attr_e( 'Classic Editor' ); ?>" data-slug="classic-editor"><?php echo $classic_action; ?></a></p>
-					</div>
-				<?php } ?>
-			</div>
-		</div>
-	</div>
-	<?php
-}