]> scripts.mit.edu Git - autoinstalls/wordpress.git/blobdiff - wp-admin/includes/ajax-actions.php
WordPress 4.2.3
[autoinstalls/wordpress.git] / wp-admin / includes / ajax-actions.php
index 40f8f5d195792e9cadabee569961bc163106646d..423a159f78874f7b2a14b17c51a15f874b802a35 100644 (file)
@@ -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 );
+
        }
 }