WordPress.org

Make WordPress Core

Ticket #37531: 37531.3.patch

File 37531.3.patch, 12.2 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                $errors = $skin->get_errors();
     3366
     3367                $messages = array();
     3368                foreach ( $errors->get_error_codes() as $error_code ) {
     3369                        if ( $errors->get_error_data( $error_code ) && is_string( $errors->get_error_data( $error_code ) ) ) {
     3370                                $messages[] = $errors->get_error_message( $error_code ) . ' ' . esc_html( strip_tags( $errors->get_error_data( $error_code ) ) );
     3371                        } else {
     3372                                $messages[] = $errors->get_error_message( $error_code );
     3373                        }
     3374                }
     3375
     3376                $status['errorMessage'] = implode( ', ', $messages );
     3377                wp_send_json_error( $status );
    33583378        } elseif ( is_null( $result ) ) {
    33593379                global $wp_filesystem;
    33603380
     
    33633383
    33643384                // Pass through the error from WP_Filesystem if one was raised.
    33653385                if ( $wp_filesystem instanceof WP_Filesystem_Base && is_wp_error( $wp_filesystem->errors ) && $wp_filesystem->errors->get_error_code() ) {
     3386                        $status['errorCode']    = $wp_filesystem->errors->get_error_code();
    33663387                        $status['errorMessage'] = esc_html( $wp_filesystem->errors->get_error_message() );
    33673388                }
    33683389
     
    34373458                wp_update_themes();
    34383459        }
    34393460
    3440         $upgrader = new Theme_Upgrader( new Automatic_Upgrader_Skin() );
     3461        $skin     = new WP_Ajax_Upgrader_Skin();
     3462        $upgrader = new Theme_Upgrader( $skin );
    34413463        $result   = $upgrader->bulk_upgrade( array( $stylesheet ) );
    34423464
    34433465        if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
    3444                 $status['debug'] = $upgrader->skin->get_upgrade_messages();
     3466                $status['debug'] = $skin->get_upgrade_messages();
    34453467        }
    34463468
    3447         if ( is_array( $result ) && ! empty( $result[ $stylesheet ] ) ) {
     3469        if ( is_wp_error( $result ) ) {
     3470                $status['errorCode']    = $result->get_error_code();
     3471                $status['errorMessage'] = $result->get_error_message();
     3472                wp_send_json_error( $status );
     3473        } elseif ( is_wp_error( $skin->result ) ) {
     3474                $status['errorCode']    = $skin->result->get_error_code();
     3475                $status['errorMessage'] = $skin->result->get_error_message();
     3476                wp_send_json_error( $status );
     3477        } elseif ( $skin->get_errors()->get_error_code() ) {
     3478                $errors = $skin->get_errors();
    34483479
     3480                $messages = array();
     3481                foreach ( $errors->get_error_codes() as $error_code ) {
     3482                        if ( $errors->get_error_data( $error_code ) && is_string( $errors->get_error_data( $error_code ) ) ) {
     3483                                $messages[] = $errors->get_error_message( $error_code ) . ' ' . esc_html( strip_tags( $errors->get_error_data( $error_code ) ) );
     3484                        } else {
     3485                                $messages[] = $errors->get_error_message( $error_code );
     3486                        }
     3487                }
     3488
     3489                $status['errorMessage'] = implode( ', ', $messages );
     3490                wp_send_json_error( $status );
     3491        } elseif ( is_array( $result ) && ! empty( $result[ $stylesheet ] ) ) {
     3492
    34493493                // Theme is already at the latest version.
    34503494                if ( true === $result[ $stylesheet ] ) {
    34513495                        $status['errorMessage'] = $upgrader->strings['up_to_date'];
     
    34583502                }
    34593503
    34603504                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 );
    34653505        } elseif ( false === $result ) {
    34663506                global $wp_filesystem;
    34673507
     
    34703510
    34713511                // Pass through the error from WP_Filesystem if one was raised.
    34723512                if ( $wp_filesystem instanceof WP_Filesystem_Base && is_wp_error( $wp_filesystem->errors ) && $wp_filesystem->errors->get_error_code() ) {
     3513                        $status['errorCode']    = $wp_filesystem->errors->get_error_code();
    34733514                        $status['errorMessage'] = esc_html( $wp_filesystem->errors->get_error_message() );
    34743515                }
    34753516
     
    35943635
    35953636        $status['pluginName'] = $api->name;
    35963637
    3597         $upgrader = new Plugin_Upgrader( new Automatic_Upgrader_Skin() );
     3638        $skin     = new WP_Ajax_Upgrader_Skin();
     3639        $upgrader = new Plugin_Upgrader( $skin );
    35983640        $result   = $upgrader->install( $api->download_link );
    35993641
    36003642        if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
    3601                 $status['debug'] = $upgrader->skin->get_upgrade_messages();
     3643                $status['debug'] = $skin->get_upgrade_messages();
    36023644        }
    36033645
    36043646        if ( is_wp_error( $result ) ) {
     3647                $status['errorCode']    = $result->get_error_code();
    36053648                $status['errorMessage'] = $result->get_error_message();
    36063649                wp_send_json_error( $status );
     3650        } elseif ( is_wp_error( $skin->result ) ) {
     3651                $status['errorCode']    = $skin->result->get_error_code();
     3652                $status['errorMessage'] = $skin->result->get_error_message();
     3653                wp_send_json_error( $status );
     3654        } elseif ( $skin->get_errors()->get_error_code() ) {
     3655                $errors = $skin->get_errors();
     3656
     3657                $messages = array();
     3658                foreach ( $errors->get_error_codes() as $error_code ) {
     3659                        if ( $errors->get_error_data( $error_code ) && is_string( $errors->get_error_data( $error_code ) ) ) {
     3660                                $messages[] = $errors->get_error_message( $error_code ) . ' ' . esc_html( strip_tags( $errors->get_error_data( $error_code ) ) );
     3661                        } else {
     3662                                $messages[] = $errors->get_error_message( $error_code );
     3663                        }
     3664                }
     3665
     3666                $status['errorMessage'] = implode( ', ', $messages );
     3667                wp_send_json_error( $status );
    36073668        } elseif ( is_null( $result ) ) {
    36083669                global $wp_filesystem;
    36093670
     
    36123673
    36133674                // Pass through the error from WP_Filesystem if one was raised.
    36143675                if ( $wp_filesystem instanceof WP_Filesystem_Base && is_wp_error( $wp_filesystem->errors ) && $wp_filesystem->errors->get_error_code() ) {
     3676                        $status['errorCode']    = $wp_filesystem->errors->get_error_code();
    36153677                        $status['errorMessage'] = esc_html( $wp_filesystem->errors->get_error_message() );
    36163678                }
    36173679
     
    36803742
    36813743        wp_update_plugins();
    36823744
    3683         $skin     = new Automatic_Upgrader_Skin();
     3745        $skin     = new WP_Ajax_Upgrader_Skin();
    36843746        $upgrader = new Plugin_Upgrader( $skin );
    36853747        $result   = $upgrader->bulk_upgrade( array( $plugin ) );
    36863748
    36873749        if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
    3688                 $status['debug'] = $upgrader->skin->get_upgrade_messages();
     3750                $status['debug'] = $skin->get_upgrade_messages();
    36893751        }
    36903752
    3691         if ( is_array( $result ) && empty( $result[ $plugin ] ) && is_wp_error( $skin->result ) ) {
    3692                 $result = $skin->result;
    3693         }
     3753        if ( is_wp_error( $result ) ) {
     3754                $status['errorCode']    = $result->get_error_code();
     3755                $status['errorMessage'] = $result->get_error_message();
     3756                wp_send_json_error( $status );
     3757        } elseif ( is_wp_error( $skin->result ) ) {
     3758                $status['errorCode']    = $skin->result->get_error_code();
     3759                $status['errorMessage'] = $skin->result->get_error_message();
     3760                wp_send_json_error( $status );
     3761        } elseif ( $skin->get_errors()->get_error_code() ) {
     3762                $errors = $skin->get_errors();
    36943763
    3695         if ( is_array( $result ) && ! empty( $result[ $plugin ] ) ) {
     3764                $messages = array();
     3765                foreach ( $errors->get_error_codes() as $error_code ) {
     3766                        if ( $errors->get_error_data( $error_code ) && is_string( $errors->get_error_data( $error_code ) ) ) {
     3767                                $messages[] = $errors->get_error_message( $error_code ) . ' ' . esc_html( strip_tags( $errors->get_error_data( $error_code ) ) );
     3768                        } else {
     3769                                $messages[] = $errors->get_error_message( $error_code );
     3770                        }
     3771                }
     3772
     3773                $status['errorMessage'] = implode( ', ', $messages );
     3774                wp_send_json_error( $status );
     3775        } elseif ( is_array( $result ) && ! empty( $result[ $plugin ] ) ) {
    36963776                $plugin_update_data = current( $result );
    36973777
    36983778                /*
     
    37163796                        $status['newVersion'] = sprintf( __( 'Version %s' ), $plugin_data['Version'] );
    37173797                }
    37183798                wp_send_json_success( $status );
    3719         } elseif ( is_wp_error( $result ) ) {
    3720                 $status['errorMessage'] = $result->get_error_message();
    3721                 wp_send_json_error( $status );
    37223799        } elseif ( false === $result ) {
    37233800                global $wp_filesystem;
    37243801
  • 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         * Stores a log entry for an error.
     58         *
     59         * @since 4.6.0
     60         * @access public
     61         *
     62         * @param string|WP_Error $errors
     63         */
     64        public function error( $errors ) {
     65                if ( is_string( $errors ) ) {
     66                        $string = $errors;
     67                        if ( ! empty( $this->upgrader->strings[ $string ] ) ) {
     68                                $string = $this->upgrader->strings[ $string ];
     69                        }
     70
     71                        if ( false !== strpos( $string, '%' ) ) {
     72                                $args = func_get_args();
     73                                $args = array_splice( $args, 1 );
     74                                if ( ! empty( $args ) ) {
     75                                        $string = vsprintf( $string, $args );
     76                                }
     77                        }
     78
     79                        // Count existing errors to generate an unique error code.
     80                        $errors_count = count( $errors->get_error_codes() );
     81                        $this->errors->add( 'unknown_error_' . $errors_count + 1 , $string );
     82                } elseif ( is_wp_error( $errors ) ) {
     83                        foreach ( $errors->get_error_codes() as $error_code ) {
     84                                $this->errors->add( $error_code, $errors->get_error_message( $error_code ), $errors->get_error_data( $error_code ) );
     85                        }
     86                }
     87
     88                $args = func_get_args();
     89                call_user_func_array( array( $this, 'parent::error' ), $args );
     90        }
     91
     92        /**
     93         * Stores a log entry.
     94         *
     95         * @since 4.6.0
     96         * @access public
     97         *
     98         * @param string|array|WP_Error $data
     99         */
     100        public function feedback( $data ) {
     101                if ( is_wp_error( $data ) ) {
     102                        foreach ( $data->get_error_codes() as $error_code ) {
     103                                $this->errors->add( $error_code, $data->get_error_message( $error_code ), $data->get_error_data( $error_code ) );
     104                        }
     105                }
     106
     107                $args = func_get_args();
     108                call_user_func_array( array( $this, 'parent::feedback' ), $args );
     109        }
     110}
  • 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.