From 9d30b02ed19897d75bb71d23ecf5d43f8f416bb2 Mon Sep 17 00:00:00 2001 From: SergeyBiryukov Date: Sun, 12 Jul 2020 01:14:01 +0000 Subject: [PATCH] Administration: Handle the result of `Plugin_Upgrader::bulk_upgrade()` for a plugin that is already at the latest version in the same way it is handled for themes. This corrects a fragile check of the result in `wp_ajax_update_plugin()` that depended on the internal array pointer, and brings some consistency with `wp_ajax_update_theme()`. Follow-up to [37714], [48401]. See #50448. git-svn-id: https://develop.svn.wordpress.org/trunk@48445 602fd350-edb4-49c9-b593-d223f7449a82 --- src/wp-admin/includes/ajax-actions.php | 13 +++++++------ src/wp-admin/includes/class-plugin-upgrader.php | 2 +- src/wp-admin/includes/class-theme-upgrader.php | 2 +- src/wp-admin/includes/class-wp-upgrader.php | 2 +- tests/phpunit/tests/ajax/UpdatePlugin.php | 2 +- 5 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/wp-admin/includes/ajax-actions.php b/src/wp-admin/includes/ajax-actions.php index b821c0e04cea..4a30934a5ef3 100644 --- a/src/wp-admin/includes/ajax-actions.php +++ b/src/wp-admin/includes/ajax-actions.php @@ -4462,18 +4462,18 @@ function wp_ajax_update_plugin() { $status['errorMessage'] = $skin->get_error_messages(); wp_send_json_error( $status ); } elseif ( is_array( $result ) && ! empty( $result[ $plugin ] ) ) { - $plugin_update_data = current( $result ); /* - * If the `update_plugins` site transient is empty (e.g. when you update - * two plugins in quick succession before the transient repopulates), - * this may be the return. + * Plugin is already at the latest version. + * + * This may also be the return value If the `update_plugins` site transient is empty, + * e.g. when you update two plugins in quick succession before the transient repopulates. * * Preferably something can be done to ensure `update_plugins` isn't empty. * For now, surface some sort of error here. */ - if ( true === $plugin_update_data ) { - $status['errorMessage'] = __( 'Plugin update failed.' ); + if ( true === $result[ $plugin ] ) { + $status['errorMessage'] = $upgrader->strings['up_to_date']; wp_send_json_error( $status ); } @@ -4484,6 +4484,7 @@ function wp_ajax_update_plugin() { /* translators: %s: Plugin version. */ $status['newVersion'] = sprintf( __( 'Version %s' ), $plugin_data['Version'] ); } + wp_send_json_success( $status ); } elseif ( false === $result ) { global $wp_filesystem; diff --git a/src/wp-admin/includes/class-plugin-upgrader.php b/src/wp-admin/includes/class-plugin-upgrader.php index cad0a613ac98..22f8221e7b2f 100644 --- a/src/wp-admin/includes/class-plugin-upgrader.php +++ b/src/wp-admin/includes/class-plugin-upgrader.php @@ -391,8 +391,8 @@ public function bulk_upgrade( $plugins, $args = array() ) { unset( $past_failure_emails[ $plugin ] ); } + update_option( 'auto_plugin_theme_update_emails', $past_failure_emails ); - reset( $results ); return $results; } diff --git a/src/wp-admin/includes/class-theme-upgrader.php b/src/wp-admin/includes/class-theme-upgrader.php index 9dfb751d1240..b5364c84ce16 100644 --- a/src/wp-admin/includes/class-theme-upgrader.php +++ b/src/wp-admin/includes/class-theme-upgrader.php @@ -500,8 +500,8 @@ public function bulk_upgrade( $themes, $args = array() ) { unset( $past_failure_emails[ $theme ] ); } + update_option( 'auto_plugin_theme_update_emails', $past_failure_emails ); - reset( $results ); return $results; } diff --git a/src/wp-admin/includes/class-wp-upgrader.php b/src/wp-admin/includes/class-wp-upgrader.php index d4244fb02634..8b1cc4b5fbaa 100644 --- a/src/wp-admin/includes/class-wp-upgrader.php +++ b/src/wp-admin/includes/class-wp-upgrader.php @@ -660,7 +660,7 @@ public function install_package( $args = array() ) { * @type array $hook_extra Extra arguments to pass to the filter hooks called by * WP_Upgrader::run(). * } - * @return array|false|WP_error The result from self::install_package() on success, otherwise a WP_Error, + * @return array|false|WP_Error The result from self::install_package() on success, otherwise a WP_Error, * or false if unable to connect to the filesystem. */ public function run( $options ) { diff --git a/tests/phpunit/tests/ajax/UpdatePlugin.php b/tests/phpunit/tests/ajax/UpdatePlugin.php index c761bddd48d1..ffc027123ee3 100644 --- a/tests/phpunit/tests/ajax/UpdatePlugin.php +++ b/tests/phpunit/tests/ajax/UpdatePlugin.php @@ -157,7 +157,7 @@ public function test_update_plugin() { 'slug' => 'hello-dolly', 'plugin' => 'hello.php', 'pluginName' => 'Hello Dolly', - 'errorMessage' => 'Plugin update failed.', + 'errorMessage' => 'The plugin is at the latest version.', 'oldVersion' => 'Version 1.7.2', 'newVersion' => '', 'debug' => array( 'The plugin is at the latest version.' ),