Make WordPress Core

Changeset 48688


Ignore:
Timestamp:
07/29/2020 07:59:30 PM (6 years ago)
Author:
whyisjake
Message:

Upgrade/Install: Only show auto-update for themes that support the feature.

Similar to the changes for plugins in [48669], let's only show the UI for themes when updates are supported for that theme.

See #50280.
Props dd32.

Location:
trunk/src
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/js/_enqueues/wp/theme.js

    r48650 r48688  
    803803                // Support concurrent clicks in different Theme Details overlays.
    804804                callback = function( event, data ) {
     805                        var autoupdate;
    805806                        if ( _this.model.get( 'id' ) === data.asset ) {
    806                                 _this.model.set( { autoupdate: 'enable' === data.state } );
     807                                autoupdate = _this.model.get( 'autoupdate' );
     808                                autoupdate.enabled = 'enable' === data.state;
     809                                _this.model.set( { autoupdate: autoupdate } );
    807810                                $( document ).off( 'wp-auto-update-setting-changed', callback );
    808811                        }
  • trunk/src/wp-admin/includes/theme.php

    r48659 r48688  
    648648        }
    649649
    650         $updates = array();
     650        $updates    = array();
     651        $no_updates = array();
    651652        if ( current_user_can( 'update_themes' ) ) {
    652653                $updates_transient = get_site_transient( 'update_themes' );
    653654                if ( isset( $updates_transient->response ) ) {
    654655                        $updates = $updates_transient->response;
     656                }
     657                if ( isset( $updates_transient->no_update ) ) {
     658                        $no_updates = $updates_transient->no_update;
    655659                }
    656660        }
     
    690694                $auto_update        = in_array( $slug, $auto_updates, true );
    691695                $auto_update_action = $auto_update ? 'disable-auto-update' : 'enable-auto-update';
     696
     697                if ( isset( $updates[ $slug ] ) ) {
     698                        $auto_update_supported      = true;
     699                        $auto_update_filter_payload = (object) $updates[ $slug ];
     700                } elseif ( isset( $no_updates[ $slug ] ) ) {
     701                        $auto_update_supported      = true;
     702                        $auto_update_filter_payload = (object) $no_updates[ $slug ];
     703                } else {
     704                        $auto_update_supported = false;
     705                        /*
     706                         * Create the expected payload for the auto_update_theme filter, this is the same data
     707                         * as contained within $updates or $no_updates but used when the Theme is not known.
     708                         */
     709                        $auto_update_filter_payload = (object) array(
     710                                'theme'        => $slug,
     711                                'new_version'  => $theme->get( 'Version' ),
     712                                'url'          => '',
     713                                'package'      => '',
     714                                'requires'     => $theme->get( 'RequiresWP' ),
     715                                'requires_php' => $theme->get( 'RequiresPHP' ),
     716                        );
     717                }
     718
     719                /** This action is documented in wp-admin/includes/class-wp-automatic-updater.php */
     720                $auto_update_forced = apply_filters( 'auto_update_theme', null, $auto_update_filter_payload );
    692721
    693722                $prepared_themes[ $slug ] = array(
     
    711740                        'hasPackage'     => isset( $updates[ $slug ] ) && ! empty( $updates[ $slug ]['package'] ),
    712741                        'update'         => get_theme_update_available( $theme ),
    713                         'autoupdate'     => $auto_update,
     742                        'autoupdate'     => array(
     743                                'enabled'   => $auto_update || $auto_update_forced,
     744                                'supported' => $auto_update_supported,
     745                                'forced'    => $auto_update_forced,
     746                        ),
    714747                        'actions'        => array(
    715748                                'activate'   => current_user_can( 'switch_themes' ) ? wp_nonce_url( admin_url( 'themes.php?action=activate&stylesheet=' . $encoded_slug ), 'switch-theme_' . $slug ) : null,
  • trunk/src/wp-admin/themes.php

    r48659 r48688  
    676676        $template = '
    677677                <div class="theme-autoupdate">
    678                         <# if ( data.autoupdate ) { #>
    679                                 <button type="button" class="toggle-auto-update button-link" data-slug="{{ data.id }}" data-wp-action="disable">
    680                                         <span class="dashicons dashicons-update spin hidden" aria-hidden="true"></span><span class="label">' . __( 'Disable auto-updates' ) . '</span>
    681                                 </button>
    682                         <# } else { #>
    683                                 <button type="button" class="toggle-auto-update button-link" data-slug="{{ data.id }}" data-wp-action="enable">
    684                                         <span class="dashicons dashicons-update spin hidden" aria-hidden="true"></span><span class="label">' . __( 'Enable auto-updates' ) . '</span>
    685                                 </button>
     678                        <# if ( data.autoupdate.supported ) { #>
     679                                <# if ( data.autoupdate.forced === false ) { #>
     680                                        ' . __( 'Auto-updates disabled' ) . '
     681                                <# } else if ( data.autoupdate.forced ) { #>
     682                                        ' . __( 'Auto-updates enabled' ) . '
     683                                <# } else if ( data.autoupdate.enabled ) { #>
     684                                        <button type="button" class="toggle-auto-update button-link" data-slug="{{ data.id }}" data-wp-action="disable">
     685                                                <span class="dashicons dashicons-update spin hidden" aria-hidden="true"></span><span class="label">' . __( 'Disable auto-updates' ) . '</span>
     686                                        </button>
     687                                <# } else { #>
     688                                        <button type="button" class="toggle-auto-update button-link" data-slug="{{ data.id }}" data-wp-action="enable">
     689                                                <span class="dashicons dashicons-update spin hidden" aria-hidden="true"></span><span class="label">' . __( 'Enable auto-updates' ) . '</span>
     690                                        </button>
     691                                <# } #>
    686692                        <# } #>
    687693                        <# if ( data.hasUpdate ) { #>
    688                                 <# if ( data.autoupdate ) { #>
     694                                <# if ( data.autoupdate.supported && data.autoupdate.enabled ) { #>
    689695                                        <span class="auto-update-time">
    690696                                <# } else { #>
  • trunk/src/wp-includes/update.php

    r48344 r48688  
    622622        if ( is_array( $response ) ) {
    623623                $new_update->response     = $response['themes'];
     624                $new_update->no_update    = $response['no_update'];
    624625                $new_update->translations = $response['translations'];
    625626        }
Note: See TracChangeset for help on using the changeset viewer.