Make WordPress Core


Ignore:
Timestamp:
07/07/2020 06:58:32 PM (5 years ago)
Author:
desrosj
Message:

Administration: Prevent repeat emails for identical plugin or theme auto-update attempt failures.

This change adds a throttle mechanism to plugin and theme auto-update failure emails using similar logic to the email sent for a Core auto-update.

The first time a plugin or theme auto-update fails, the package and new_version will be tracked in the auto_plugin_theme_update_emails option. An email for this specific update attempt will not be resent.

However, if this update fails again and non-repeat failures or successful updates are also present, then the failure information will be included in that email (an email needs to be sent for the new events regardless).

Props johnbillion, arpitgshah, desrosj, audrasjb, pbiron, earnjam.
Fixes #50448.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-admin/includes/class-theme-upgrader.php

    r48390 r48397  
    353353        wp_clean_themes_cache( $parsed_args['clear_update_cache'] );
    354354
     355        // Ensure any future auto-update failures trigger a failure email by removing the last
     356        // failure notification from the list when themes update successfully.
     357        $past_failure_emails = get_option( 'auto_plugin_theme_update_emails', array() );
     358
     359        if ( isset( $past_failure_emails[ $theme ] ) ) {
     360            unset( $past_failure_emails[ $theme ] );
     361            update_option( 'auto_plugin_theme_update_emails', $past_failure_emails );
     362        }
     363
    355364        return true;
    356365    }
     
    480489        remove_filter( 'upgrader_clear_destination', array( $this, 'delete_old_theme' ) );
    481490
     491        // Ensure any future auto-update failures trigger a failure email by removing the last
     492        // failure notification from the list when themes update successfully.
     493        $past_failure_emails = get_option( 'auto_plugin_theme_update_emails', array() );
     494
     495        foreach ( $results as $theme => $result ) {
     496            // Maintain last failure notification when themes failed to update manually.
     497            if ( ! $result || is_wp_error( $result ) || ! isset( $past_failure_emails[ $theme ] ) ) {
     498                continue;
     499            }
     500
     501            unset( $past_failure_emails[ $theme ] );
     502        }
     503        update_option( 'auto_plugin_theme_update_emails', $past_failure_emails );
     504
    482505        return $results;
    483506    }
Note: See TracChangeset for help on using the changeset viewer.