Permalink
Browse files

Check for plugin and theme updates more often when visitng update-cor…

…e.php. Props kurtpayne. fixes #18876

git-svn-id: http://core.svn.wordpress.org/trunk@19683 1a063a9b-81f0-0310-95a4-ce76da25c4cd
  • Loading branch information...
1 parent 1971ac7 commit 0f373925abe091cdfbb7227ac0bd01285662a25d ryan committed Jan 5, 2012
Showing with 68 additions and 34 deletions.
  1. +68 −34 wp-includes/update.php
View
@@ -34,6 +34,12 @@ function wp_version_check() {
$current->version_checked = $wp_version;
}
+ // Wait 60 seconds between multiple version check requests
+ $timeout = 60;
+ $time_not_changed = isset( $current->last_checked ) && $timeout > ( time() - $current->last_checked );
+ if ( $time_not_changed )
+ return false;
+
$locale = apply_filters( 'core_version_check_locale', get_locale() );
// Update last_checked for current to prevent multiple blocking requests if request hangs
@@ -143,30 +149,44 @@ function wp_update_plugins() {
$new_option = new stdClass;
$new_option->last_checked = time();
- // Check for updated every 60 minutes if hitting update pages; else, check every 12 hours.
- $timeout = in_array( current_filter(), array( 'load-plugins.php', 'load-update.php', 'load-update-core.php' ) ) ? 3600 : 43200;
- $time_not_changed = isset( $current->last_checked ) && $timeout > ( time() - $current->last_checked );
-
- $plugin_changed = false;
- foreach ( $plugins as $file => $p ) {
- $new_option->checked[ $file ] = $p['Version'];
- if ( !isset( $current->checked[ $file ] ) || strval($current->checked[ $file ]) !== strval($p['Version']) )
- $plugin_changed = true;
+ // Check for update on a different schedule, depending on the page.
+ switch ( current_filter() ) {
+ case 'load-update-core.php' :
+ $timeout = 60; // 1 min
+ break;
+ case 'load-plugins.php' :
+ case 'load-update.php' :
+ $timeout = 3600; // 1 hour
+ break;
+ default :
+ $timeout = 43200; // 12 hours
}
+
+ $time_not_changed = isset( $current->last_checked ) && $timeout > ( time() - $current->last_checked );
- if ( isset ( $current->response ) && is_array( $current->response ) ) {
- foreach ( $current->response as $plugin_file => $update_details ) {
- if ( ! isset($plugins[ $plugin_file ]) ) {
+ if ( $time_not_changed ) {
+ $plugin_changed = false;
+ foreach ( $plugins as $file => $p ) {
+ $new_option->checked[ $file ] = $p['Version'];
+
+ if ( !isset( $current->checked[ $file ] ) || strval($current->checked[ $file ]) !== strval($p['Version']) )
$plugin_changed = true;
- break;
+ }
+
+ if ( isset ( $current->response ) && is_array( $current->response ) ) {
+ foreach ( $current->response as $plugin_file => $update_details ) {
+ if ( ! isset($plugins[ $plugin_file ]) ) {
+ $plugin_changed = true;
+ break;
+ }
}
}
- }
- // Bail if we've checked in the last 12 hours and if nothing has changed
- if ( $time_not_changed && !$plugin_changed )
- return false;
+ // Bail if we've checked recently and if nothing has changed
+ if ( ! $plugin_changed )
+ return false;
+ }
// Update last_checked for current to prevent multiple blocking requests if request hangs
$current->last_checked = time();
@@ -222,10 +242,6 @@ function wp_update_themes() {
if ( ! is_object($last_update) )
$last_update = new stdClass;
- // Check for updated every 60 minutes if hitting update pages; else, check every 12 hours.
- $timeout = in_array( current_filter(), array( 'load-themes.php', 'load-update.php', 'load-update-core.php' ) ) ? 3600 : 43200;
- $time_not_changed = isset( $last_update->last_checked ) && $timeout > ( time( ) - $last_update->last_checked );
-
$themes = array();
$checked = array();
$exclude_fields = array('Template Files', 'Stylesheet Files', 'Status', 'Theme Root', 'Theme Root URI', 'Template Dir', 'Stylesheet Dir', 'Description', 'Tags', 'Screenshot');
@@ -246,25 +262,43 @@ function wp_update_themes() {
}
}
- $theme_changed = false;
- foreach ( $checked as $slug => $v ) {
- $update_request->checked[ $slug ] = $v;
-
- if ( !isset( $last_update->checked[ $slug ] ) || strval($last_update->checked[ $slug ]) !== strval($v) )
- $theme_changed = true;
+ // Check for update on a different schedule, depending on the page.
+ switch ( current_filter() ) {
+ case 'load-update-core.php' :
+ $timeout = 60; // 1 min
+ break;
+ case 'load-plugins.php' :
+ case 'load-update.php' :
+ $timeout = 3600; // 1 hour
+ break;
+ default :
+ $timeout = 43200; // 12 hours
}
+
+ $time_not_changed = isset( $last_update->last_checked ) && $timeout > ( time( ) - $last_update->last_checked );
+
+ if ( $time_not_changed ) {
+ $theme_changed = false;
+ foreach ( $checked as $slug => $v ) {
+ $update_request->checked[ $slug ] = $v;
- if ( isset ( $last_update->response ) && is_array( $last_update->response ) ) {
- foreach ( $last_update->response as $slug => $update_details ) {
- if ( ! isset($checked[ $slug ]) ) {
+ if ( !isset( $last_update->checked[ $slug ] ) || strval($last_update->checked[ $slug ]) !== strval($v) )
$theme_changed = true;
- break;
+ }
+
+ if ( isset ( $last_update->response ) && is_array( $last_update->response ) ) {
+ foreach ( $last_update->response as $slug => $update_details ) {
+ if ( ! isset($checked[ $slug ]) ) {
+ $theme_changed = true;
+ break;
+ }
}
}
- }
- if ( $time_not_changed && !$theme_changed )
- return false;
+ // Bail if we've checked recently and if nothing has changed
+ if ( ! $theme_changed )
+ return false;
+ }
// Update last_checked for current to prevent multiple blocking requests if request hangs
$last_update->last_checked = time();

0 comments on commit 0f37392

Please sign in to comment.