Make WordPress Core

Ticket #48850: 48850.4.diff

File 48850.4.diff, 11.2 KB (added by audrasjb, 5 years ago)

Adds time before the next scheduled update in both update.php (plugins screen) and update-core.php (updates screen).

  • src/wp-admin/includes/class-wp-plugins-list-table.php

    diff --git a/src/wp-admin/includes/class-wp-plugins-list-table.php b/src/wp-admin/includes/class-wp-plugins-list-table.php
    index a36ec05221..b22cd51df8 100644
    a b class WP_Plugins_List_Table extends WP_List_Table { 
    4040                );
    4141
    4242                $status = 'all';
    43                 if ( isset( $_REQUEST['plugin_status'] ) && in_array( $_REQUEST['plugin_status'], array( 'active', 'inactive', 'recently_activated', 'upgrade', 'mustuse', 'dropins', 'search', 'paused' ) ) ) {
     43                if ( isset( $_REQUEST['plugin_status'] ) && in_array( $_REQUEST['plugin_status'], array( 'active', 'inactive', 'recently_activated', 'upgrade', 'mustuse', 'dropins', 'search', 'paused', 'update-on', 'update-off' ) ) ) {
    4444                        $status = $_REQUEST['plugin_status'];
    4545                }
    4646
    class WP_Plugins_List_Table extends WP_List_Table { 
    100100                        'mustuse'            => array(),
    101101                        'dropins'            => array(),
    102102                        'paused'             => array(),
     103                        'update-on'          => array(),
     104                        'update-off'         => array(),
    103105                );
    104106
    105107                $screen = $this->screen;
    class WP_Plugins_List_Table extends WP_List_Table { 
    179181                        update_option( 'recently_activated', $recently_activated );
    180182                }
    181183
    182                 $plugin_info = get_site_transient( 'update_plugins' );
     184                $plugin_info            = get_site_transient( 'update_plugins' );
     185                $wp_autoupdated_plugins = get_option( 'wp_autoupdated_plugins', array() );
    183186
    184187                foreach ( (array) $plugins['all'] as $plugin_file => $plugin_data ) {
    185188                        // Extra info if known. array_merge() ensures $plugin_data has precedence if keys collide.
    class WP_Plugins_List_Table extends WP_List_Table { 
    233236                                // Populate the inactive list with plugins that aren't activated
    234237                                $plugins['inactive'][ $plugin_file ] = $plugin_data;
    235238                        }
     239
     240                        if ( in_array( $plugin_data['plugin'], $wp_autoupdated_plugins, true ) ) {
     241                                $plugins['update-on'][ $plugin_file ] = $plugin_data;
     242                        } else {
     243                                $plugins['update-off'][ $plugin_file ] = $plugin_data;
     244                        }
    236245                }
    237246
    238247                if ( strlen( $s ) ) {
    class WP_Plugins_List_Table extends WP_List_Table { 
    493502                                                $count
    494503                                        );
    495504                                        break;
     505                                case 'update-on':
     506                                        /* translators: %s: Number of plugins. */
     507                                        $text = _n(
     508                                                'Auto Update On <span class="count">(%s)</span>',
     509                                                'Auto Update On <span class="count">(%s)</span>',
     510                                                $count
     511                                        );
     512                                        break;
     513                                case 'update-off':
     514                                        /* translators: %s: Number of plugins. */
     515                                        $text = _n(
     516                                                'Auto Update Off <span class="count">(%s)</span>',
     517                                                'Auto Update Off <span class="count">(%s)</span>',
     518                                                $count
     519                                        );
     520                                        break;
    496521                        }
    497522
    498523                        if ( 'search' !== $type ) {
    class WP_Plugins_List_Table extends WP_List_Table { 
    527552
    528553                if ( ! is_multisite() || $this->screen->in_admin( 'network' ) ) {
    529554                        if ( current_user_can( 'update_plugins' ) ) {
    530                                 $actions['update-selected'] = __( 'Update' );
     555                                $actions['update-selected']             = __( 'Update' );
     556                                $actions['enable-autoupdate-selected']  = __( 'Enable auto update' );
     557                                $actions['disable-autoupdate-selected'] = __( 'Disable auto update' );
    531558                        }
    532559                        if ( current_user_can( 'delete_plugins' ) && ( 'active' != $status ) ) {
    533560                                $actions['delete-selected'] = __( 'Delete' );
    class WP_Plugins_List_Table extends WP_List_Table { 
    960987                                                }
    961988                                        }
    962989
     990                                        $wp_autoupdated_plugins = get_option( 'wp_autoupdated_plugins', array() );
     991                                        if ( in_array( $plugin_file, $wp_autoupdated_plugins, true ) ) {
     992                                                echo '<p class="plugin-autoupdate-enabled"><span class="dashicons dashicons-update" aria-hidden="true"></span> ' . __( 'Automatic update activated' ) . '</p>';
     993                                        }
     994
    963995                                        echo '</td>';
    964996                                        break;
    965997                                default:
  • src/wp-admin/includes/update.php

    diff --git a/src/wp-admin/includes/update.php b/src/wp-admin/includes/update.php
    index 0caa04a963..2d39b9bbde 100644
    a b function wp_plugin_update_row( $file, $plugin_data ) { 
    488488                        );
    489489                } else {
    490490                        if ( $compatible_php ) {
     491                                $wp_autoupdated_plugins = get_option( 'wp_autoupdated_plugins', array() ); /* JBA */
     492                                $autoupdate = '';
     493                                if ( in_array( $plugin_data['plugin'], $wp_autoupdated_plugins, true ) ) {
     494                                        $next_update_time = wp_next_scheduled( 'wp_version_check' );
     495                                        $time_to_next_update = human_time_diff( intval( $next_update_time ) );
     496                                        $autoupdate = ' <span class="plugin-autoupdate-enabled">';
     497                                        $autoupdate .= sprintf(
     498                                                /* translators: Time until the next update. */
     499                                                __( 'Automatic update scheduled in %s.' ),
     500                                                $time_to_next_update
     501                                        );
     502                                        $autoupdate .= '</span> ';
     503                                }
    491504                                printf(
    492                                         /* translators: 1: Plugin name, 2: Details URL, 3: Additional link attributes, 4: Version number, 5: Update URL, 6: Additional link attributes. */
    493                                         __( 'There is a new version of %1$s available. <a href="%2$s" %3$s>View version %4$s details</a> or <a href="%5$s" %6$s>update now</a>.' ),
     505                                        /* translators: 1: Plugin name, 2: Details URL, 3: Additional link attributes, 4: Version number, 5: Update URL, 6: Additional link attributes, 7: Automatic update informations. */
     506                                        __( 'There is a new version of %1$s available. <a href="%2$s" %3$s>View version %4$s details</a> or <a href="%5$s" %6$s>update now</a>. %7$s' ),
    494507                                        $plugin_name,
    495508                                        esc_url( $details_url ),
    496509                                        sprintf(
    function wp_plugin_update_row( $file, $plugin_data ) { 
    504517                                                'class="update-link" aria-label="%s"',
    505518                                                /* translators: %s: Plugin name. */
    506519                                                esc_attr( sprintf( __( 'Update %s now' ), $plugin_name ) )
    507                                         )
     520                                        ),
     521                                        $autoupdate
    508522                                );
    509523                        } else {
    510524                                printf(
  • src/wp-admin/plugins.php

    diff --git a/src/wp-admin/plugins.php b/src/wp-admin/plugins.php
    index acebd8e452..91e138f6b2 100644
    a b if ( $action ) { 
    154154                        require_once( ABSPATH . 'wp-admin/admin-footer.php' );
    155155                        exit;
    156156
     157                case 'enable-autoupdate-selected':
     158                        if ( ! current_user_can( 'update_plugins' ) ) {
     159                                wp_die( __( 'Sorry, you are not allowed to enable plugin automatic updates.' ) );
     160                        }
     161
     162                        check_admin_referer( 'bulk-plugins' );
     163
     164                        $plugins = isset( $_POST['checked'] ) ? (array) wp_unslash( $_POST['checked'] ) : array();
     165
     166                        if ( empty( $plugins ) ) {
     167                                wp_redirect( self_admin_url( "plugins.php?plugin_status=$status&paged=$page&s=$s" ) );
     168                                exit;
     169                        }
     170
     171                        $previous_autoupdated_plugins = get_option( 'wp_autoupdated_plugins', array() );
     172                        $new_autoupdated_plugins      = array_merge( $previous_autoupdated_plugins, $plugins );
     173                        $new_autoupdated_plugins      = array_unique( $new_autoupdated_plugins );
     174                        update_option( 'wp_autoupdated_plugins', $new_autoupdated_plugins );
     175
     176                        wp_redirect( self_admin_url( "plugins.php?enable-autoupdate=true&plugin_status=$status&paged=$page&s=$s" ) );
     177                        exit;
     178
     179                case 'disable-autoupdate-selected':
     180                        if ( ! current_user_can( 'update_plugins' ) ) {
     181                                wp_die( __( 'Sorry, you are not allowed to disable plugin automatic updates.' ) );
     182                        }
     183
     184                        check_admin_referer( 'bulk-plugins' );
     185
     186                        $plugins = isset( $_POST['checked'] ) ? (array) wp_unslash( $_POST['checked'] ) : array();
     187
     188                        if ( empty( $plugins ) ) {
     189                                wp_redirect( self_admin_url( "plugins.php?plugin_status=$status&paged=$page&s=$s" ) );
     190                                exit;
     191                        }
     192
     193                        $previous_autoupdated_plugins = get_option( 'wp_autoupdated_plugins', array() );
     194                        $new_autoupdated_plugins      = array_diff( $previous_autoupdated_plugins, $plugins );
     195                        $new_autoupdated_plugins      = array_unique( $new_autoupdated_plugins );
     196                        update_option( 'wp_autoupdated_plugins', $new_autoupdated_plugins );
     197
     198                        wp_redirect( self_admin_url( "plugins.php?disable-autoupdate=true&plugin_status=$status&paged=$page&s=$s" ) );
     199                        exit;
     200
    157201                case 'error_scrape':
    158202                        if ( ! current_user_can( 'activate_plugin', $plugin ) ) {
    159203                                wp_die( __( 'Sorry, you are not allowed to activate this plugin.' ) );
    elseif ( isset( $_GET['deleted'] ) ) : 
    578622        <div id="message" class="updated notice is-dismissible"><p><?php _e( 'Selected plugins deactivated.' ); ?></p></div>
    579623<?php elseif ( 'update-selected' == $action ) : ?>
    580624        <div id="message" class="updated notice is-dismissible"><p><?php _e( 'All selected plugins are up to date.' ); ?></p></div>
     625<?php elseif ( isset( $_GET['enable-autoupdate'] ) ) : ?>
     626        <div id="message" class="updated notice is-dismissible"><p><?php _e( 'All selected plugins will now update automatically.' ); ?></p></div>
     627<?php elseif ( isset( $_GET['disable-autoupdate'] ) ) : ?>
     628        <div id="message" class="updated notice is-dismissible"><p><?php _e( 'All selected plugins won’t automatically update anymore.' ); ?></p></div>
    581629<?php elseif ( isset( $_GET['resume'] ) ) : ?>
    582630        <div id="message" class="updated notice is-dismissible"><p><?php _e( 'Plugin resumed.' ); ?></p></div>
    583631<?php endif; ?>
  • src/wp-admin/update-core.php

    diff --git a/src/wp-admin/update-core.php b/src/wp-admin/update-core.php
    index 2093201149..85b2827841 100644
    a b function list_plugin_updates() { 
    328328
    329329        <tbody class="plugins">
    330330        <?php
     331        // Get autoupdated plugins
     332        $wp_autoupdated_plugins = get_option( 'wp_autoupdated_plugins', array() );
     333
    331334        foreach ( (array) $plugins as $plugin_file => $plugin_data ) {
    332335                $plugin_data = (object) _get_plugin_data_markup_translate( $plugin_file, (array) $plugin_data, false, true );
    333336
    function list_plugin_updates() { 
    395398                );
    396399
    397400                $checkbox_id = 'checkbox_' . md5( $plugin_data->Name );
     401
     402                $autoupdate = '';
     403                if ( in_array( $plugin_data->update->plugin, $wp_autoupdated_plugins, true ) ) {
     404                        $next_update_time = wp_next_scheduled( 'wp_version_check' );
     405                        $time_to_next_update = human_time_diff( intval( $next_update_time ) );
     406                        $autoupdate = ' <span class="plugin-autoupdate-enabled">';
     407                        $autoupdate .= sprintf(
     408                                /* translators: Time until the next update. */
     409                                __( 'Automatic update scheduled in %s.' ),
     410                                $time_to_next_update
     411                        );
     412                        $autoupdate .= '</span> ';
     413                }
    398414                ?>
    399415        <tr>
    400416                <td class="check-column">
    function list_plugin_updates() { 
    418434                                $plugin_data->Version,
    419435                                $plugin_data->update->new_version
    420436                        );
    421                         echo ' ' . $details . $compat . $upgrade_notice;
     437                        echo ' ' . $details . $autoupdate . $compat . $upgrade_notice;
    422438                        ?>
    423439                </p></td>
    424440        </tr>
  • src/wp-includes/update.php

    diff --git a/src/wp-includes/update.php b/src/wp-includes/update.php
    index dfb27b2aad..31222f3207 100644
    a b if ( ( ! is_main_site() && ! is_network_admin() ) || wp_doing_ajax() ) { 
    813813        return;
    814814}
    815815
     816function wp_auto_update_plugin( $update, $item ) {
     817        $wp_autoupdated_plugins = get_option( 'wp_autoupdated_plugins', array() );
     818        if ( in_array( $item->plugin, $wp_autoupdated_plugins, true ) ) {
     819                return true;
     820        } else {
     821                return $update;
     822        }
     823}
     824
    816825add_action( 'admin_init', '_maybe_update_core' );
    817826add_action( 'wp_version_check', 'wp_version_check' );
    818827
    add_action( 'wp_update_themes', 'wp_update_themes' ); 
    831840add_action( 'update_option_WPLANG', 'wp_clean_update_cache', 10, 0 );
    832841
    833842add_action( 'wp_maybe_auto_update', 'wp_maybe_auto_update' );
     843add_filter( 'auto_update_plugin', 'wp_auto_update_plugin', 10, 2 );
    834844
    835845add_action( 'init', 'wp_schedule_update_checks' );