WordPress.org

Make WordPress Core

Ticket #18200: 18200.5.diff

File 18200.5.diff, 16.9 KB (added by dd32, 8 years ago)
  • src/wp-admin/css/wp-admin.css

     
    66366636        height: 98%;
    66376637}
    66386638
     6639/* Upgrader styles, Specific to Language Packs */
     6640.lp-show-latest p {
     6641        display: none;
     6642}
     6643.lp-show-latest p:last-child,
     6644.lp-show-latest .lp-error p {
     6645        display: block;
     6646}
    66396647
    66406648/* - Only used once or twice in all of WP - deprecate for global style
    66416649------------------------------------------------------------------------------*/
  • src/wp-admin/includes/class-wp-upgrader-skins.php

     
    5151                        return;
    5252                $this->done_header = true;
    5353                echo '<div class="wrap">';
    54                 screen_icon();
     54                if ( ! empty( $this->options['screen'] ) )
     55                        screen_icon( $this->options['screen'] );
     56                else
     57                        screen_icon();
    5558                echo '<h2>' . $this->options['title'] . '</h2>';
    5659        }
    5760        function footer() {
     
    529532}
    530533
    531534/**
     535 * Translation Upgrader Skin for WordPress Translation Upgrades.
     536 *
     537 * @package WordPress
     538 * @subpackage Upgrader
     539 * @since 3.7.0
     540 */
     541class Language_Pack_Upgrader_Skin extends WP_Upgrader_Skin {
     542        var $language_update = null;
     543        var $done_header = false;
     544        var $display_footer_actions = true;
     545
     546        function __construct( $args = array() ) {
     547                $defaults = array( 'url' => '', 'nonce' => '', 'title' => __( 'Update Translations' ), 'skip_header_footer' => false );
     548                $args = wp_parse_args( $args, $defaults );
     549                if ( $args['skip_header_footer'] ) {
     550                        $this->done_header = true;
     551                        $this->display_footer_actions = false;
     552                }
     553                parent::__construct( $args );
     554        }
     555
     556        function before() {
     557                $name = $this->upgrader->get_name_for_update( $this->language_update );
     558
     559                echo '<div class="update-messages lp-show-latest">';
     560
     561                printf( '<h4>' . __( 'Updating translations for %1$s (%2$s)&#8230;' ) . '</h4>', $name, $this->language_update->language );
     562        }
     563
     564        function error( $error ) {
     565                echo '<div class="lp-error">';
     566                parent::error( $error );
     567                echo '</div>';
     568        }
     569
     570        function after() {
     571                echo '</div>';
     572        }
     573
     574        function footer() {
     575                $update_actions = array();
     576                $update_actions['updates_page'] = '<a href="' . self_admin_url( 'update-core.php' ) . '" title="' . esc_attr__( 'Go to WordPress Updates page' ) . '" target="_parent">' . __( 'Return to WordPress Updates' ) . '</a>';
     577                $update_actions = apply_filters( 'update_translations_complete_actions', $update_actions );
     578
     579                if ( $update_actions && $this->display_footer_actions )
     580                        $this->feedback( implode( ' | ', $update_actions ) );
     581
     582                parent::footer();
     583        }
     584}
     585
     586/**
    532587 * Upgrader Skin for Automatic WordPress Upgrades
    533588 *
    534589 * This skin is designed to be used when no output is intended, all output
  • src/wp-admin/includes/class-wp-upgrader.php

     
    368368
    369369                $this->skin->after();
    370370
    371                 if ( ! $is_multi )
     371                if ( ! $is_multi ) {
     372                        do_action( 'upgrader_process_complete', $this, $hook_extra );
    372373                        $this->skin->footer();
     374                }
    373375
    374376                return $result;
    375377        }
     
    442444                        'destination' => WP_PLUGIN_DIR,
    443445                        'clear_destination' => false, // Do not overwrite files.
    444446                        'clear_working' => true,
    445                         'hook_extra' => array()
     447                        'hook_extra' => array(
     448                                'type' => 'plugin',
     449                                'action' => 'install',
     450                        )
    446451                ) );
    447452
    448453                remove_filter('upgrader_source_selection', array($this, 'check_package') );
     
    453458                // Force refresh of plugin update information
    454459                wp_clean_plugins_cache( $parsed_args['clear_update_cache'] );
    455460
    456                 do_action( 'upgrader_process_complete', $this, array( 'action' => 'install', 'type' => 'plugin' ), $package );
    457 
    458461                return true;
    459462        }
    460463
     
    490493                        'clear_destination' => true,
    491494                        'clear_working' => true,
    492495                        'hook_extra' => array(
    493                                 'plugin' => $plugin
     496                                'plugin' => $plugin,
     497                                'type' => 'plugin',
     498                                'action' => 'update',
    494499                        ),
    495500                ) );
    496501
     
    504509                // Force refresh of plugin update information
    505510                wp_clean_plugins_cache( $parsed_args['clear_update_cache'] );
    506511
    507                 do_action( 'upgrader_process_complete', $this, array( 'action' => 'update', 'type' => 'plugin' ), $plugin );
    508 
    509512                return true;
    510513        }
    511514
     
    587590
    588591                $this->maintenance_mode(false);
    589592
     593                do_action( 'upgrader_process_complete', $this, array(
     594                        'action' => 'update',
     595                        'type' => 'plugin',
     596                        'bulk' => true,
     597                        'plugins' => $plugins,
     598                ) );
     599
    590600                $this->skin->bulk_footer();
    591601
    592602                $this->skin->footer();
     
    597607                // Force refresh of plugin update information
    598608                wp_clean_plugins_cache( $parsed_args['clear_update_cache'] );
    599609
    600                 do_action( 'upgrader_process_complete', $this, array( 'action' => 'update', 'type' => 'plugin', 'bulk' => true ), $plugins );
    601 
    602610                return $results;
    603611        }
    604612
     
    814822                        'package' => $package,
    815823                        'destination' => get_theme_root(),
    816824                        'clear_destination' => false, //Do not overwrite files.
    817                         'clear_working' => true
     825                        'clear_working' => true,
     826                        'hook_extra' => array(
     827                                'type' => 'theme',
     828                                'action' => 'install',
     829                        ),
    818830                ) );
    819831
    820832                remove_filter('upgrader_source_selection', array($this, 'check_package') );
     
    826838                // Refresh the Theme Update information
    827839                wp_clean_themes_cache( $parsed_args['clear_update_cache'] );
    828840
    829                 do_action( 'upgrader_process_complete', $this, array( 'action' => 'install', 'type' => 'theme' ), $package );
    830 
    831841                return true;
    832842        }
    833843
     
    863873                        'clear_destination' => true,
    864874                        'clear_working' => true,
    865875                        'hook_extra' => array(
    866                                 'theme' => $theme
     876                                'theme' => $theme,
     877                                'type' => 'theme',
     878                                'action' => 'update',
    867879                        ),
    868880                ) );
    869881
     
    876888
    877889                wp_clean_themes_cache( $parsed_args['clear_update_cache'] );
    878890
    879                 do_action( 'upgrader_process_complete', $this, array( 'action' => 'update', 'type' => 'theme' ), $theme );
    880 
    881891                return true;
    882892        }
    883893
     
    959969
    960970                $this->maintenance_mode(false);
    961971
     972                do_action( 'upgrader_process_complete', $this, array(
     973                        'action' => 'update',
     974                        'type' => 'plugin',
     975                        'bulk' => true,
     976                        'themes' => $themes,
     977                ) );
     978
    962979                $this->skin->bulk_footer();
    963980
    964981                $this->skin->footer();
     
    971988                // Refresh the Theme Update information
    972989                wp_clean_themes_cache( $parsed_args['clear_update_cache'] );
    973990
    974                 do_action( 'upgrader_process_complete', $this, array( 'action' => 'update', 'type' => 'theme', 'bulk' => true ), $themes );
    975 
    976991                return $results;
    977992        }
    978993
     
    10731088
    10741089}
    10751090
    1076 add_action( 'upgrader_process_complete', array( 'Language_Pack_Upgrader', 'async_upgrade' ), 20, 3 );
     1091add_action( 'upgrader_process_complete', array( 'Language_Pack_Upgrader', 'async_upgrade' ), 20 );
    10771092class Language_Pack_Upgrader extends WP_Upgrader {
    10781093
    10791094        var $result;
    10801095        var $bulk = true;
    10811096
    1082         static function async_upgrade( $upgrader, $context, $package ) {
     1097        static function async_upgrade( $upgrader = false ) {
    10831098                // Avoid recursion.
    1084                 if ( $upgrader instanceof Language_Pack_Upgrader )
     1099                if ( $upgrader && $upgrader instanceof Language_Pack_Upgrader )
    10851100                        return;
    10861101
    1087                 $lp_upgrader = new Language_Pack_Upgrader( new Headerless_Upgrader_Skin() );
     1102                // Nothing to do?
     1103                $language_updates = wp_get_translation_updates();
     1104                if ( ! $language_updates )
     1105                        return;
     1106
     1107                $skin = new Language_Pack_Upgrader_Skin( array(
     1108                        'skip_header_footer' => true,
     1109                ) );
     1110
     1111                $lp_upgrader = new Language_Pack_Upgrader( $skin );
    10881112                $lp_upgrader->upgrade();
    10891113        }
    10901114
     
    10981122                $this->strings['process_success'] = __( 'Translation updated successfully.' );
    10991123        }
    11001124
    1101         function upgrade( $update = false ) {
     1125        function upgrade( $update = false, $args = array() ) {
    11021126                if ( $update )
    11031127                        $update = array( $update );
    1104                 $results = $this->bulk_upgrade( $update );
     1128                $results = $this->bulk_upgrade( $update, $args );
    11051129                return $results[0];
    11061130        }
    11071131
    1108         function bulk_upgrade( $language_updates = array() ) {
     1132        function bulk_upgrade( $language_updates = array(), $args = array() ) {
    11091133                global $wp_filesystem;
    11101134
     1135                $defaults = array(
     1136                        'clear_update_cache' => true,
     1137                );
     1138                $parsed_args = wp_parse_args( $args, $defaults );
     1139
    11111140                $this->init();
    11121141                $this->upgrade_strings();
    11131142
    11141143                if ( ! $language_updates )
    11151144                        $language_updates = wp_get_translation_updates();
    11161145
    1117                 if ( empty( $language_updates ) )
     1146                if ( empty( $language_updates ) ) {
     1147                        $this->skin->header();
     1148                        $this->skin->before();
     1149                        $this->skin->set_result( true );
     1150                        $this->skin->feedback( 'up_to_date' );
     1151                        $this->skin->after();
     1152                        $this->skin->footer();
    11181153                        return true;
     1154                }
    11191155
    11201156                if ( 'upgrader_process_complete' == current_filter() )
    11211157                        $this->skin->feedback( 'starting_upgrade' );
     
    11451181
    11461182                foreach ( $language_updates as $language_update ) {
    11471183
     1184                        $this->skin->language_update = $language_update;
     1185
    11481186                        $destination = WP_LANG_DIR;
    11491187                        if ( 'plugin' == $language_update->type )
    11501188                                $destination .= '/plugins';
     
    11751213                                break;
    11761214                }
    11771215
     1216                $this->skin->footer();
     1217
    11781218                // Clean up our hooks, in case something else does an upgrade on this connection.
    11791219                remove_filter( 'upgrader_source_selection', array( &$this, 'check_package' ), 10, 2 );
    11801220
     1221                if ( $parsed_args['clear_update_cache'] ) {
     1222                        wp_clean_themes_cache( true );
     1223                        wp_clean_plugins_cache( true );
     1224                        delete_site_transient( 'update_core' );
     1225                }
     1226
    11811227                return $results;
    11821228        }
    11831229
     
    12061252                return $source;
    12071253        }
    12081254
     1255        function get_name_for_update( $update ) {
     1256                switch ( $update->type ) {
     1257                        case 'core':
     1258                                return 'WordPress'; // Not translated
     1259                                break;
     1260                        case 'theme':
     1261                                $theme = wp_get_theme( $update->slug );
     1262                                if ( $theme->exists() )
     1263                                        return $theme->Get( 'Name' );
     1264                                break;
     1265                        case 'plugin':
     1266                                $plugin_data = get_plugins( '/' . $update->slug );
     1267                                $plugin_data = array_shift( $plugin_data );
     1268                                if ( $plugin_data )
     1269                                        return $plugin_data['Name'];
     1270                                break;
     1271                }
     1272                return '';
     1273        }
     1274
    12091275}
    12101276
    12111277/**
     
    12821348                        return $working_dir;
    12831349
    12841350                // Copy update-core.php from the new version into place.
    1285                 if ( !$wp_filesystem->copy($working_dir . '/wordpress/wp-admin/includes/update-core.php', $wp_dir . 'wp-admin/includes/update-core.php', true) ) {
     1351        /*      if ( !$wp_filesystem->copy($working_dir . '/wordpress/wp-admin/includes/update-core.php', $wp_dir . 'wp-admin/includes/update-core.php', true) ) {
    12861352                        $wp_filesystem->delete($working_dir, true);
    12871353                        return new WP_Error( 'copy_failed_for_update_core_file', $this->strings['copy_failed'] );
    12881354                }
    1289                 $wp_filesystem->chmod($wp_dir . 'wp-admin/includes/update-core.php', FS_CHMOD_FILE);
     1355                $wp_filesystem->chmod($wp_dir . 'wp-admin/includes/update-core.php', FS_CHMOD_FILE);*/
    12901356
    12911357                require_once( ABSPATH . 'wp-admin/includes/update-core.php' );
    12921358
     
    13211387                        }
    13221388                }
    13231389
    1324                 do_action( 'upgrader_process_complete', $this, array( 'action' => 'update', 'type' => 'core' ), $result );
    13251390                return $result;
    13261391        }
    13271392
     
    16281693                                $skin->feedback( __( 'Updating plugin: %s' ), $item_name );
    16291694                                break;
    16301695                        case 'language':
    1631                                 if ( 'theme' == $item->type ) {
    1632                                         $theme = wp_get_theme( $item->slug );
    1633                                         $skin->feedback( sprintf(
    1634                                                 __( 'Updating the %1$s translation for the %2$s theme' ),
    1635                                                 $item->language,
    1636                                                 $theme->Get( 'Name' )
    1637                                         ) );
    1638                                         $item_name = sprintf(
    1639                                                 __( '%1$s translation for the %2$s theme' ),
    1640                                                 $item->language,
    1641                                                 $theme->Get( 'Name' )
    1642                                         );
    1643                                 } elseif ( 'plugin' == $item->type ) {
    1644                                         $plugin_data = get_plugins( '/' . $item->slug );
    1645                                         $plugin_data = array_shift( $plugin_data );
    1646                                         $skin->feedback( sprintf(
    1647                                                 __( 'Updating the %1$s translation for the %2$s plugin' ),
    1648                                                 $item->language,
    1649                                                 $plugin_data['Name']
    1650                                         ) );
    1651                                         $item_name = sprintf(
    1652                                                 __( '%1$s translation for the %2$s plugin' ),
    1653                                                 $item->language,
    1654                                                 $plugin_data['Name']
    1655                                         );
    1656                                 } else {
    1657                                         $skin->feedback( sprintf(
    1658                                                 __( 'Updating %s translation' ),
    1659                                                 $item->language
    1660                                         ) );
    1661                                         $item_name = sprintf(
    1662                                                 __( '%s translation' ),
    1663                                                 $item->language
    1664                                         );
    1665                                 }
    1666                                
     1696                                $name = $upgrader->get_name_for_update( $item );
     1697                                $skin->feedback( sprintf( __( 'Updating translations for %1$s (%2$s)&#8230;' ), $name, $item->language ) );
    16671698                                break;
    16681699                }
    16691700
     
    17111742                        return;
    17121743
    17131744                // Don't automatically run these thins, as we'll handle it ourselves
    1714                 remove_action( 'upgrader_process_complete', array( 'Language_Pack_Upgrader', 'async_upgrade' ), 20, 3 );
     1745                remove_action( 'upgrader_process_complete', array( 'Language_Pack_Upgrader', 'async_upgrade' ), 20 );
    17151746                remove_action( 'upgrader_process_complete', 'wp_version_check' );
    17161747                remove_action( 'upgrader_process_complete', 'wp_update_plugins' );
    17171748                remove_action( 'upgrader_process_complete', 'wp_update_themes' );
  • src/wp-admin/includes/file.php

     
    891891        if ( ! $method && function_exists('getmyuid') && function_exists('fileowner') ){
    892892                if ( !$context )
    893893                        $context = WP_CONTENT_DIR;
     894
     895                // If the directory doesn't exist (wp-content/languages) then use the parent directory as we'll create it.
     896                if ( WP_LANG_DIR == $context && ! is_dir( $context ) )
     897                        $context = dirname( $context );
     898
    894899                $context = trailingslashit($context);
    895900                $temp_file_name = $context . 'temp-write-test-' . time();
    896901                $temp_handle = @fopen($temp_file_name, 'w');
  • src/wp-admin/includes/update-core.php

     
    889889        // Remove maintenance file, we're done.
    890890        $wp_filesystem->delete($maintenance_file);
    891891
     892        // Has to be in here, rather than the Upgrader as the filter below will override and kill the process before themes get updated on major updates
     893        do_action( 'upgrader_process_complete', null, array( 'action' => 'update', 'type' => 'core' ) );
     894
    892895        // If we made it this far:
    893896        do_action( '_core_updated_successfully', $wp_version );
    894897
  • src/wp-admin/update-core.php

     
    324324<?php
    325325}
    326326
     327function list_translation_updates() {
     328        $updates = wp_get_translation_updates();
     329        if ( ! $updates ) {
     330                if ( 'en_US' != get_locale() ) {
     331                        echo '<h3>' . __( 'Translations' ) . '</h3>';
     332                        echo '<p>' . __( 'Your translations are all up to date.' ) . '</p>';
     333                }
     334                return;
     335        }
     336
     337        $form_action = 'update-core.php?action=do-translation-upgrade';
     338        ?>
     339        <h3><?php _e( 'Translations' ); ?></h3>
     340        <form method="post" action="<?php echo esc_url( $form_action ); ?>" name="upgrade-themes" class="upgrade">
     341                <p><?php _e( 'Some of your translations are out of date.' ); ?></p>
     342                <?php wp_nonce_field('upgrade-translations'); ?>
     343                <p><input class="button" type="submit" value="<?php esc_attr_e( 'Update Translations' ); ?>" name="upgrade" /></p>
     344        </form>
     345        <?php
     346}
     347
    327348/**
    328349 * Upgrade WordPress core display.
    329350 *
     
    477498        echo ' &nbsp; <a class="button" href="' . esc_url( self_admin_url('update-core.php') ) . '">' . __( 'Check Again' ) . '</a>';
    478499        echo '</p>';
    479500
    480         if ( current_user_can( 'update_core' ) )
     501        if ( $core = current_user_can( 'update_core' ) )
    481502                core_upgrade_preamble();
    482         if ( current_user_can( 'update_plugins' ) )
     503        if ( $plugins = current_user_can( 'update_plugins' ) )
    483504                list_plugin_updates();
    484         if ( current_user_can( 'update_themes' ) )
     505        if ( $themes = current_user_can( 'update_themes' ) )
    485506                list_theme_updates();
     507        if ( $core || $plugins || $themes )
     508                list_translation_updates();
     509        unset( $core, $plugins, $themes );
    486510        do_action('core_upgrade_preamble');
    487511        echo '</div>';
    488512        include(ABSPATH . 'wp-admin/admin-footer.php');
     
    570594        echo '</div>';
    571595        include(ABSPATH . 'wp-admin/admin-footer.php');
    572596
     597} elseif ( 'do-translation-upgrade' == $action ) {
     598
     599        if ( ! current_user_can( 'update_core' ) && ! current_user_can( 'update_plugins' ) && ! current_user_can( 'update_themes' ) )
     600                wp_die( __( 'You do not have sufficient permissions to update this site.' ) );
     601
     602        check_admin_referer( 'upgrade-translations' );
     603
     604        require_once ABSPATH . 'wp-admin/admin-header.php';
     605        include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
     606
     607        $url = 'update-core.php?action=do-translation-upgrade';
     608        $nonce = 'upgrade-translations';
     609        $title = __( 'Update Translations' );
     610        $context = WP_LANG_DIR;
     611        $screen = 'tools';
     612
     613        $upgrader = new Language_Pack_Upgrader( new Language_Pack_Upgrader_Skin( compact( 'url', 'nonce', 'title', 'context', 'screen' ) ) );
     614        $result = $upgrader->bulk_upgrade();
     615
     616        require_once( ABSPATH . 'wp-admin/admin-footer.php' );
     617
    573618} else {
    574619        do_action('update-core-custom_' . $action);
    575620}