WordPress.org

Make WordPress Core

Ticket #18876: 18876.diff

File 18876.diff, 4.8 KB (added by nacin, 7 years ago)
  • wp-includes/update.php

     
    143143
    144144        $new_option = new stdClass;
    145145        $new_option->last_checked = time();
    146         // Check for updated every 60 minutes if hitting update pages; else, check every 12 hours.
    147         $timeout = in_array( current_filter(), array( 'load-plugins.php', 'load-update.php', 'load-update-core.php' ) ) ? 3600 : 43200;
    148         $time_not_changed = isset( $current->last_checked ) && $timeout > ( time() - $current->last_checked );
    149146
    150         $plugin_changed = false;
    151         foreach ( $plugins as $file => $p ) {
    152                 $new_option->checked[ $file ] = $p['Version'];
     147        // Check for updated every 12 hours, 60 minutes, or immediately, depending on the page.
     148        $filter = current_filter();
     149        if ( 'load-update-core.php' != $filter ) {
     150                $timeout = 'load-plugins.php' == $filter || 'load-update.php' == $filter ? 3600 : 43200;
     151                $time_not_changed = isset( $current->last_checked ) && $timeout > ( time() - $current->last_checked );
    153152
    154                 if ( !isset( $current->checked[ $file ] ) || strval($current->checked[ $file ]) !== strval($p['Version']) )
    155                         $plugin_changed = true;
    156         }
     153                if ( $time_not_changed ) {
     154                        $plugin_changed = false;
     155                        foreach ( $plugins as $file => $p ) {
     156                                $new_option->checked[ $file ] = $p['Version'];
     157               
     158                                if ( !isset( $current->checked[ $file ] ) || strval($current->checked[ $file ]) !== strval($p['Version']) )
     159                                        $plugin_changed = true;
     160                        }
    157161
    158         if ( isset ( $current->response ) && is_array( $current->response ) ) {
    159                 foreach ( $current->response as $plugin_file => $update_details ) {
    160                         if ( ! isset($plugins[ $plugin_file ]) ) {
    161                                 $plugin_changed = true;
    162                                 break;
     162                        if ( isset ( $current->response ) && is_array( $current->response ) ) {
     163                                foreach ( $current->response as $plugin_file => $update_details ) {
     164                                        if ( ! isset($plugins[ $plugin_file ]) ) {
     165                                                $plugin_changed = true;
     166                                                break;
     167                                        }
     168                                }
    163169                        }
     170
     171                        // Bail if we've checked recently and if nothing has changed
     172                        if ( ! $plugin_changed )
     173                                return false;
    164174                }
    165175        }
    166176
    167         // Bail if we've checked in the last 12 hours and if nothing has changed
    168         if ( $time_not_changed && !$plugin_changed )
    169                 return false;
    170 
    171177        // Update last_checked for current to prevent multiple blocking requests if request hangs
    172178        $current->last_checked = time();
    173179        set_site_transient( 'update_plugins', $current );
     
    222228        if ( ! is_object($last_update) )
    223229                $last_update = new stdClass;
    224230
    225         // Check for updated every 60 minutes if hitting update pages; else, check every 12 hours.
    226         $timeout = in_array( current_filter(), array( 'load-themes.php', 'load-update.php', 'load-update-core.php' ) ) ? 3600 : 43200;
    227         $time_not_changed = isset( $last_update->last_checked ) && $timeout > ( time( ) - $last_update->last_checked );
    228 
    229231        $themes = array();
    230232        $checked = array();
    231233        $exclude_fields = array('Template Files', 'Stylesheet Files', 'Status', 'Theme Root', 'Theme Root URI', 'Template Dir', 'Stylesheet Dir', 'Description', 'Tags', 'Screenshot');
     
    246248                }
    247249        }
    248250
    249         $theme_changed = false;
    250         foreach ( $checked as $slug => $v ) {
    251                 $update_request->checked[ $slug ] = $v;
     251        // Check for updated every 12 hours, 60 minutes, or immediately, depending on the page.
     252        $filter = current_filter();
     253        if ( 'load-update-core.php' != $filter ) {
     254                $timeout = 'load-themes.php' == $filter || 'load-update.php' == $filter ? 3600 : 43200;
     255                $time_not_changed = isset( $last_update->last_checked ) && $timeout > ( time( ) - $last_update->last_checked );
    252256
    253                 if ( !isset( $last_update->checked[ $slug ] ) || strval($last_update->checked[ $slug ]) !== strval($v) )
    254                         $theme_changed = true;
    255         }
     257                if ( $time_not_changed ) {
     258                        $theme_changed = false;
     259                        foreach ( $checked as $slug => $v ) {
     260                                $update_request->checked[ $slug ] = $v;
     261               
     262                                if ( !isset( $last_update->checked[ $slug ] ) || strval($last_update->checked[ $slug ]) !== strval($v) )
     263                                        $theme_changed = true;
     264                        }
    256265
    257         if ( isset ( $last_update->response ) && is_array( $last_update->response ) ) {
    258                 foreach ( $last_update->response as $slug => $update_details ) {
    259                         if ( ! isset($checked[ $slug ]) ) {
    260                                 $theme_changed = true;
    261                                 break;
     266                        if ( isset ( $last_update->response ) && is_array( $last_update->response ) ) {
     267                                foreach ( $last_update->response as $slug => $update_details ) {
     268                                        if ( ! isset($checked[ $slug ]) ) {
     269                                                $theme_changed = true;
     270                                                break;
     271                                        }
     272                                }
    262273                        }
     274
     275                        // Bail if we've checked recently and if nothing has changed
     276                        if ( ! $theme_changed )
     277                                return false;
    263278                }
    264279        }
    265280
    266         if ( $time_not_changed && !$theme_changed )
    267                 return false;
    268 
    269281        // Update last_checked for current to prevent multiple blocking requests if request hangs
    270282        $last_update->last_checked = time();
    271283        set_site_transient( 'update_themes', $last_update );