X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/899389d1e4043331309c0433543419258b230b60..38ac4bc40322ecdc4052db4263466573e01fa51f:/wp-admin/includes/ajax-actions.php diff --git a/wp-admin/includes/ajax-actions.php b/wp-admin/includes/ajax-actions.php index 40f8f5d1..423a159f 100644 --- a/wp-admin/includes/ajax-actions.php +++ b/wp-admin/includes/ajax-actions.php @@ -2883,6 +2883,8 @@ function wp_ajax_destroy_sessions() { * @see Plugin_Upgrader */ function wp_ajax_update_plugin() { + global $wp_filesystem; + $plugin = urldecode( $_POST['plugin'] ); $status = array( @@ -2892,6 +2894,7 @@ function wp_ajax_update_plugin() { 'oldVersion' => '', 'newVersion' => '', ); + $plugin_data = get_plugin_data( WP_PLUGIN_DIR . '/' . $plugin ); if ( $plugin_data['Version'] ) { $status['oldVersion'] = sprintf( __( 'Version %s' ), $plugin_data['Version'] ); @@ -2906,15 +2909,17 @@ function wp_ajax_update_plugin() { include_once( ABSPATH . 'wp-admin/includes/class-wp-upgrader.php' ); - $current = get_site_transient( 'update_plugins' ); - if ( empty( $current ) ) { - wp_update_plugins(); - } + wp_update_plugins(); - $upgrader = new Plugin_Upgrader( new Automatic_Upgrader_Skin() ); + $skin = new Automatic_Upgrader_Skin(); + $upgrader = new Plugin_Upgrader( $skin ); $result = $upgrader->bulk_upgrade( array( $plugin ) ); - if ( is_array( $result ) ) { + if ( is_array( $result ) && empty( $result[$plugin] ) && is_wp_error( $skin->result ) ) { + $result = $skin->result; + } + + if ( is_array( $result ) && !empty( $result[ $plugin ] ) ) { $plugin_update_data = current( $result ); /* @@ -2929,7 +2934,8 @@ function wp_ajax_update_plugin() { wp_send_json_error( $status ); } - $plugin_data = get_plugin_data( WP_PLUGIN_DIR . '/' . $plugin ); + $plugin_data = get_plugins( '/' . $result[ $plugin ]['destination_name'] ); + $plugin_data = reset( $plugin_data ); if ( $plugin_data['Version'] ) { $status['newVersion'] = sprintf( __( 'Version %s' ), $plugin_data['Version'] ); @@ -2939,10 +2945,18 @@ function wp_ajax_update_plugin() { } else if ( is_wp_error( $result ) ) { $status['error'] = $result->get_error_message(); wp_send_json_error( $status ); - } else if ( is_bool( $result ) && ! $result ) { + + } else if ( is_bool( $result ) && ! $result ) { $status['errorCode'] = 'unable_to_connect_to_filesystem'; $status['error'] = __( 'Unable to connect to the filesystem. Please confirm your credentials.' ); + + // Pass through the error from WP_Filesystem if one was raised + if ( is_wp_error( $wp_filesystem->errors ) && $wp_filesystem->errors->get_error_code() ) { + $status['error'] = $wp_filesystem->errors->get_error_message(); + } + wp_send_json_error( $status ); + } }