From fafe61b247f4f4e8db0a1ec380213ef4f3d8a53d Mon Sep 17 00:00:00 2001 From: ryan Date: Thu, 5 Jan 2012 19:49:47 +0000 Subject: [PATCH] Check for plugin and theme updates more often when visitng update-core.php. Props kurtpayne. fixes #18876 git-svn-id: http://svn.automattic.com/wordpress/trunk@19683 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- wp-includes/update.php | 102 +++++++++++++++++++++++++++-------------- 1 file changed, 68 insertions(+), 34 deletions(-) diff --git a/wp-includes/update.php b/wp-includes/update.php index f832dc2850..8d563e9e51 100644 --- a/wp-includes/update.php +++ b/wp-includes/update.php @@ -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; + + // 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 ); - $plugin_changed = false; - foreach ( $plugins as $file => $p ) { - $new_option->checked[ $file ] = $p['Version']; + 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; - } - - if ( isset ( $current->response ) && is_array( $current->response ) ) { - foreach ( $current->response as $plugin_file => $update_details ) { - if ( ! isset($plugins[ $plugin_file ]) ) { + 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 ( isset ( $last_update->response ) && is_array( $last_update->response ) ) { - foreach ( $last_update->response as $slug => $update_details ) { - if ( ! isset($checked[ $slug ]) ) { + if ( $time_not_changed ) { + $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; - 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();