Make WordPress Core

Changeset 38199


Ignore:
Timestamp:
08/04/2016 10:17:44 PM (10 years ago)
Author:
ocean90
Message:

Upgrade/Install: Make some install/update failures more verbose.

An upgrader class is used in conjunction with an upgrader skin class. A skin class handles the logging for an upgrade and informs a user about the progress and failures.
The current Ajax install/update handlers are using the Automatic_Upgrader_Skin class because during an Ajax request no output is intended. The difference between Ajax updates and automatic updates is that you will see the full log (usually by email) while Ajax updates focus only on success or failure. For that Automatic_Upgrader_Skin has one disadvantage: It doesn't provide a way to retrieve failure messages which were passed through WP_Upgrader_Skin::error() by the upgrader.
To solve this issue a new skin WP_Ajax_Upgrader_Skin has been introduced. The skin extends Automatic_Upgrader_Skin and overrides the error() and feedback() methods to intercept all errors, which can be a WP_Error object or a string.

This updates all four Ajax handler for installing/updating themes/plugins to use the new skin. They now also check the skin for any intercepted errors and pass them on to the user.

Props flixos90, obenland, ocean90.
Props DrewAPicture, pento for review.
Fixes #37531.

Location:
trunk/src/wp-admin
Files:
1 added
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-admin/includes/ajax-actions.php

    r38168 r38199  
    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();
     3359                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();
    33573366                wp_send_json_error( $status );
    33583367        } elseif ( is_null( $result ) ) {
     
    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();
    3445         }
    3446 
    3447         if ( is_array( $result ) && ! empty( $result[ $stylesheet ] ) ) {
     3454                $status['debug'] = $skin->get_upgrade_messages();
     3455        }
     3456
     3457        if ( is_wp_error( $skin->result ) ) {
     3458                $status['errorCode']    = $skin->result->get_error_code();
     3459                $status['errorMessage'] = $skin->result->get_error_message();
     3460                wp_send_json_error( $status );
     3461        } elseif ( $skin->get_errors()->get_error_code() ) {
     3462                $status['errorMessage'] = $skin->get_error_messages();
     3463                wp_send_json_error( $status );
     3464        } elseif ( is_array( $result ) && ! empty( $result[ $stylesheet ] ) ) {
    34483465
    34493466                // Theme is already at the latest version.
     
    34593476
    34603477                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 );
    34653478        } elseif ( false === $result ) {
    34663479                global $wp_filesystem;
     
    35953608        $status['pluginName'] = $api->name;
    35963609
    3597         $upgrader = new Plugin_Upgrader( new Automatic_Upgrader_Skin() );
     3610        $skin     = new WP_Ajax_Upgrader_Skin();
     3611        $upgrader = new Plugin_Upgrader( $skin );
    35983612        $result   = $upgrader->install( $api->download_link );
    35993613
    36003614        if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
    3601                 $status['debug'] = $upgrader->skin->get_upgrade_messages();
     3615                $status['debug'] = $skin->get_upgrade_messages();
    36023616        }
    36033617
    36043618        if ( is_wp_error( $result ) ) {
     3619                $status['errorCode']    = $result->get_error_code();
    36053620                $status['errorMessage'] = $result->get_error_message();
     3621                wp_send_json_error( $status );
     3622        } elseif ( is_wp_error( $skin->result ) ) {
     3623                $status['errorCode']    = $skin->result->get_error_code();
     3624                $status['errorMessage'] = $skin->result->get_error_message();
     3625                wp_send_json_error( $status );
     3626        } elseif ( $skin->get_errors()->get_error_code() ) {
     3627                $status['errorMessage'] = $skin->get_error_messages();
    36063628                wp_send_json_error( $status );
    36073629        } elseif ( is_null( $result ) ) {
     
    36813703        wp_update_plugins();
    36823704
    3683         $skin     = new Automatic_Upgrader_Skin();
     3705        $skin     = new WP_Ajax_Upgrader_Skin();
    36843706        $upgrader = new Plugin_Upgrader( $skin );
    36853707        $result   = $upgrader->bulk_upgrade( array( $plugin ) );
    36863708
    36873709        if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
    3688                 $status['debug'] = $upgrader->skin->get_upgrade_messages();
    3689         }
    3690 
    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 ] ) ) {
     3710                $status['debug'] = $skin->get_upgrade_messages();
     3711        }
     3712
     3713        if ( is_wp_error( $skin->result ) ) {
     3714                $status['errorCode']    = $skin->result->get_error_code();
     3715                $status['errorMessage'] = $skin->result->get_error_message();
     3716                wp_send_json_error( $status );
     3717        } elseif ( $skin->get_errors()->get_error_code() ) {
     3718                $status['errorMessage'] = $skin->get_error_messages();
     3719                wp_send_json_error( $status );
     3720        } elseif ( is_array( $result ) && ! empty( $result[ $plugin ] ) ) {
    36963721                $plugin_update_data = current( $result );
    36973722
     
    37173742                }
    37183743                wp_send_json_success( $status );
    3719         } elseif ( is_wp_error( $result ) ) {
    3720                 $status['errorMessage'] = $result->get_error_message();
    3721                 wp_send_json_error( $status );
    37223744        } elseif ( false === $result ) {
    37233745                global $wp_filesystem;
  • trunk/src/wp-admin/includes/class-wp-upgrader-skins.php

    r37408 r38199  
    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';
  • trunk/src/wp-admin/includes/class-wp-upgrader.php

    r38074 r38199  
    3939/** Automatic_Upgrader_Skin class */
    4040require_once ABSPATH . 'wp-admin/includes/class-automatic-upgrader-skin.php';
     41
     42/** WP_Ajax_Upgrader_Skin class */
     43require_once ABSPATH . 'wp-admin/includes/class-wp-ajax-upgrader-skin.php';
    4144
    4245/**
  • trunk/src/wp-admin/js/updates.js

    r38196 r38199  
    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();
     
    15341534         */
    15351535        wp.updates.maybeHandleCredentialError = function( response, action ) {
    1536                 if ( response.errorCode && 'unable_to_connect_to_filesystem' === response.errorCode ) {
     1536                if ( wp.updates.shouldRequestFilesystemCredentials && response.errorCode && 'unable_to_connect_to_filesystem' === response.errorCode ) {
    15371537                        wp.updates.credentialError( response, action );
    15381538                        return true;
Note: See TracChangeset for help on using the changeset viewer.