From 1417929e0d6b247ee47ee965477c310dbf111b19 Mon Sep 17 00:00:00 2001 From: Aaron Jorbin Date: Wed, 6 May 2015 18:36:48 +0000 Subject: [PATCH] When upgrading WordPress remove genericons example.html files Props @dd32, @boone, @johnjamesjacoby, @drewapicture, @jorbin --This line,build.wordpress-develop.dea and those below, will be ignored-- M src/wp-admin/includes/update-core.php git-svn-id: https://develop.svn.wordpress.org/trunk@32385 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/includes/update-core.php | 67 +++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/src/wp-admin/includes/update-core.php b/src/wp-admin/includes/update-core.php index 5a97b18342..a15cc887e1 100644 --- a/src/wp-admin/includes/update-core.php +++ b/src/wp-admin/includes/update-core.php @@ -1050,6 +1050,9 @@ function update_core($from, $to) { $wp_filesystem->delete($old_file, true); } + // Remove any Genericons example.html's from the filesystem + _upgrade_422_remove_genericons(); + // Upgrade DB with separate request /** This filter is documented in wp-admin/includes/update-core.php */ apply_filters( 'update_feedback', __( 'Upgrading database…' ) ); @@ -1188,3 +1191,67 @@ window.location = 'about.php?updated'; exit(); } add_action( '_core_updated_successfully', '_redirect_to_about_wordpress' ); + +/** + * Cleans up Genericons example files. + * + * @since 4.2.2 + */ +function _upgrade_422_remove_genericons() { + global $wp_theme_directories, $wp_filesystem; + + // A list of the affected files using the filesystem absolute paths. + $affected_files = array(); + + // 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 + $affected_plugin_files = _upgrade_422_find_genericons_files_in_folder( WP_PLUGIN_DIR ); + $affected_files = array_merge( $affected_files, $affected_plugin_files ); + + foreach ( $affected_files as $file ) { + $gen_dir = $wp_filesystem->find_folder( trailingslashit( dirname( $file ) ) ); + if ( empty( $gen_dir ) ) { + continue; + } + + // 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 ) ) { + continue; + } + + if ( ! $wp_filesystem->delete( $remote_file, false, 'f' ) ) { + $wp_filesystem->put_contents( $remote_file, '' ); + } + } +} + +/** + * Recursively find Genericons example files in a given folder. + * + * @ignore + * @since 4.2.2 + * + * @param string $directory Directory path. Expects trailingslashed. + * @return array + */ +function _upgrade_422_find_genericons_files_in_folder( $directory ) { + $directory = trailingslashit( $directory ); + $files = array(); + + if ( file_exists( "{$directory}example.html" ) && false !== strpos( file_get_contents( "{$directory}example.html" ), 'Genericons' ) ) { + $files[] = "{$directory}example.html"; + } + + foreach ( glob( $directory . '*', GLOB_ONLYDIR ) as $dir ) { + $files = array_merge( $files, _upgrade_422_find_genericons_files_in_folder( $dir ) ); + } + + return $files; +}