wp/wp-admin/includes/update-core.php
changeset 16 a86126ab1dd4
parent 9 177826044cd9
child 18 be944660c56a
--- a/wp/wp-admin/includes/update-core.php	Tue Oct 22 16:11:46 2019 +0200
+++ b/wp/wp-admin/includes/update-core.php	Tue Dec 15 13:49:49 2020 +0100
@@ -11,6 +11,7 @@
  * Stores files to be deleted.
  *
  * @since 2.7.0
+ *
  * @global array $_old_files
  * @var array
  * @name $_old_files
@@ -253,7 +254,7 @@
 	'wp-includes/js/jquery/autocomplete.js',
 	'wp-includes/js/jquery/interface.js',
 	'wp-includes/js/scriptaculous/prototype.js',
-	// Following file added back in 5.1 see #45645
+	// Following file added back in 5.1, see #45645.
 	//'wp-includes/js/tinymce/wp-tinymce.js',
 	// 3.1
 	'wp-admin/edit-attachment-rows.php',
@@ -536,7 +537,8 @@
 	'wp-admin/images/screenshots/twitter-embed-1.png',
 	'wp-admin/images/screenshots/twitter-embed-2.png',
 	'wp-admin/js/utils.js',
-	'wp-admin/options-privacy.php',
+	// Added back in 5.3 [45448], see #43895.
+	// 'wp-admin/options-privacy.php',
 	'wp-app.php',
 	'wp-includes/class-wp-atom-server.php',
 	'wp-includes/js/tinymce/themes/advanced/skins/wp_theme/ui.css',
@@ -599,7 +601,7 @@
 	'wp-admin/css/colors.min.css',
 	'wp-admin/css/colors-rtl.css',
 	'wp-admin/css/colors-rtl.min.css',
-	// Following files added back in 4.5 see #36083
+	// Following files added back in 4.5, see #36083.
 	// 'wp-admin/css/media-rtl.min.css',
 	// 'wp-admin/css/media.min.css',
 	// 'wp-admin/css/farbtastic-rtl.min.css',
@@ -614,7 +616,7 @@
 	'wp-includes/js/plupload/changelog.txt',
 	'wp-includes/js/plupload/plupload.silverlight.js',
 	'wp-includes/js/plupload/plupload.flash.js',
-	// Added back in 4.9 [41328], see #41755
+	// Added back in 4.9 [41328], see #41755.
 	// 'wp-includes/js/plupload/plupload.js',
 	'wp-includes/js/tinymce/plugins/spellchecker',
 	'wp-includes/js/tinymce/plugins/inlinepopups',
@@ -785,6 +787,17 @@
 	// 5.1
 	'wp-includes/random_compat/random_bytes_openssl.php',
 	'wp-includes/js/tinymce/wp-tinymce.js.gz',
+	// 5.3
+	'wp-includes/js/wp-a11y.js',     // Moved to: wp-includes/js/dist/a11y.js
+	'wp-includes/js/wp-a11y.min.js', // Moved to: wp-includes/js/dist/a11y.min.js
+	// 5.4
+	'wp-admin/js/wp-fullscreen-stub.js',
+	'wp-admin/js/wp-fullscreen-stub.min.js',
+	// 5.5
+	'wp-admin/css/ie.css',
+	'wp-admin/css/ie.min.css',
+	'wp-admin/css/ie-rtl.css',
+	'wp-admin/css/ie-rtl.min.css',
 );
 
 /**
@@ -803,7 +816,7 @@
  * @since 4.7.0 New themes were not automatically installed for 4.4-4.6 on
  *              upgrade. New themes are now installed again. To disable new
  *              themes from being installed on upgrade, explicitly define
- *              CORE_UPGRADE_SKIP_NEW_BUNDLED as false.
+ *              CORE_UPGRADE_SKIP_NEW_BUNDLED as true.
  * @global array $_new_bundled_files
  * @var array
  * @name $_new_bundled_files
@@ -821,6 +834,7 @@
 	'themes/twentysixteen/'   => '4.4',
 	'themes/twentyseventeen/' => '4.7',
 	'themes/twentynineteen/'  => '5.0',
+	'themes/twentytwenty/'    => '5.3',
 );
 
 /**
@@ -868,19 +882,19 @@
  * @global WP_Filesystem_Base $wp_filesystem          WordPress filesystem subclass.
  * @global array              $_old_files
  * @global array              $_new_bundled_files
- * @global wpdb               $wpdb
+ * @global wpdb               $wpdb                   WordPress database abstraction object.
  * @global string             $wp_version
  * @global string             $required_php_version
  * @global string             $required_mysql_version
  *
  * @param string $from New release unzipped path.
  * @param string $to   Path to old WordPress installation.
- * @return WP_Error|null WP_Error on failure, null on success.
+ * @return string|WP_Error New WordPress version on success, WP_Error on failure.
  */
 function update_core( $from, $to ) {
 	global $wp_filesystem, $_old_files, $_new_bundled_files, $wpdb;
 
-	@set_time_limit( 300 );
+	set_time_limit( 300 );
 
 	/**
 	 * Filters feedback messages displayed during the core update process.
@@ -928,13 +942,13 @@
 	}
 
 	$wp_filesystem->chmod( $versions_file, FS_CHMOD_FILE );
-	require( WP_CONTENT_DIR . '/upgrade/version-current.php' );
+	require WP_CONTENT_DIR . '/upgrade/version-current.php';
 	$wp_filesystem->delete( $versions_file );
 
 	$php_version       = phpversion();
 	$mysql_version     = $wpdb->db_version();
-	$old_wp_version    = $GLOBALS['wp_version']; // The version of WordPress we're updating from
-	$development_build = ( false !== strpos( $old_wp_version . $wp_version, '-' ) ); // a dash in the version indicates a Development release
+	$old_wp_version    = $GLOBALS['wp_version']; // The version of WordPress we're updating from.
+	$development_build = ( false !== strpos( $old_wp_version . $wp_version, '-' ) ); // A dash in the version indicates a development release.
 	$php_compat        = version_compare( $php_version, $required_php_version, '>=' );
 	if ( file_exists( WP_CONTENT_DIR . '/db.php' ) && empty( $wpdb->is_mysql ) ) {
 		$mysql_compat = true;
@@ -947,12 +961,17 @@
 	}
 
 	$php_update_message = '';
+
 	if ( function_exists( 'wp_get_update_php_url' ) ) {
-		/* translators: %s: Update PHP page URL */
-		$php_update_message = '</p><p>' . sprintf( __( '<a href="%s">Learn more about updating PHP</a>.' ), esc_url( wp_get_update_php_url() ) );
+		/* translators: %s: URL to Update PHP page. */
+		$php_update_message = '</p><p>' . sprintf(
+			__( '<a href="%s">Learn more about updating PHP</a>.' ),
+			esc_url( wp_get_update_php_url() )
+		);
 
 		if ( function_exists( 'wp_get_update_php_annotation' ) ) {
 			$annotation = wp_get_update_php_annotation();
+
 			if ( $annotation ) {
 				$php_update_message .= '</p><p><em>' . $annotation . '</em>';
 			}
@@ -960,33 +979,75 @@
 	}
 
 	if ( ! $mysql_compat && ! $php_compat ) {
-		return new WP_Error( 'php_mysql_not_compatible', sprintf( __( 'The update cannot be installed because WordPress %1$s requires PHP version %2$s or higher and MySQL version %3$s or higher. You are running PHP version %4$s and MySQL version %5$s.' ), $wp_version, $required_php_version, $required_mysql_version, $php_version, $mysql_version ) . $php_update_message );
+		return new WP_Error(
+			'php_mysql_not_compatible',
+			sprintf(
+				/* translators: 1: WordPress version number, 2: Minimum required PHP version number, 3: Minimum required MySQL version number, 4: Current PHP version number, 5: Current MySQL version number. */
+				__( 'The update cannot be installed because WordPress %1$s requires PHP version %2$s or higher and MySQL version %3$s or higher. You are running PHP version %4$s and MySQL version %5$s.' ),
+				$wp_version,
+				$required_php_version,
+				$required_mysql_version,
+				$php_version,
+				$mysql_version
+			) . $php_update_message
+		);
 	} elseif ( ! $php_compat ) {
-		return new WP_Error( 'php_not_compatible', sprintf( __( 'The update cannot be installed because WordPress %1$s requires PHP version %2$s or higher. You are running version %3$s.' ), $wp_version, $required_php_version, $php_version ) . $php_update_message );
+		return new WP_Error(
+			'php_not_compatible',
+			sprintf(
+				/* translators: 1: WordPress version number, 2: Minimum required PHP version number, 3: Current PHP version number. */
+				__( 'The update cannot be installed because WordPress %1$s requires PHP version %2$s or higher. You are running version %3$s.' ),
+				$wp_version,
+				$required_php_version,
+				$php_version
+			) . $php_update_message
+		);
 	} elseif ( ! $mysql_compat ) {
-		return new WP_Error( 'mysql_not_compatible', sprintf( __( 'The update cannot be installed because WordPress %1$s requires MySQL version %2$s or higher. You are running version %3$s.' ), $wp_version, $required_mysql_version, $mysql_version ) );
+		return new WP_Error(
+			'mysql_not_compatible',
+			sprintf(
+				/* translators: 1: WordPress version number, 2: Minimum required MySQL version number, 3: Current MySQL version number. */
+				__( 'The update cannot be installed because WordPress %1$s requires MySQL version %2$s or higher. You are running version %3$s.' ),
+				$wp_version,
+				$required_mysql_version,
+				$mysql_version
+			)
+		);
+	}
+
+	// Add a warning when the JSON PHP extension is missing.
+	if ( ! extension_loaded( 'json' ) ) {
+		return new WP_Error(
+			'php_not_compatible_json',
+			sprintf(
+				/* translators: 1: WordPress version number, 2: The PHP extension name needed. */
+				__( 'The update cannot be installed because WordPress %1$s requires the %2$s PHP extension.' ),
+				$wp_version,
+				'JSON'
+			)
+		);
 	}
 
 	/** This filter is documented in wp-admin/includes/update-core.php */
 	apply_filters( 'update_feedback', __( 'Preparing to install the latest version&#8230;' ) );
 
-	// Don't copy wp-content, we'll deal with that below
-	// We also copy version.php last so failed updates report their old version
+	// Don't copy wp-content, we'll deal with that below.
+	// We also copy version.php last so failed updates report their old version.
 	$skip              = array( 'wp-content', 'wp-includes/version.php' );
 	$check_is_writable = array();
 
-	// Check to see which files don't really need updating - only available for 3.7 and higher
+	// Check to see which files don't really need updating - only available for 3.7 and higher.
 	if ( function_exists( 'get_core_checksums' ) ) {
-		// Find the local version of the working directory
+		// Find the local version of the working directory.
 		$working_dir_local = WP_CONTENT_DIR . '/upgrade/' . basename( $from ) . $distro;
 
 		$checksums = get_core_checksums( $wp_version, isset( $wp_local_package ) ? $wp_local_package : 'en_US' );
 		if ( is_array( $checksums ) && isset( $checksums[ $wp_version ] ) ) {
-			$checksums = $checksums[ $wp_version ]; // Compat code for 3.7-beta2
+			$checksums = $checksums[ $wp_version ]; // Compat code for 3.7-beta2.
 		}
 		if ( is_array( $checksums ) ) {
 			foreach ( $checksums as $file => $checksum ) {
-				if ( 'wp-content' == substr( $file, 0, 10 ) ) {
+				if ( 'wp-content' === substr( $file, 0, 10 ) ) {
 					continue;
 				}
 				if ( ! file_exists( ABSPATH . $file ) ) {
@@ -995,7 +1056,7 @@
 				if ( ! file_exists( $working_dir_local . $file ) ) {
 					continue;
 				}
-				if ( '.' === dirname( $file ) && in_array( pathinfo( $file, PATHINFO_EXTENSION ), array( 'html', 'txt' ) ) ) {
+				if ( '.' === dirname( $file ) && in_array( pathinfo( $file, PATHINFO_EXTENSION ), array( 'html', 'txt' ), true ) ) {
 					continue;
 				}
 				if ( md5_file( ABSPATH . $file ) === $checksum ) {
@@ -1031,7 +1092,7 @@
 
 	/** This filter is documented in wp-admin/includes/update-core.php */
 	apply_filters( 'update_feedback', __( 'Enabling Maintenance mode&#8230;' ) );
-	// Create maintenance file to signal that we are upgrading
+	// Create maintenance file to signal that we are upgrading.
 	$maintenance_string = '<?php $upgrading = ' . time() . '; ?>';
 	$maintenance_file   = $to . '.maintenance';
 	$wp_filesystem->delete( $maintenance_file );
@@ -1045,7 +1106,7 @@
 		$result = new WP_Error( $result->get_error_code(), $result->get_error_message(), substr( $result->get_error_data(), strlen( $to ) ) );
 	}
 
-	// Since we know the core files have copied over, we can now copy the version file
+	// Since we know the core files have copied over, we can now copy the version file.
 	if ( ! is_wp_error( $result ) ) {
 		if ( ! $wp_filesystem->copy( $from . $distro . 'wp-includes/version.php', $to . 'wp-includes/version.php', true /* overwrite */ ) ) {
 			$wp_filesystem->delete( $from, true );
@@ -1054,18 +1115,18 @@
 		$wp_filesystem->chmod( $to . 'wp-includes/version.php', FS_CHMOD_FILE );
 	}
 
-	// Check to make sure everything copied correctly, ignoring the contents of wp-content
+	// Check to make sure everything copied correctly, ignoring the contents of wp-content.
 	$skip   = array( 'wp-content' );
 	$failed = array();
 	if ( isset( $checksums ) && is_array( $checksums ) ) {
 		foreach ( $checksums as $file => $checksum ) {
-			if ( 'wp-content' == substr( $file, 0, 10 ) ) {
+			if ( 'wp-content' === substr( $file, 0, 10 ) ) {
 				continue;
 			}
 			if ( ! file_exists( $working_dir_local . $file ) ) {
 				continue;
 			}
-			if ( '.' === dirname( $file ) && in_array( pathinfo( $file, PATHINFO_EXTENSION ), array( 'html', 'txt' ) ) ) {
+			if ( '.' === dirname( $file ) && in_array( pathinfo( $file, PATHINFO_EXTENSION ), array( 'html', 'txt' ), true ) ) {
 				$skip[] = $file;
 				continue;
 			}
@@ -1077,7 +1138,7 @@
 		}
 	}
 
-	// Some files didn't copy properly
+	// Some files didn't copy properly.
 	if ( ! empty( $failed ) ) {
 		$total_size = 0;
 		foreach ( $failed as $file ) {
@@ -1099,8 +1160,8 @@
 		}
 	}
 
-	// Custom Content Directory needs updating now.
-	// Copy Languages
+	// Custom content directory needs updating now.
+	// Copy languages.
 	if ( ! is_wp_error( $result ) && $wp_filesystem->is_dir( $from . $distro . 'wp-content/languages' ) ) {
 		if ( WP_LANG_DIR != ABSPATH . WPINC . '/languages' || @is_dir( WP_LANG_DIR ) ) {
 			$lang_dir = WP_LANG_DIR;
@@ -1108,9 +1169,11 @@
 			$lang_dir = WP_CONTENT_DIR . '/languages';
 		}
 
-		if ( ! @is_dir( $lang_dir ) && 0 === strpos( $lang_dir, ABSPATH ) ) { // Check the language directory exists first
-			$wp_filesystem->mkdir( $to . str_replace( ABSPATH, '', $lang_dir ), FS_CHMOD_DIR ); // If it's within the ABSPATH we can handle it here, otherwise they're out of luck.
-			clearstatcache(); // for FTP, Need to clear the stat cache
+		// Check if the language directory exists first.
+		if ( ! @is_dir( $lang_dir ) && 0 === strpos( $lang_dir, ABSPATH ) ) {
+			// If it's within the ABSPATH we can handle it here, otherwise they're out of luck.
+			$wp_filesystem->mkdir( $to . str_replace( ABSPATH, '', $lang_dir ), FS_CHMOD_DIR );
+			clearstatcache(); // For FTP, need to clear the stat cache.
 		}
 
 		if ( @is_dir( $lang_dir ) ) {
@@ -1126,35 +1189,40 @@
 
 	/** This filter is documented in wp-admin/includes/update-core.php */
 	apply_filters( 'update_feedback', __( 'Disabling Maintenance mode&#8230;' ) );
-	// Remove maintenance file, we're done with potential site-breaking changes
+	// Remove maintenance file, we're done with potential site-breaking changes.
 	$wp_filesystem->delete( $maintenance_file );
 
 	// 3.5 -> 3.5+ - an empty twentytwelve directory was created upon upgrade to 3.5 for some users, preventing installation of Twenty Twelve.
-	if ( '3.5' == $old_wp_version ) {
+	if ( '3.5' === $old_wp_version ) {
 		if ( is_dir( WP_CONTENT_DIR . '/themes/twentytwelve' ) && ! file_exists( WP_CONTENT_DIR . '/themes/twentytwelve/style.css' ) ) {
 			$wp_filesystem->delete( $wp_filesystem->wp_themes_dir() . 'twentytwelve/' );
 		}
 	}
 
-	// Copy New bundled plugins & themes
-	// This gives us the ability to install new plugins & themes bundled with future versions of WordPress whilst avoiding the re-install upon upgrade issue.
-	// $development_build controls us overwriting bundled themes and plugins when a non-stable release is being updated
+	/*
+	 * Copy new bundled plugins & themes.
+	 * This gives us the ability to install new plugins & themes bundled with
+	 * future versions of WordPress whilst avoiding the re-install upon upgrade issue.
+	 * $development_build controls us overwriting bundled themes and plugins when a non-stable release is being updated.
+	 */
 	if ( ! is_wp_error( $result ) && ( ! defined( 'CORE_UPGRADE_SKIP_NEW_BUNDLED' ) || ! CORE_UPGRADE_SKIP_NEW_BUNDLED ) ) {
 		foreach ( (array) $_new_bundled_files as $file => $introduced_version ) {
-			// If a $development_build or if $introduced version is greater than what the site was previously running
+			// If a $development_build or if $introduced version is greater than what the site was previously running.
 			if ( $development_build || version_compare( $introduced_version, $old_wp_version, '>' ) ) {
-				$directory             = ( '/' == $file[ strlen( $file ) - 1 ] );
-				list($type, $filename) = explode( '/', $file, 2 );
+				$directory = ( '/' === $file[ strlen( $file ) - 1 ] );
 
-				// Check to see if the bundled items exist before attempting to copy them
+				list( $type, $filename ) = explode( '/', $file, 2 );
+
+				// Check to see if the bundled items exist before attempting to copy them.
 				if ( ! $wp_filesystem->exists( $from . $distro . 'wp-content/' . $file ) ) {
 					continue;
 				}
 
-				if ( 'plugins' == $type ) {
+				if ( 'plugins' === $type ) {
 					$dest = $wp_filesystem->wp_plugins_dir();
-				} elseif ( 'themes' == $type ) {
-					$dest = trailingslashit( $wp_filesystem->wp_themes_dir() ); // Back-compat, ::wp_themes_dir() did not return trailingslash'd pre-3.2
+				} elseif ( 'themes' === $type ) {
+					// Back-compat, ::wp_themes_dir() did not return trailingslash'd pre-3.2.
+					$dest = trailingslashit( $wp_filesystem->wp_themes_dir() );
 				} else {
 					continue;
 				}
@@ -1184,16 +1252,16 @@
 					}
 				}
 			}
-		} //end foreach
+		} // End foreach.
 	}
 
-	// Handle $result error from the above blocks
+	// Handle $result error from the above blocks.
 	if ( is_wp_error( $result ) ) {
 		$wp_filesystem->delete( $from, true );
 		return $result;
 	}
 
-	// Remove old files
+	// Remove old files.
 	foreach ( $_old_files as $old_file ) {
 		$old_file = $to . $old_file;
 		if ( ! $wp_filesystem->exists( $old_file ) ) {
@@ -1206,27 +1274,27 @@
 		}
 	}
 
-	// Remove any Genericons example.html's from the filesystem
+	// Remove any Genericons example.html's from the filesystem.
 	_upgrade_422_remove_genericons();
 
-	// Remove the REST API plugin if its version is Beta 4 or lower
+	// Remove the REST API plugin if its version is Beta 4 or lower.
 	_upgrade_440_force_deactivate_incompatible_plugins();
 
-	// Upgrade DB with separate request
+	// Upgrade DB with separate request.
 	/** This filter is documented in wp-admin/includes/update-core.php */
 	apply_filters( 'update_feedback', __( 'Upgrading database&#8230;' ) );
 	$db_upgrade_url = admin_url( 'upgrade.php?step=upgrade_db' );
 	wp_remote_post( $db_upgrade_url, array( 'timeout' => 60 ) );
 
-	// Clear the cache to prevent an update_option() from saving a stale db_version to the cache
+	// Clear the cache to prevent an update_option() from saving a stale db_version to the cache.
 	wp_cache_flush();
-	// (Not all cache back ends listen to 'flush')
+	// Not all cache back ends listen to 'flush'.
 	wp_cache_delete( 'alloptions', 'options' );
 
-	// Remove working directory
+	// Remove working directory.
 	$wp_filesystem->delete( $from, true );
 
-	// Force refresh of update information
+	// Force refresh of update information.
 	if ( function_exists( 'delete_site_transient' ) ) {
 		delete_site_transient( 'update_core' );
 	} else {
@@ -1242,7 +1310,7 @@
 	 */
 	do_action( '_core_updated_successfully', $wp_version );
 
-	// Clear the option that blocks auto updates after failures, now that we've been successful.
+	// Clear the option that blocks auto-updates after failures, now that we've been successful.
 	if ( function_exists( 'delete_site_option' ) ) {
 		delete_site_option( 'auto_core_update_failed' );
 	}
@@ -1252,22 +1320,28 @@
 
 /**
  * Copies a directory from one location to another via the WordPress Filesystem Abstraction.
+ *
  * Assumes that WP_Filesystem() has already been called and setup.
  *
- * This is a temporary function for the 3.1 -> 3.2 upgrade, as well as for those upgrading to
- * 3.7+
+ * This is a standalone copy of the `copy_dir()` function that is used to
+ * upgrade the core files. It is placed here so that the version of this
+ * function from the *new* WordPress version will be called.
+ *
+ * It was initially added for the 3.1 -> 3.2 upgrade.
  *
  * @ignore
  * @since 3.2.0
- * @since 3.7.0 Updated not to use a regular expression for the skip list
+ * @since 3.7.0 Updated not to use a regular expression for the skip list.
+ *
  * @see copy_dir()
+ * @link https://core.trac.wordpress.org/ticket/17173
  *
  * @global WP_Filesystem_Base $wp_filesystem
  *
- * @param string $from     source directory
- * @param string $to       destination directory
- * @param array $skip_list a list of files/folders to skip copying
- * @return mixed WP_Error on failure, True on success.
+ * @param string   $from      Source directory.
+ * @param string   $to        Destination directory.
+ * @param string[] $skip_list Array of files/folders to skip copying.
+ * @return true|WP_Error True on success, WP_Error on failure.
  */
 function _copy_dir( $from, $to, $skip_list = array() ) {
 	global $wp_filesystem;
@@ -1278,11 +1352,11 @@
 	$to   = trailingslashit( $to );
 
 	foreach ( (array) $dirlist as $filename => $fileinfo ) {
-		if ( in_array( $filename, $skip_list ) ) {
+		if ( in_array( $filename, $skip_list, true ) ) {
 			continue;
 		}
 
-		if ( 'f' == $fileinfo['type'] ) {
+		if ( 'f' === $fileinfo['type'] ) {
 			if ( ! $wp_filesystem->copy( $from . $filename, $to . $filename, true, FS_CHMOD_FILE ) ) {
 				// If copy failed, chmod file to 0644 and try again.
 				$wp_filesystem->chmod( $to . $filename, FS_CHMOD_FILE );
@@ -1290,7 +1364,12 @@
 					return new WP_Error( 'copy_failed__copy_dir', __( 'Could not copy file.' ), $to . $filename );
 				}
 			}
-		} elseif ( 'd' == $fileinfo['type'] ) {
+
+			// `wp_opcache_invalidate()` only exists in WordPress 5.5, so don't run it when upgrading to 5.5.
+			if ( function_exists( 'wp_opcache_invalidate' ) ) {
+				wp_opcache_invalidate( $to . $filename );
+			}
+		} elseif ( 'd' === $fileinfo['type'] ) {
 			if ( ! $wp_filesystem->is_dir( $to . $filename ) ) {
 				if ( ! $wp_filesystem->mkdir( $to . $filename, FS_CHMOD_DIR ) ) {
 					return new WP_Error( 'mkdir_failed__copy_dir', __( 'Could not create directory.' ), $to . $filename );
@@ -1324,7 +1403,7 @@
  *
  * @since 3.3.0
  *
- * @global string $wp_version
+ * @global string $wp_version The WordPress version string.
  * @global string $pagenow
  * @global string $action
  *
@@ -1338,23 +1417,37 @@
 	}
 
 	// Ensure we only run this on the update-core.php page. The Core_Upgrader may be used in other contexts.
-	if ( 'update-core.php' != $pagenow ) {
+	if ( 'update-core.php' !== $pagenow ) {
 		return;
 	}
 
-	if ( 'do-core-upgrade' != $action && 'do-core-reinstall' != $action ) {
+	if ( 'do-core-upgrade' !== $action && 'do-core-reinstall' !== $action ) {
 		return;
 	}
 
 	// Load the updated default text localization domain for new strings.
 	load_default_textdomain();
 
-	// See do_core_upgrade()
-	show_message( __( 'WordPress updated successfully' ) );
+	// See do_core_upgrade().
+	show_message( __( 'WordPress updated successfully.' ) );
 
 	// self_admin_url() won't exist when upgrading from <= 3.0, so relative URLs are intentional.
-	show_message( '<span class="hide-if-no-js">' . sprintf( __( 'Welcome to WordPress %1$s. You will be redirected to the About WordPress screen. If not, click <a href="%2$s">here</a>.' ), $new_version, 'about.php?updated' ) . '</span>' );
-	show_message( '<span class="hide-if-js">' . sprintf( __( 'Welcome to WordPress %1$s. <a href="%2$s">Learn more</a>.' ), $new_version, 'about.php?updated' ) . '</span>' );
+	show_message(
+		'<span class="hide-if-no-js">' . sprintf(
+			/* translators: 1: WordPress version, 2: URL to About screen. */
+			__( 'Welcome to WordPress %1$s. You will be redirected to the About WordPress screen. If not, click <a href="%2$s">here</a>.' ),
+			$new_version,
+			'about.php?updated'
+		) . '</span>'
+	);
+	show_message(
+		'<span class="hide-if-js">' . sprintf(
+			/* translators: 1: WordPress version, 2: URL to About screen. */
+			__( 'Welcome to WordPress %1$s. <a href="%2$s">Learn more</a>.' ),
+			$new_version,
+			'about.php?updated'
+		) . '</span>'
+	);
 	echo '</div>';
 	?>
 <script type="text/javascript">
@@ -1363,8 +1456,8 @@
 	<?php
 
 	// Include admin-footer.php and exit.
-	include( ABSPATH . 'wp-admin/admin-footer.php' );
-	exit();
+	require_once ABSPATH . 'wp-admin/admin-footer.php';
+	exit;
 }
 
 /**
@@ -1381,13 +1474,13 @@
 	// A list of the affected files using the filesystem absolute paths.
 	$affected_files = array();
 
-	// Themes
+	// Themes.
 	foreach ( $wp_theme_directories as $directory ) {
 		$affected_theme_files = _upgrade_422_find_genericons_files_in_folder( $directory );
 		$affected_files       = array_merge( $affected_files, $affected_theme_files );
 	}
 
-	// Plugins
+	// Plugins.
 	$affected_plugin_files = _upgrade_422_find_genericons_files_in_folder( WP_PLUGIN_DIR );
 	$affected_files        = array_merge( $affected_files, $affected_plugin_files );
 
@@ -1397,7 +1490,7 @@
 			continue;
 		}
 
-		// The path when the file is accessed via WP_Filesystem may differ in the case of FTP
+		// The path when the file is accessed via WP_Filesystem may differ in the case of FTP.
 		$remote_file = $gen_dir . basename( $file );
 
 		if ( ! $wp_filesystem->exists( $remote_file ) ) {