WordPress.org

Make WordPress Core

Ticket #37531: 37531.7.diff

File 37531.7.diff, 11.1 KB (added by ocean90, 3 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
     
    34373446                wp_update_themes();
    34383447        }
    34393448
    3440         $upgrader = new Theme_Upgrader( new Automatic_Upgrader_Skin() );
     3449        $skin     = new WP_Ajax_Upgrader_Skin();
     3450        $upgrader = new Theme_Upgrader( $skin );
    34413451        $result   = $upgrader->bulk_upgrade( array( $stylesheet ) );
    34423452
    34433453        if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
    3444                 $status['debug'] = $upgrader->skin->get_upgrade_messages();
     3454                $status['debug'] = $skin->get_upgrade_messages();
    34453455        }
    34463456
    3447         if ( is_array( $result ) && ! empty( $result[ $stylesheet ] ) ) {
     3457        if ( is_wp_error( $result ) ) {
     3458                $status['errorCode']    = $result->get_error_code();
     3459                $status['errorMessage'] = $result->get_error_message();
     3460                wp_send_json_error( $status );
     3461        } elseif ( is_wp_error( $skin->result ) ) {
     3462                $status['errorCode']    = $skin->result->get_error_code();
     3463                $status['errorMessage'] = $skin->result->get_error_message();
     3464                wp_send_json_error( $status );
     3465        } elseif ( $skin->get_errors()->get_error_code() ) {
     3466                $status['errorMessage'] = $skin->get_error_messages();
     3467                wp_send_json_error( $status );
     3468        } elseif ( is_array( $result ) && ! empty( $result[ $stylesheet ] ) ) {
    34483469
    34493470                // Theme is already at the latest version.
    34503471                if ( true === $result[ $stylesheet ] ) {
     
    34583479                }
    34593480
    34603481                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 );
    34653482        } elseif ( false === $result ) {
    34663483                global $wp_filesystem;
    34673484
     
    35943611
    35953612        $status['pluginName'] = $api->name;
    35963613
    3597         $upgrader = new Plugin_Upgrader( new Automatic_Upgrader_Skin() );
     3614        $skin     = new WP_Ajax_Upgrader_Skin();
     3615        $upgrader = new Plugin_Upgrader( $skin );
    35983616        $result   = $upgrader->install( $api->download_link );
    35993617
    36003618        if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
    3601                 $status['debug'] = $upgrader->skin->get_upgrade_messages();
     3619                $status['debug'] = $skin->get_upgrade_messages();
    36023620        }
    36033621
    36043622        if ( is_wp_error( $result ) ) {
     3623                $status['errorCode']    = $result->get_error_code();
    36053624                $status['errorMessage'] = $result->get_error_message();
    36063625                wp_send_json_error( $status );
     3626        } elseif ( is_wp_error( $skin->result ) ) {
     3627                $status['errorCode']    = $skin->result->get_error_code();
     3628                $status['errorMessage'] = $skin->result->get_error_message();
     3629                wp_send_json_error( $status );
     3630        } elseif ( $skin->get_errors()->get_error_code() ) {
     3631                $status['errorMessage'] = $skin->get_error_messages();
     3632                wp_send_json_error( $status );
    36073633        } elseif ( is_null( $result ) ) {
    36083634                global $wp_filesystem;
    36093635
     
    36803706
    36813707        wp_update_plugins();
    36823708
    3683         $skin     = new Automatic_Upgrader_Skin();
     3709        $skin     = new WP_Ajax_Upgrader_Skin();
    36843710        $upgrader = new Plugin_Upgrader( $skin );
    36853711        $result   = $upgrader->bulk_upgrade( array( $plugin ) );
    36863712
    36873713        if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
    3688                 $status['debug'] = $upgrader->skin->get_upgrade_messages();
     3714                $status['debug'] = $skin->get_upgrade_messages();
    36893715        }
    36903716
    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 ] ) ) {
     3717        if ( is_wp_error( $result ) ) {
     3718                $status['errorCode']    = $result->get_error_code();
     3719                $status['errorMessage'] = $result->get_error_message();
     3720                wp_send_json_error( $status );
     3721        } elseif ( is_wp_error( $skin->result ) ) {
     3722                $status['errorCode']    = $skin->result->get_error_code();
     3723                $status['errorMessage'] = $skin->result->get_error_message();
     3724                wp_send_json_error( $status );
     3725        } elseif ( $skin->get_errors()->get_error_code() ) {
     3726                $status['errorMessage'] = $skin->get_error_messages();
     3727                wp_send_json_error( $status );
     3728        } elseif ( is_array( $result ) && ! empty( $result[ $plugin ] ) ) {
    36963729                $plugin_update_data = current( $result );
    36973730
    36983731                /*
     
    37163749                        $status['newVersion'] = sprintf( __( 'Version %s' ), $plugin_data['Version'] );
    37173750                }
    37183751                wp_send_json_success( $status );
    3719         } elseif ( is_wp_error( $result ) ) {
    3720                 $status['errorMessage'] = $result->get_error_message();
    3721                 wp_send_json_error( $status );
    37223752        } elseif ( false === $result ) {
    37233753                global $wp_filesystem;
    37243754
  • 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        /**
     22         * Holds the WP_Error object.
     23         *
     24         * @since 4.6.0
     25         * @access protected
     26         *
     27         * @var null|WP_Error
     28         */
     29        protected $errors = null;
     30
     31        /**
     32         * Constructor.
     33         *
     34         * @since 4.6.0
     35         * @access public
     36         *
     37         * @param array $args Options for the upgrader, see WP_Upgrader_Skin::__construct().
     38         */
     39        public function __construct( $args = array() ) {
     40                parent::__construct( $args );
     41
     42                $this->errors = new WP_Error();
     43        }
     44
     45        /**
     46         * Retrieves the list of errors.
     47         *
     48         * @since 4.6.0
     49         * @access public
     50         *
     51         * @return WP_Error Errors during an upgrade.
     52         */
     53        public function get_errors() {
     54                return $this->errors;
     55        }
     56
     57        /**
     58         * Retrieves a string for error messages
     59         *
     60         * @since 4.6.0
     61         * @access public
     62         *
     63         * @return string Error messages during an upgrade.
     64         */
     65        public function get_error_messages() {
     66                $messages = array();
     67
     68                foreach ( $this->errors->get_error_codes() as $error_code ) {
     69                        if ( $this->errors->get_error_data( $error_code ) && is_string( $this->errors->get_error_data( $error_code ) ) ) {
     70                                $messages[] = $this->errors->get_error_message( $error_code ) . ' ' . esc_html( strip_tags( $this->errors->get_error_data( $error_code ) ) );
     71                        } else {
     72                                $messages[] = $this->errors->get_error_message( $error_code );
     73                        }
     74                }
     75
     76                return implode( ', ', $messages );
     77        }
     78
     79        /**
     80         * Stores a log entry for an error.
     81         *
     82         * @since 4.6.0
     83         * @access public
     84         *
     85         * @param string|WP_Error $errors
     86         */
     87        public function error( $errors ) {
     88                if ( is_string( $errors ) ) {
     89                        $string = $errors;
     90                        if ( ! empty( $this->upgrader->strings[ $string ] ) ) {
     91                                $string = $this->upgrader->strings[ $string ];
     92                        }
     93
     94                        if ( false !== strpos( $string, '%' ) ) {
     95                                $args = func_get_args();
     96                                $args = array_splice( $args, 1 );
     97                                if ( ! empty( $args ) ) {
     98                                        $string = vsprintf( $string, $args );
     99                                }
     100                        }
     101
     102                        // Count existing errors to generate an unique error code.
     103                        $errors_count = count( $errors->get_error_codes() );
     104                        $this->errors->add( 'unknown_upgrade_error_' . $errors_count + 1 , $string );
     105                } elseif ( is_wp_error( $errors ) ) {
     106                        foreach ( $errors->get_error_codes() as $error_code ) {
     107                                $this->errors->add( $error_code, $errors->get_error_message( $error_code ), $errors->get_error_data( $error_code ) );
     108                        }
     109                }
     110
     111                $args = func_get_args();
     112                call_user_func_array( array( $this, 'parent::error' ), $args );
     113        }
     114
     115        /**
     116         * Stores a log entry.
     117         *
     118         * @since 4.6.0
     119         * @access public
     120         *
     121         * @param string|array|WP_Error $data
     122         */
     123        public function feedback( $data ) {
     124                if ( is_wp_error( $data ) ) {
     125                        foreach ( $data->get_error_codes() as $error_code ) {
     126                                $this->errors->add( $error_code, $data->get_error_message( $error_code ), $data->get_error_data( $error_code ) );
     127                        }
     128                }
     129
     130                $args = func_get_args();
     131                call_user_func_array( array( $this, 'parent::feedback' ), $args );
     132        }
     133}
  • 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

     
    244244         * @param {string=} response.errorCode Optional. Error code for an error that occurred.
    245245         */
    246246        wp.updates.ajaxAlways = function( response ) {
    247                 if ( ! response.errorCode && 'unable_to_connect_to_filesystem' !== response.errorCode ) {
     247                if ( ! response.errorCode || 'unable_to_connect_to_filesystem' !== response.errorCode ) {
    248248                        wp.updates.ajaxLocked = false;
    249249                        wp.updates.queueChecker();
    250250                }
     
    15241524         * @returns {boolean} Whether there is an error that needs to be handled or not.
    15251525         */
    15261526        wp.updates.maybeHandleCredentialError = function( response, action ) {
    1527                 if ( response.errorCode && 'unable_to_connect_to_filesystem' === response.errorCode ) {
     1527                if ( wp.updates.shouldRequestFilesystemCredentials && response.errorCode && 'unable_to_connect_to_filesystem' === response.errorCode ) {
    15281528                        wp.updates.credentialError( response, action );
    15291529                        return true;
    15301530                }