WordPress.org

Make WordPress Core

Ticket #18876: 18876.diff

File 18876.diff, 4.8 KB (added by nacin, 2 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 );