* @see Plugin_Upgrader
*/
function wp_ajax_update_plugin() {
+ global $wp_filesystem;
+
$plugin = urldecode( $_POST['plugin'] );
$status = array(
'oldVersion' => '',
'newVersion' => '',
);
+
$plugin_data = get_plugin_data( WP_PLUGIN_DIR . '/' . $plugin );
if ( $plugin_data['Version'] ) {
$status['oldVersion'] = sprintf( __( 'Version %s' ), $plugin_data['Version'] );
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 );
/*
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'] );
} 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 );
+
}
}