WordPress.org

Make WordPress Core

Ticket #48850: 48850.12.diff

File 48850.12.diff, 9.5 KB (added by desrosj, 21 months ago)
  • src/wp-admin/includes/class-plugin-upgrader.php

     
    7373        }
    7474
    7575        /**
     76         * Determines if this plugin should update to an offered version.
     77         *
     78         * @since 5.4.0
     79         *
     80         * @param object $plugin
     81         * @return bool True if we should update to the offered version, otherwise false.
     82         */
     83        public static function should_update_to_version( $plugin ) {
     84                if ( defined( 'WP_AUTO_UPDATE_PLUGINS' ) ) {
     85                        $update = (bool) WP_AUTO_UPDATE_PLUGINS;
     86                } else {
     87                        $enabled_plugin_auto_updates = get_site_option( 'wp_plugin_auto_update', array() );
     88                        $update                      = in_array( $plugin->plugin, $enabled_plugin_auto_updates, true );
     89                }
     90
     91                /**
     92                 * Filters whether to enable automatic updates for the plugin.
     93                 *
     94                 * @since 5.4.0
     95                 *
     96                 * @param bool   $update      Whether to enable automatic updates for this plugin.
     97                 * @param string $plugin_file Main plugin file.
     98                 * @param object $plugin      Plugin object.
     99                 */
     100                $update = apply_filters( 'allow_auto_plugin_update', $update, $plugin->plugin, $plugin );
     101
     102                return $update;
     103        }
     104
     105        /**
    76106         * Install a plugin package.
    77107         *
    78108         * @since 2.8.0
  • src/wp-admin/includes/class-wp-automatic-updater.php

     
    158158                // Next up, is this an item we can update?
    159159                if ( 'core' == $type ) {
    160160                        $update = Core_Upgrader::should_update_to_version( $item->current );
     161                } elseif ( 'plugin' === $type ) {
     162                        $update = Plugin_Upgrader::should_update_to_version( $item );
    161163                } else {
    162164                        $update = ! empty( $item->autoupdate );
    163165                }
     
    499501                                $this->after_core_update( $this->update_results['core'][0] );
    500502                        }
    501503
     504                        if ( ! empty( $this->update_results['plugin'] ) ) {
     505                                $this->after_plugin_update( $this->update_results['plugin'] );
     506                        }
     507
    502508                        /**
    503509                         * Fires after all automatic updates have run.
    504510                         *
     
    606612        }
    607613
    608614        /**
     615         * If we tried to perform plugin updates, check if we should send an email.
     616         *
     617         * @since 5.4.0
     618         *
     619         * @param object $update_results The result of the plugin updates.
     620         */
     621        function after_plugin_update( $update_results ) {
     622                if ( empty( $update_results ) ) {
     623                        return;
     624                }
     625
     626                $success_items = array();
     627                $failure_items = array();
     628
     629                foreach ( $update_results as $update_result ) {
     630                        if ( true === $update_result->result ) {
     631                                $success_items[] = $update_result;
     632                        } else {
     633                                $failure_items[] = $update_result;
     634                        }
     635                }
     636
     637                // No updates were logged.
     638                if ( empty( $success_items ) && empty( $failure_items ) ) {
     639                        return;
     640                }
     641
     642                if ( empty( $failure_items ) ) {
     643                        $this->send_plugin_email( 'success', $success_items, $failure_items );
     644                } elseif ( empty( $success_items ) ) {
     645                        $this->send_plugin_email( 'fail', $success_items, $failure_items );
     646                } else {
     647                        $this->send_plugin_email( 'mixed', $success_items, $failure_items );
     648                }
     649        }
     650
     651        /**
    609652         * Sends an email upon the completion or failure of a background core update.
    610653         *
    611654         * @since 3.7.0
     
    752795                        // Support offer if available.
    753796                        $body .= "\n\n" . sprintf(
    754797                                /* translators: %s: Support email address. */
    755                                 __( 'The WordPress team is willing to help you. Forward this email to %s and the team will work with you to make sure your site is working.' ),
     798                                        __( 'The WordPress team is willing to help you. Forward this email to %s and the team will work with you to make sure your site is working.' ),
    756799                                $core_update->support_email
    757800                        );
    758801                } else {
     
    844887        }
    845888
    846889        /**
     890         * Sends an email upon the completion or failure of a plugin background update.
     891         *
     892         * @since 5.4.0
     893         *
     894         * @param string $type               The type of email to send. Can be one of 'success', 'failure', 'mixed'.
     895         * @param array  $successful_updates A list of plugin updates that succeeded.
     896         * @param array  $failed_updates     A list of plugin updates that failed.
     897         */
     898        protected function send_plugin_email( $type, $successful_updates, $failed_updates ) {
     899                /**
     900                 * Filters whether to send an email following an automatic background plugin update.
     901                 *
     902                 * @since 5.4.0
     903                 *
     904                 * @param bool   $send    Whether to send the email. Default true.
     905                 * @param string $type    The type of email to send. Can be one of
     906                 *                        'success', 'failure' or 'mixed'.
     907                 * @param object $updates The updates offered that were attempted.
     908                 */
     909                if ( ! apply_filters( 'auto_plugin_update_send_email', true, $type, $this->update_results['plugin'] ) ) {
     910                        return;
     911                }
     912
     913                // No updates were attempted.
     914                if ( empty( $successful_updates ) && empty( $failed_updates ) ) {
     915                        return;
     916                }
     917
     918                $body = array();
     919
     920                switch ( $type ) {
     921                        case 'success':
     922                                /* translators: %s: Site title. */
     923                                $subject = __( '[%s] Plugins have automatically updated' );
     924
     925                                break;
     926
     927                        case 'fail':
     928                                /* translators: %s: Site title. */
     929                                $subject = __( '[%s] Plugins have failed to update' );
     930                                $body[]  = sprintf(
     931                                        /* translators: %s: Home URL. */
     932                                        __( 'Howdy! Failures occurred when attempting to update plugins on your site at %s.' ),
     933                                        home_url()
     934                                );
     935                                $body[] = "\n";
     936                                $body[] = __( "Please check out your site now. It's possible that everything is working. If it says you need to update, you should do so." );
     937
     938                                break;
     939
     940                        case 'mixed':
     941                                /* translators: %s: Site title. */
     942                                $subject = __( '[%s] Some plugins have automatically updated' );
     943
     944                                $body[] = sprintf(
     945                                        /* translators: %s: Home URL. */
     946                                        __( 'Howdy! There were some failures while attempting to update plugins on your site at %s.' ),
     947                                        home_url()
     948                                );
     949                                $body[] = "\n";
     950                                $body[] = __( "Please check out your site now. It's possible that everything is working. If it says you need to update, you should do so." );
     951                                $body[] = "\n";
     952
     953                                break;
     954                }
     955
     956                if ( in_array( $type, array( 'fail', 'mixed' ), true ) && ! empty( $failed_updates ) ) {
     957                        $body[] = __( 'The following plugins failed to update:' );
     958                        // List failed updates.
     959                        foreach ( $failed_updates as $item ) {
     960                                /* translators: %s: Name of plugin. */
     961                                $body[] = ' ' . sprintf( __( '- %s' ), $item->name );
     962                        }
     963                        $body[] = "\n";
     964                }
     965
     966                if ( in_array( $type, array( 'success', 'mixed' ), true ) && ! empty( $successful_updates ) ) {
     967                        // Successful updates.
     968                        $body[] = __( 'The following plugins were successfully updated:' );
     969
     970                        foreach ( $successful_updates as $plugin ) {
     971                                /* translators: %s: Name of plugin. */
     972                                $body[] = ' ' . sprintf( __( '- %s' ), $plugin->name );
     973                        }
     974                }
     975
     976                $body[] = "\n";
     977
     978                // Add a note about the support forums.
     979                $body[] = __( 'If you experience any issues or need support, the volunteers in the WordPress.org support forums may be able to help.' );
     980                $body[] = __( 'https://wordpress.org/support/forums/' );
     981
     982                $body[] = "\n" . __( 'The WordPress Team' );
     983
     984                $body    = implode( "\n", $body );
     985                $to      = get_site_option( 'admin_email' );
     986                $subject = sprintf( $subject, wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES ) );
     987                $headers = '';
     988
     989                $email = compact( 'to', 'subject', 'body', 'headers' );
     990
     991                /**
     992                 * Filters the email sent following an automatic background plugin update.
     993                 *
     994                 * @since 5.4.0
     995                 *
     996                 * @param array $email {
     997                 *     Array of email arguments that will be passed to wp_mail().
     998                 *
     999                 *     @type string $to      The email recipient. An array of emails
     1000                 *                           can be returned, as handled by wp_mail().
     1001                 *     @type string $subject The email's subject.
     1002                 *     @type string $body    The email message body.
     1003                 *     @type string $headers Any email headers, defaults to no headers.
     1004                 * }
     1005                 * @param string $type        The type of email being sent. Can be one of
     1006                 *                            'success', 'fail', 'mixed'.
     1007                 * @param object $updates    The updates that were attempted.
     1008                 */
     1009                $email = apply_filters( 'auto_plugin_update_email', $email, $type, $this->update_results['plugin'] );
     1010
     1011                wp_mail( $email['to'], wp_specialchars_decode( $email['subject'] ), $email['body'], $email['headers'] );
     1012        }
     1013
     1014        /**
    8471015         * Prepares and sends an email of a full log of background update results, useful for debugging and geekery.
    8481016         *
    8491017         * @since 3.7.0
  • src/wp-admin/includes/class-wp-upgrader.php

     
    783783                        return $working_dir;
    784784                }
    785785
     786                // Enable maintenance mode for plugins.
     787                if ( isset( $options['hook_extra'] ) && 'plugin' === $options['hook_extra']['type'] && is_plugin_active( $options['hook_extra']['plugin'] ) ) {
     788                        $this->maintenance_mode( true );
     789                }
     790
    786791                // With the given options, this installs it to the destination directory.
    787792                $result = $this->install_package(
    788793                        array(
     
    795800                        )
    796801                );
    797802
     803                // Disable maintenance mode for plugins.
     804                if ( isset( $options['hook_extra'] ) && 'plugin' === $options['hook_extra']['type'] && is_plugin_active( $options['hook_extra']['plugin'] ) ) {
     805                        $this->maintenance_mode( false );
     806                }
     807
    798808                $this->skin->set_result( $result );
    799809                if ( is_wp_error( $result ) ) {
    800810                        $this->skin->error( $result );