Make WordPress Core

Ticket #37531: 37531.5.patch

File 37531.5.patch, 13.0 KB (added by ocean90, 8 years ago)
  • src/wp-admin/includes/ajax-actions.php

     
    33453345                wp_send_json_error( $status );
    33463346        }
    33473347
    3348         $upgrader = new Theme_Upgrader( new Automatic_Upgrader_Skin() );
     3348        $skin     = new WP_Ajax_Upgrader_Skin();
     3349        $upgrader = new Theme_Upgrader( $skin );
    33493350        $result   = $upgrader->install( $api->download_link );
    33503351
    33513352        if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
    3352                 $status['debug'] = $upgrader->skin->get_upgrade_messages();
     3353                $status['debug'] = $skin->get_upgrade_messages();
    33533354        }
    33543355
    33553356        if ( is_wp_error( $result ) ) {
     3357                $status['errorCode']    = $result->get_error_code();
    33563358                $status['errorMessage'] = $result->get_error_message();
    33573359                wp_send_json_error( $status );
     3360        } elseif ( is_wp_error( $skin->result ) ) {
     3361                $status['errorCode']    = $skin->result->get_error_code();
     3362                $status['errorMessage'] = $skin->result->get_error_message();
     3363                wp_send_json_error( $status );
     3364        } elseif ( $skin->get_errors()->get_error_code() ) {
     3365                $status['errorMessage'] = $skin->get_error_messages();
     3366                wp_send_json_error( $status );
    33583367        } elseif ( is_null( $result ) ) {
    33593368                global $wp_filesystem;
    33603369
     
    33633372
    33643373                // Pass through the error from WP_Filesystem if one was raised.
    33653374                if ( $wp_filesystem instanceof WP_Filesystem_Base && is_wp_error( $wp_filesystem->errors ) && $wp_filesystem->errors->get_error_code() ) {
     3375                        $status['errorCode']    = $wp_filesystem->errors->get_error_code();
    33663376                        $status['errorMessage'] = esc_html( $wp_filesystem->errors->get_error_message() );
    33673377                }
    33683378
     
    34373447                wp_update_themes();
    34383448        }
    34393449
    3440         $upgrader = new Theme_Upgrader( new Automatic_Upgrader_Skin() );
     3450        $skin     = new WP_Ajax_Upgrader_Skin();
     3451        $upgrader = new Theme_Upgrader( $skin );
    34413452        $result   = $upgrader->bulk_upgrade( array( $stylesheet ) );
    34423453
    34433454        if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
    3444                 $status['debug'] = $upgrader->skin->get_upgrade_messages();
     3455                $status['debug'] = $skin->get_upgrade_messages();
    34453456        }
    34463457
    3447         if ( is_array( $result ) && ! empty( $result[ $stylesheet ] ) ) {
     3458        if ( is_wp_error( $result ) ) {
     3459                $status['errorCode']    = $result->get_error_code();
     3460                $status['errorMessage'] = $result->get_error_message();
     3461                wp_send_json_error( $status );
     3462        } elseif ( is_wp_error( $skin->result ) ) {
     3463                $status['errorCode']    = $skin->result->get_error_code();
     3464                $status['errorMessage'] = $skin->result->get_error_message();
     3465                wp_send_json_error( $status );
     3466        } elseif ( $skin->get_errors()->get_error_code() ) {
     3467                $status['errorMessage'] = $skin->get_error_messages();
     3468                wp_send_json_error( $status );
     3469        } elseif ( is_array( $result ) && ! empty( $result[ $stylesheet ] ) ) {
    34483470
    34493471                // Theme is already at the latest version.
    34503472                if ( true === $result[ $stylesheet ] ) {
     
    34583480                }
    34593481
    34603482                wp_send_json_success( $status );
    3461         } elseif ( is_wp_error( $upgrader->skin->result ) ) {
    3462                 $status['errorCode']    = $upgrader->skin->result->get_error_code();
    3463                 $status['errorMessage'] = $upgrader->skin->result->get_error_message();
    3464                 wp_send_json_error( $status );
    34653483        } elseif ( false === $result ) {
    34663484                global $wp_filesystem;
    34673485
     
    34703488
    34713489                // Pass through the error from WP_Filesystem if one was raised.
    34723490                if ( $wp_filesystem instanceof WP_Filesystem_Base && is_wp_error( $wp_filesystem->errors ) && $wp_filesystem->errors->get_error_code() ) {
     3491                        $status['errorCode']    = $wp_filesystem->errors->get_error_code();
    34733492                        $status['errorMessage'] = esc_html( $wp_filesystem->errors->get_error_message() );
    34743493                }
    34753494
     
    35943613
    35953614        $status['pluginName'] = $api->name;
    35963615
    3597         $upgrader = new Plugin_Upgrader( new Automatic_Upgrader_Skin() );
     3616        $skin     = new WP_Ajax_Upgrader_Skin();
     3617        $upgrader = new Plugin_Upgrader( $skin );
    35983618        $result   = $upgrader->install( $api->download_link );
    35993619
    36003620        if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
    3601                 $status['debug'] = $upgrader->skin->get_upgrade_messages();
     3621                $status['debug'] = $skin->get_upgrade_messages();
    36023622        }
    36033623
    36043624        if ( is_wp_error( $result ) ) {
     3625                $status['errorCode']    = $result->get_error_code();
    36053626                $status['errorMessage'] = $result->get_error_message();
    36063627                wp_send_json_error( $status );
     3628        } elseif ( is_wp_error( $skin->result ) ) {
     3629                $status['errorCode']    = $skin->result->get_error_code();
     3630                $status['errorMessage'] = $skin->result->get_error_message();
     3631                wp_send_json_error( $status );
     3632        } elseif ( $skin->get_errors()->get_error_code() ) {
     3633                $status['errorMessage'] = $skin->get_error_messages();
     3634                wp_send_json_error( $status );
    36073635        } elseif ( is_null( $result ) ) {
    36083636                global $wp_filesystem;
    36093637
     
    36123640
    36133641                // Pass through the error from WP_Filesystem if one was raised.
    36143642                if ( $wp_filesystem instanceof WP_Filesystem_Base && is_wp_error( $wp_filesystem->errors ) && $wp_filesystem->errors->get_error_code() ) {
     3643                        $status['errorCode']    = $wp_filesystem->errors->get_error_code();
    36153644                        $status['errorMessage'] = esc_html( $wp_filesystem->errors->get_error_message() );
    36163645                }
    36173646
     
    36803709
    36813710        wp_update_plugins();
    36823711
    3683         $skin     = new Automatic_Upgrader_Skin();
     3712        $skin     = new WP_Ajax_Upgrader_Skin();
    36843713        $upgrader = new Plugin_Upgrader( $skin );
    36853714        $result   = $upgrader->bulk_upgrade( array( $plugin ) );
    36863715
    36873716        if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
    3688                 $status['debug'] = $upgrader->skin->get_upgrade_messages();
     3717                $status['debug'] = $skin->get_upgrade_messages();
    36893718        }
    36903719
    3691         if ( is_array( $result ) && empty( $result[ $plugin ] ) && is_wp_error( $skin->result ) ) {
    3692                 $result = $skin->result;
    3693         }
    3694 
    3695         if ( is_array( $result ) && ! empty( $result[ $plugin ] ) ) {
     3720        if ( is_wp_error( $result ) ) {
     3721                $status['errorCode']    = $result->get_error_code();
     3722                $status['errorMessage'] = $result->get_error_message();
     3723                wp_send_json_error( $status );
     3724        } elseif ( is_wp_error( $skin->result ) ) {
     3725                $status['errorCode']    = $skin->result->get_error_code();
     3726                $status['errorMessage'] = $skin->result->get_error_message();
     3727                wp_send_json_error( $status );
     3728        } elseif ( $skin->get_errors()->get_error_code() ) {
     3729                $status['errorMessage'] = $skin->get_error_messages();
     3730                wp_send_json_error( $status );
     3731        } elseif ( is_array( $result ) && ! empty( $result[ $plugin ] ) ) {
    36963732                $plugin_update_data = current( $result );
    36973733
    36983734                /*
     
    37163752                        $status['newVersion'] = sprintf( __( 'Version %s' ), $plugin_data['Version'] );
    37173753                }
    37183754                wp_send_json_success( $status );
    3719         } elseif ( is_wp_error( $result ) ) {
    3720                 $status['errorMessage'] = $result->get_error_message();
    3721                 wp_send_json_error( $status );
    37223755        } elseif ( false === $result ) {
    37233756                global $wp_filesystem;
    37243757
  • src/wp-admin/includes/class-wp-ajax-upgrader-skin.php

     
     1<?php
     2/**
     3 * Upgrader API: WP_Ajax_Upgrader_Skin class
     4 *
     5 * @package WordPress
     6 * @subpackage Upgrader
     7 * @since 4.6.0
     8 */
     9
     10/**
     11 * Upgrader Skin for Ajax WordPress Upgrades
     12 *
     13 * This skin is designed to be used for Ajax updates.
     14 *
     15 * @since 4.6.0
     16 *
     17 * @see Automatic_Upgrader_Skin
     18 */
     19class WP_Ajax_Upgrader_Skin extends Automatic_Upgrader_Skin {
     20        /**
     21         * Holds the WP_Error object.
     22         *
     23         * @since 4.6.0
     24         * @access protected
     25         *
     26         * @var null|WP_Error
     27         */
     28        protected $errors = null;
     29
     30        /**
     31         * Retrieves the list of errors.
     32         *
     33         * @since 4.6.0
     34         * @access public
     35         *
     36         * @param array $args
     37         */
     38        public function __construct( $args = array() ) {
     39                parent::__construct( $args );
     40
     41                $this->errors = new WP_Error();
     42        }
     43
     44        /**
     45         * Retrieves the list of errors.
     46         *
     47         * @since 4.6.0
     48         * @access public
     49         *
     50         * @return WP_Error Errors during an upgrade.
     51         */
     52        public function get_errors() {
     53                return $this->errors;
     54        }
     55
     56        /**
     57         * Retrieves a string for error messages
     58         *
     59         * @since 4.6.0
     60         * @access public
     61         *
     62         * @return string Error messages during an upgrade.
     63         */
     64        public function get_error_messages() {
     65                $messages = array();
     66
     67                foreach ( $this->errors->get_error_codes() as $error_code ) {
     68                        if ( $this->errors->get_error_data( $error_code ) && is_string( $this->errors->get_error_data( $error_code ) ) ) {
     69                                $messages[] = $this->errors->get_error_message( $error_code ) . ' ' . esc_html( strip_tags( $this->errors->get_error_data( $error_code ) ) );
     70                        } else {
     71                                $messages[] = $this->errors->get_error_message( $error_code );
     72                        }
     73                }
     74
     75                return implode( ', ', $messages );
     76        }
     77
     78        /**
     79         * Stores a log entry for an error.
     80         *
     81         * @since 4.6.0
     82         * @access public
     83         *
     84         * @param string|WP_Error $errors
     85         */
     86        public function error( $errors ) {
     87                if ( is_string( $errors ) ) {
     88                        $string = $errors;
     89                        if ( ! empty( $this->upgrader->strings[ $string ] ) ) {
     90                                $string = $this->upgrader->strings[ $string ];
     91                        }
     92
     93                        if ( false !== strpos( $string, '%' ) ) {
     94                                $args = func_get_args();
     95                                $args = array_splice( $args, 1 );
     96                                if ( ! empty( $args ) ) {
     97                                        $string = vsprintf( $string, $args );
     98                                }
     99                        }
     100
     101                        // Count existing errors to generate an unique error code.
     102                        $errors_count = count( $errors->get_error_codes() );
     103                        $this->errors->add( 'unknown_error_' . $errors_count + 1 , $string );
     104                } elseif ( is_wp_error( $errors ) ) {
     105                        foreach ( $errors->get_error_codes() as $error_code ) {
     106                                $this->errors->add( $error_code, $errors->get_error_message( $error_code ), $errors->get_error_data( $error_code ) );
     107                        }
     108                }
     109
     110                $args = func_get_args();
     111                call_user_func_array( array( $this, 'parent::error' ), $args );
     112        }
     113
     114        /**
     115         * Stores a log entry.
     116         *
     117         * @since 4.6.0
     118         * @access public
     119         *
     120         * @param string|array|WP_Error $data
     121         */
     122        public function feedback( $data ) {
     123                if ( is_wp_error( $data ) ) {
     124                        foreach ( $data->get_error_codes() as $error_code ) {
     125                                $this->errors->add( $error_code, $data->get_error_message( $error_code ), $data->get_error_data( $error_code ) );
     126                        }
     127                }
     128
     129                $args = func_get_args();
     130                call_user_func_array( array( $this, 'parent::feedback' ), $args );
     131        }
     132}
  • src/wp-admin/includes/class-wp-upgrader-skins.php

     
    3636
    3737/** Automatic_Upgrader_Skin class */
    3838require_once ABSPATH . 'wp-admin/includes/class-automatic-upgrader-skin.php';
     39
     40/** WP_Ajax_Upgrader_Skin class */
     41require_once ABSPATH . 'wp-admin/includes/class-wp-ajax-upgrader-skin.php';
  • src/wp-admin/includes/class-wp-upgrader.php

     
    3939/** Automatic_Upgrader_Skin class */
    4040require_once ABSPATH . 'wp-admin/includes/class-automatic-upgrader-skin.php';
    4141
     42/** WP_Ajax_Upgrader_Skin class */
     43require_once ABSPATH . 'wp-admin/includes/class-wp-ajax-upgrader-skin.php';
     44
    4245/**
    4346 * Core class used for upgrading/installing a local set of files via
    4447 * the Filesystem Abstraction classes from a Zip file.
  • src/wp-admin/js/updates.js

     
    526526                $card.removeClass( 'plugin-card-install-failed' ).find( '.notice.notice-error' ).remove();
    527527
    528528                $document.trigger( 'wp-plugin-installing', args );
    529                
     529
    530530                return wp.updates.ajax( 'install-plugin', args );
    531531        };
    532532
     
    718718                wp.a11y.speak( wp.updates.l10n.deleting, 'polite' );
    719719
    720720                $document.trigger( 'wp-plugin-deleting', args );
    721                
     721
    722722                return wp.updates.ajax( 'delete-plugin', args );
    723723        };
    724724
     
    10431043                $( '.install-theme-info, [data-slug="' + args.slug + '"]' ).removeClass( 'theme-install-failed' ).find( '.notice.notice-error' ).remove();
    10441044
    10451045                $document.trigger( 'wp-theme-installing', args );
    1046                
     1046
    10471047                return wp.updates.ajax( 'install-theme', args );
    10481048        };
    10491049
     
    11741174                $( '.theme-info .update-message' ).remove();
    11751175
    11761176                $document.trigger( 'wp-theme-deleting', args );
    1177                
     1177
    11781178                return wp.updates.ajax( 'delete-theme', args );
    11791179        };
    11801180
     
    15251525         * @returns {boolean} Whether there is an error that needs to be handled or not.
    15261526         */
    15271527        wp.updates.maybeHandleCredentialError = function( response, action ) {
    1528                 if ( response.errorCode && 'unable_to_connect_to_filesystem' === response.errorCode ) {
     1528                if ( wp.updates.shouldRequestFilesystemCredentials && response.errorCode && 'unable_to_connect_to_filesystem' === response.errorCode ) {
    15291529                        wp.updates.credentialError( response, action );
    15301530                        return true;
    15311531                }
     
    19821982                        $bulkActionForm.find( '.manage-column [type="checkbox"]' ).prop( 'checked', false );
    19831983
    19841984                        $document.trigger( 'wp-' + type + '-bulk-' + bulkAction, itemsSelected );
    1985                        
     1985
    19861986                        // Find all the checkboxes which have been checked.
    19871987                        itemsSelected.each( function( index, element ) {
    19881988                                var $checkbox  = $( element ),