WordPress.org

Make WordPress Core

Ticket #18200: 18200.2.diff

File 18200.2.diff, 7.8 KB (added by nacin, 8 years ago)
  • wp-admin/includes/class-wp-upgrader-skins.php

     
    608608        function bulk_footer() {}
    609609        function before() {}
    610610        function after() {}
    611 }
    612  No newline at end of file
     611}
     612
     613/**
     614 * A basic Upgrader skin which doesn't have any headers or footers.
     615 *
     616 * @package WordPress
     617 * @subpackage Upgrader
     618 * @since 3.7.0
     619 */
     620class Headerless_Upgrader_Skin extends WP_Upgrader_Skin {
     621        function before() {}
     622        function after() {}
     623        function header() {}
     624        function footer() {}
     625}
  • wp-admin/includes/class-wp-upgrader.php

     
    10731073
    10741074}
    10751075
     1076add_action( 'upgrader_process_complete', array( 'Language_Pack_Upgrader', 'async_upgrade' ), 20, 3 );
     1077class Language_Pack_Upgrader extends WP_Upgrader {
     1078
     1079        var $result;
     1080        var $bulk = true;
     1081
     1082        static function async_upgrade( $upgrader, $context, $package ) {
     1083                // Don't do Language updates on language updates on language updates..
     1084                if ( $upgrader instanceof Language_Pack_Upgrader )
     1085                        return;
     1086
     1087                echo '<!-- start languages --><div style="padding-left: 3em; border-left: 5px solid grey">';
     1088
     1089                $lp_upgrader = new Language_Pack_Upgrader( new Headerless_Upgrader_Skin() );
     1090
     1091                $lp_upgrader->upgrade();
     1092
     1093                echo '</div><!-- end of languages -->';
     1094        }
     1095
     1096        function upgrade_strings() {
     1097                $this->strings['starting_upgrade'] = __( 'Some of your language files need updating, Sit tight for a few more seconds while we update them as well.' );
     1098                $this->strings['up_to_date'] = __('The language is up to date.'); // We need to silently skip this case
     1099                $this->strings['no_package'] = __('Update package not available.');
     1100                $this->strings['downloading_package'] = __('Downloading language update from <span class="code">%s</span>&#8230;');
     1101                $this->strings['unpack_package'] = __('Unpacking the update&#8230;');
     1102                $this->strings['remove_old'] = __('Removing the old version of the language&#8230;');
     1103                $this->strings['remove_old_failed'] = __('Could not remove the old language.');
     1104                $this->strings['process_failed'] = __('Language update failed.');
     1105                $this->strings['process_success'] = __('Language updated successfully.');
     1106        }
     1107
     1108        function upgrade() {
     1109                return $this->bulk_upgrade();
     1110        }
     1111
     1112        function bulk_upgrade() {
     1113
     1114                $this->init();
     1115                $this->upgrade_strings();
     1116
     1117                $language_updates = wp_get_translation_updates();
     1118
     1119                if ( empty( $language_updates ) )
     1120                        return true;
     1121
     1122                $this->skin->feedback( 'starting_upgrade' );
     1123
     1124                add_filter( 'upgrader_source_selection', array( &$this, 'check_package' ), 10, 3 );
     1125
     1126                $this->skin->header();
     1127
     1128                // Connect to the Filesystem first.
     1129                $res = $this->fs_connect( array( WP_CONTENT_DIR, WP_LANG_DIR ) );
     1130                if ( ! $res ) {
     1131                        $this->skin->footer();
     1132                        return false;
     1133                }
     1134
     1135                $results = array();
     1136
     1137                $this->update_count = count( $language_updates );
     1138                $this->update_current = 0;
     1139                foreach ( $language_updates as $language_update ) {
     1140
     1141                        $destination = WP_LANG_DIR;
     1142                        if ( 'plugin' == $language_update->type ) {
     1143                                $destination .= '/plugins';
     1144                        } elseif ( 'theme' == $language_update->type ) {
     1145                                $destination .= '/themes';
     1146                        }
     1147
     1148                        $this->update_current++;
     1149
     1150                        $options = array(
     1151                                'package' => $language_update->package,
     1152                                'destination' => $destination,
     1153                                'clear_destination' => false,
     1154                                'abort_if_destination_exists' => false, // We expect the destination to exist.
     1155                                'clear_working' => true,
     1156                                'is_multi' => true,
     1157                                'hook_extra' => array(
     1158                                        'language_update_type' => $language_update->type,
     1159                                        'language_update' => $language_update,
     1160                                )
     1161                        );
     1162
     1163                        $result = $this->run( $options );
     1164
     1165                        $results[] = $this->result;
     1166
     1167                        // Prevent credentials auth screen from displaying multiple times
     1168                        if ( false === $result )
     1169                                break;
     1170                } //end foreach $language_updates
     1171
     1172                // Cleanup our hooks, in case something else does a upgrade on this connection.
     1173                remove_filter( 'upgrader_source_selection', array( &$this, 'check_package' ), 10, 2 );
     1174
     1175                return $results;
     1176        }
     1177
     1178        function check_package( $source, $remote_source ) {
     1179                global $wp_filesystem;
     1180
     1181                if ( is_wp_error( $source ) )
     1182                        return $source;
     1183
     1184                // Check the folder contains a valid language
     1185                $files = $wp_filesystem->dirlist( $remote_source );
     1186
     1187                // Check to see if a .po and .mo exist in the folder..
     1188                $po = $mo = false;
     1189                foreach ( (array) $files as $file => $filedata ) {
     1190                        if ( '.po' == substr( $file, -3 ) )
     1191                                $po = true;
     1192                        elseif ( '.mo' == substr( $file, -3 ) )
     1193                                $mo = true;
     1194                }
     1195
     1196                if ( ! $mo || ! $po )
     1197                        return new WP_Error( 'incompatible_archive', $this->strings['incompatible_archive'], __( 'The language pack is missing either the <code>.po</code> or <code>.mo</code> files.' ) );
     1198
     1199                return $source;
     1200        }
     1201
     1202}
     1203
    10761204/**
    10771205 * Core Upgrader class for WordPress. It allows for WordPress to upgrade itself in combination with the wp-admin/includes/update-core.php file
    10781206 *
  • wp-admin/includes/update.php

     
    317317        echo "<div class='update-nag'>$msg</div>";
    318318}
    319319add_action( 'admin_notices', 'maintenance_nag' );
     320
     321/**
     322 * Retrieves a list of all language updates available.
     323 *
     324 * @since 3.7.0
     325 */
     326function wp_get_translation_updates() {
     327        $updates = array();
     328        foreach ( array( 'update_plugins' => 'plugin', 'update_themes' => 'theme' ) as $transient => $type ) {
     329
     330                $transient = get_site_transient( $transient );
     331                if ( empty( $transient->translations ) )
     332                        continue;
     333
     334                foreach ( $transient->translations as $slug => $translation_data ) {
     335                        foreach ( $translation_data as $language => $package ) {
     336                                $updates[] = (object) compact( 'type', 'package', 'language', 'slug' );
     337                        }
     338                }
     339        }
     340
     341        return $updates;
     342}
  • wp-includes/update.php

     
    158158
    159159        // Check for update on a different schedule, depending on the page.
    160160        switch ( current_filter() ) {
     161                case 'upgrader_process_complete' :
     162                        $timeout = 0;
     163                        break;
    161164                case 'load-update-core.php' :
    162165                        $timeout = MINUTE_IN_SECONDS;
    163166                        break;
     
    282285
    283286        // Check for update on a different schedule, depending on the page.
    284287        switch ( current_filter() ) {
     288                case 'upgrader_process_complete' :
     289                        $timeout = 0;
     290                        break;
    285291                case 'load-update-core.php' :
    286292                        $timeout = MINUTE_IN_SECONDS;
    287293                        break;
     
    484490
    485491add_action( 'admin_init', '_maybe_update_core' );
    486492add_action( 'wp_version_check', 'wp_version_check' );
     493add_action( 'upgrader_process_complete', 'wp_version_check' );
    487494
    488495add_action( 'load-plugins.php', 'wp_update_plugins' );
    489496add_action( 'load-update.php', 'wp_update_plugins' );
     
    490497add_action( 'load-update-core.php', 'wp_update_plugins' );
    491498add_action( 'admin_init', '_maybe_update_plugins' );
    492499add_action( 'wp_update_plugins', 'wp_update_plugins' );
     500add_action( 'upgrader_process_complete', 'wp_update_plugins' );
    493501
    494502add_action( 'load-themes.php', 'wp_update_themes' );
    495503add_action( 'load-update.php', 'wp_update_themes' );
     
    496504add_action( 'load-update-core.php', 'wp_update_themes' );
    497505add_action( 'admin_init', '_maybe_update_themes' );
    498506add_action( 'wp_update_themes', 'wp_update_themes' );
     507add_action( 'upgrader_process_complete', 'wp_update_themes' );
    499508
    500509// Automatic Updates - Cron callback
    501510add_action( 'wp_auto_updates_maybe_update', 'wp_auto_updates_maybe_update' );