wp/wp-admin/includes/update-core.php
changeset 7 cf61fcea0001
parent 5 5e2f62d02dcd
child 9 177826044cd9
--- a/wp/wp-admin/includes/update-core.php	Tue Jun 09 11:14:17 2015 +0000
+++ b/wp/wp-admin/includes/update-core.php	Mon Oct 14 17:39:30 2019 +0200
@@ -598,9 +598,10 @@
 'wp-admin/css/colors.min.css',
 'wp-admin/css/colors-rtl.css',
 'wp-admin/css/colors-rtl.min.css',
-'wp-admin/css/media-rtl.min.css',
-'wp-admin/css/media.min.css',
-'wp-admin/css/farbtastic-rtl.min.css',
+// 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',
 'wp-admin/images/lock-2x.png',
 'wp-admin/images/lock.png',
 'wp-admin/js/theme-preview.js',
@@ -612,7 +613,8 @@
 'wp-includes/js/plupload/changelog.txt',
 'wp-includes/js/plupload/plupload.silverlight.js',
 'wp-includes/js/plupload/plupload.flash.js',
-'wp-includes/js/plupload/plupload.js',
+// 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',
 'wp-includes/js/tinymce/plugins/media/js',
@@ -694,7 +696,89 @@
 'wp-includes/js/jquery/ui/jquery.ui.tabs.min.js',
 'wp-includes/js/jquery/ui/jquery.ui.tooltip.min.js',
 'wp-includes/js/jquery/ui/jquery.ui.widget.min.js',
-'wp-includes/js/tinymce/skins/wordpress/images/dashicon-no-alt.png'
+'wp-includes/js/tinymce/skins/wordpress/images/dashicon-no-alt.png',
+// 4.3
+'wp-admin/js/wp-fullscreen.js',
+'wp-admin/js/wp-fullscreen.min.js',
+'wp-includes/js/tinymce/wp-mce-help.php',
+'wp-includes/js/tinymce/plugins/wpfullscreen',
+// 4.5
+'wp-includes/theme-compat/comments-popup.php',
+// 4.6
+'wp-admin/includes/class-wp-automatic-upgrader.php', // Wrong file name, see #37628.
+// 4.8
+'wp-includes/js/tinymce/plugins/wpembed',
+'wp-includes/js/tinymce/plugins/media/moxieplayer.swf',
+'wp-includes/js/tinymce/skins/lightgray/fonts/readme.md',
+'wp-includes/js/tinymce/skins/lightgray/fonts/tinymce-small.json',
+'wp-includes/js/tinymce/skins/lightgray/fonts/tinymce.json',
+'wp-includes/js/tinymce/skins/lightgray/skin.ie7.min.css',
+// 4.9
+'wp-admin/css/press-this-editor-rtl.css',
+'wp-admin/css/press-this-editor-rtl.min.css',
+'wp-admin/css/press-this-editor.css',
+'wp-admin/css/press-this-editor.min.css',
+'wp-admin/css/press-this-rtl.css',
+'wp-admin/css/press-this-rtl.min.css',
+'wp-admin/css/press-this.css',
+'wp-admin/css/press-this.min.css',
+'wp-admin/includes/class-wp-press-this.php',
+'wp-admin/js/bookmarklet.js',
+'wp-admin/js/bookmarklet.min.js',
+'wp-admin/js/press-this.js',
+'wp-admin/js/press-this.min.js',
+'wp-includes/js/mediaelement/background.png',
+'wp-includes/js/mediaelement/bigplay.png',
+'wp-includes/js/mediaelement/bigplay.svg',
+'wp-includes/js/mediaelement/controls.png',
+'wp-includes/js/mediaelement/controls.svg',
+'wp-includes/js/mediaelement/flashmediaelement.swf',
+'wp-includes/js/mediaelement/froogaloop.min.js',
+'wp-includes/js/mediaelement/jumpforward.png',
+'wp-includes/js/mediaelement/loading.gif',
+'wp-includes/js/mediaelement/silverlightmediaelement.xap',
+'wp-includes/js/mediaelement/skipback.png',
+'wp-includes/js/plupload/plupload.flash.swf',
+'wp-includes/js/plupload/plupload.full.min.js',
+'wp-includes/js/plupload/plupload.silverlight.xap',
+'wp-includes/js/swfupload/plugins',
+'wp-includes/js/swfupload/swfupload.swf',
+	// 4.9.2
+	'wp-includes/js/mediaelement/lang',
+	'wp-includes/js/mediaelement/lang/ca.js',
+	'wp-includes/js/mediaelement/lang/cs.js',
+	'wp-includes/js/mediaelement/lang/de.js',
+	'wp-includes/js/mediaelement/lang/es.js',
+	'wp-includes/js/mediaelement/lang/fa.js',
+	'wp-includes/js/mediaelement/lang/fr.js',
+	'wp-includes/js/mediaelement/lang/hr.js',
+	'wp-includes/js/mediaelement/lang/hu.js',
+	'wp-includes/js/mediaelement/lang/it.js',
+	'wp-includes/js/mediaelement/lang/ja.js',
+	'wp-includes/js/mediaelement/lang/ko.js',
+	'wp-includes/js/mediaelement/lang/nl.js',
+	'wp-includes/js/mediaelement/lang/pl.js',
+	'wp-includes/js/mediaelement/lang/pt.js',
+	'wp-includes/js/mediaelement/lang/ro.js',
+	'wp-includes/js/mediaelement/lang/ru.js',
+	'wp-includes/js/mediaelement/lang/sk.js',
+	'wp-includes/js/mediaelement/lang/sv.js',
+	'wp-includes/js/mediaelement/lang/uk.js',
+	'wp-includes/js/mediaelement/lang/zh-cn.js',
+	'wp-includes/js/mediaelement/lang/zh.js',
+	'wp-includes/js/mediaelement/mediaelement-flash-audio-ogg.swf',
+	'wp-includes/js/mediaelement/mediaelement-flash-audio.swf',
+	'wp-includes/js/mediaelement/mediaelement-flash-video-hls.swf',
+	'wp-includes/js/mediaelement/mediaelement-flash-video-mdash.swf',
+	'wp-includes/js/mediaelement/mediaelement-flash-video.swf',
+	'wp-includes/js/mediaelement/renderers/dailymotion.js',
+	'wp-includes/js/mediaelement/renderers/dailymotion.min.js',
+	'wp-includes/js/mediaelement/renderers/facebook.js',
+	'wp-includes/js/mediaelement/renderers/facebook.min.js',
+	'wp-includes/js/mediaelement/renderers/soundcloud.js',
+	'wp-includes/js/mediaelement/renderers/soundcloud.min.js',
+	'wp-includes/js/mediaelement/renderers/twitch.js',
+	'wp-includes/js/mediaelement/renderers/twitch.min.js',
 );
 
 /**
@@ -710,6 +794,10 @@
  * Directories should be noted by suffixing it with a trailing slash (/)
  *
  * @since 3.2.0
+ * @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.
  * @global array $_new_bundled_files
  * @var array
  * @name $_new_bundled_files
@@ -717,26 +805,28 @@
 global $_new_bundled_files;
 
 $_new_bundled_files = array(
-	'plugins/akismet/'       => '2.0',
-	'themes/twentyten/'      => '3.0',
-	'themes/twentyeleven/'   => '3.2',
-	'themes/twentytwelve/'   => '3.5',
-	'themes/twentythirteen/' => '3.6',
-	'themes/twentyfourteen/' => '3.8',
-	'themes/twentyfifteen/'  => '4.1',
+	'plugins/akismet/'        => '2.0',
+	'themes/twentyten/'       => '3.0',
+	'themes/twentyeleven/'    => '3.2',
+	'themes/twentytwelve/'    => '3.5',
+	'themes/twentythirteen/'  => '3.6',
+	'themes/twentyfourteen/'  => '3.8',
+	'themes/twentyfifteen/'   => '4.1',
+	'themes/twentysixteen/'   => '4.4',
+	'themes/twentyseventeen/' => '4.7',
 );
 
 /**
- * Upgrade the core of WordPress.
+ * Upgrades the core of WordPress.
  *
  * This will create a .maintenance file at the base of the WordPress directory
  * to ensure that people can not access the web site, when the files are being
  * copied to their locations.
  *
- * The files in the {@link $_old_files} list will be removed and the new files
+ * The files in the `$_old_files` list will be removed and the new files
  * copied from the zip file after the database is upgraded.
  *
- * The files in the {@link $_new_bundled_files} list will be added to the installation
+ * The files in the `$_new_bundled_files` list will be added to the installation
  * if the version is greater than or equal to the old version being upgraded.
  *
  * The steps for the upgrader for after the new release is downloaded and
@@ -768,8 +858,16 @@
  *
  * @since 2.7.0
  *
+ * @global WP_Filesystem_Base $wp_filesystem
+ * @global array              $_old_files
+ * @global array              $_new_bundled_files
+ * @global wpdb               $wpdb
+ * @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.
+ * @param string $to   Path to old WordPress installation.
  * @return WP_Error|null WP_Error on failure, null on success.
  */
 function update_core($from, $to) {
@@ -778,7 +876,7 @@
 	@set_time_limit( 300 );
 
 	/**
-	 * Filter feedback messages displayed during the core update process.
+	 * Filters feedback messages displayed during the core update process.
 	 *
 	 * The filter is first evaluated after the zip file for the latest version
 	 * has been downloaded and unzipped. It is evaluated five more times during
@@ -810,10 +908,13 @@
 		return new WP_Error( 'insane_distro', __('The update could not be unpacked') );
 	}
 
-	// Import $wp_version, $required_php_version, and $required_mysql_version from the new version
-	// $wp_filesystem->wp_content_dir() returned unslashed pre-2.8
-	global $wp_version, $required_php_version, $required_mysql_version;
 
+	/*
+	 * Import $wp_version, $required_php_version, and $required_mysql_version from the new version.
+	 * DO NOT globalise any variables imported from `version-current.php` in this function.
+	 *
+	 * BC Note: $wp_filesystem->wp_content_dir() returned unslashed pre-2.8
+	 */
 	$versions_file = trailingslashit( $wp_filesystem->wp_content_dir() ) . 'upgrade/version-current.php';
 	if ( ! $wp_filesystem->copy( $from . $distro . 'wp-includes/version.php', $versions_file ) ) {
 		$wp_filesystem->delete( $from, true );
@@ -826,7 +927,7 @@
 
 	$php_version    = phpversion();
 	$mysql_version  = $wpdb->db_version();
-	$old_wp_version = $wp_version; // The version of WordPress we're updating from
+	$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 ) )
@@ -861,13 +962,15 @@
 		if ( is_array( $checksums ) && isset( $checksums[ $wp_version ] ) )
 			$checksums = $checksums[ $wp_version ]; // Compat code for 3.7-beta2
 		if ( is_array( $checksums ) ) {
-			foreach( $checksums as $file => $checksum ) {
+			foreach ( $checksums as $file => $checksum ) {
 				if ( 'wp-content' == substr( $file, 0, 10 ) )
 					continue;
 				if ( ! file_exists( ABSPATH . $file ) )
 					continue;
 				if ( ! file_exists( $working_dir_local . $file ) )
 					continue;
+				if ( '.' === dirname( $file ) && in_array( pathinfo( $file, PATHINFO_EXTENSION ), array( 'html', 'txt' ) ) )
+					continue;
 				if ( md5_file( ABSPATH . $file ) === $checksum )
 					$skip[] = $file;
 				else
@@ -929,6 +1032,10 @@
 				continue;
 			if ( ! file_exists( $working_dir_local . $file ) )
 				continue;
+			if ( '.' === dirname( $file ) && in_array( pathinfo( $file, PATHINFO_EXTENSION ), array( 'html', 'txt' ) ) ) {
+				$skip[] = $file;
+				continue;
+			}
 			if ( file_exists( ABSPATH . $file ) && md5_file( ABSPATH . $file ) == $checksum )
 				$skip[] = $file;
 			else
@@ -1047,12 +1154,19 @@
 		$old_file = $to . $old_file;
 		if ( !$wp_filesystem->exists($old_file) )
 			continue;
-		$wp_filesystem->delete($old_file, true);
+
+		// If the file isn't deleted, try writing an empty string to the file instead.
+		if ( ! $wp_filesystem->delete( $old_file, true ) && $wp_filesystem->is_file( $old_file ) ) {
+			$wp_filesystem->put_contents( $old_file, '' );
+		}
 	}
 
 	// 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
+	_upgrade_440_force_deactivate_incompatible_plugins();
+
 	// Upgrade DB with separate request
 	/** This filter is documented in wp-admin/includes/update-core.php */
 	apply_filters( 'update_feedback', __( 'Upgrading database…' ) );
@@ -1061,7 +1175,7 @@
 
 	// Clear the cache to prevent an update_option() from saving a stale db_version to the cache
 	wp_cache_flush();
-	// (Not all cache backends listen to 'flush')
+	// (Not all cache back ends listen to 'flush')
 	wp_cache_delete( 'alloptions', 'options' );
 
 	// Remove working directory
@@ -1101,8 +1215,10 @@
  * @since 3.7.0 Updated not to use a regular expression for the skip list
  * @see copy_dir()
  *
- * @param string $from source directory
- * @param string $to destination directory
+ * @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.
  */
@@ -1152,10 +1268,15 @@
 /**
  * Redirect to the About WordPress page after a successful upgrade.
  *
- * This function is only needed when the existing install is older than 3.4.0.
+ * This function is only needed when the existing installation is older than 3.4.0.
  *
  * @since 3.3.0
  *
+ * @global string $wp_version
+ * @global string $pagenow
+ * @global string $action
+ *
+ * @param string $new_version
  */
 function _redirect_to_about_wordpress( $new_version ) {
 	global $wp_version, $pagenow, $action;
@@ -1190,12 +1311,14 @@
 	include(ABSPATH . 'wp-admin/admin-footer.php');
 	exit();
 }
-add_action( '_core_updated_successfully', '_redirect_to_about_wordpress' );
 
 /**
  * Cleans up Genericons example files.
  *
  * @since 4.2.2
+ *
+ * @global array              $wp_theme_directories
+ * @global WP_Filesystem_Base $wp_filesystem
  */
 function _upgrade_422_remove_genericons() {
 	global $wp_theme_directories, $wp_filesystem;
@@ -1249,9 +1372,22 @@
 		$files[] = "{$directory}example.html";
 	}
 
-	foreach ( glob( $directory . '*', GLOB_ONLYDIR ) as $dir ) {
-		$files = array_merge( $files, _upgrade_422_find_genericons_files_in_folder( $dir ) );
+	$dirs = glob( $directory . '*', GLOB_ONLYDIR );
+	if ( $dirs ) {
+		foreach ( $dirs as $dir ) {
+			$files = array_merge( $files, _upgrade_422_find_genericons_files_in_folder( $dir ) );
+		}
 	}
 
 	return $files;
 }
+
+/**
+ * @ignore
+ * @since 4.4.0
+ */
+function _upgrade_440_force_deactivate_incompatible_plugins() {
+	if ( defined( 'REST_API_VERSION' ) && version_compare( REST_API_VERSION, '2.0-beta4', '<=' ) ) {
+		deactivate_plugins( array( 'rest-api/plugin.php' ), true );
+	}
+}