Add missing doc blocks to update.php:

* `wp_version_check()`, `wp_update_plugins()`, and `wp_update_themes()` do not return meaningful responses, and their responses are never handled by core. As such, they shouldn't alternately return `void` or `false`. "Returning" in those functions is just "bailing"
* In the same functions, `version.php` doesn't need to load if `WP_INSTALLING` is defined - the function will immediately bail, the values will never be read, and the globals won't be reset. I have unified the approach in all 3 functions.
* When returning filtered `$locale`, there is no need to set the variable twice.
* In `_maybe_update_core()`, `isset()` can take multiple values to bail before the call to `time()`, if necessary. This is a micro-optimization to prevent PHP from hitting the OS unnecessarily.

See #32444.


git-svn-id: https://develop.svn.wordpress.org/trunk@32635 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Scott Taylor 2015-05-28 15:28:10 +00:00
parent c12e7d763c
commit 5b85526344

View File

@ -14,18 +14,21 @@
* isn't installing. * isn't installing.
* *
* @since 2.3.0 * @since 2.3.0
* @uses $wp_version Used to check against the newest WordPress version. * @global string $wp_version Used to check against the newest WordPress version.
* @global wpdb $wpdb
* @global string $wp_local_package
* *
* @param array $extra_stats Extra statistics to report to the WordPress.org API. * @param array $extra_stats Extra statistics to report to the WordPress.org API.
* @param bool $force_check Whether to bypass the transient cache and force a fresh update check. Defaults to false, true if $extra_stats is set. * @param bool $force_check Whether to bypass the transient cache and force a fresh update check. Defaults to false, true if $extra_stats is set.
* @return null|false Returns null if update is unsupported. Returns false if check is too soon.
*/ */
function wp_version_check( $extra_stats = array(), $force_check = false ) { function wp_version_check( $extra_stats = array(), $force_check = false ) {
if ( defined('WP_INSTALLING') ) if ( defined( 'WP_INSTALLING' ) ) {
return; return;
}
global $wpdb, $wp_local_package; global $wp_version, $wpdb, $wp_local_package;
include( ABSPATH . WPINC . '/version.php' ); // include an unmodified $wp_version // include an unmodified $wp_version
include( ABSPATH . WPINC . '/version.php' );
$php_version = phpversion(); $php_version = phpversion();
$current = get_site_transient( 'update_core' ); $current = get_site_transient( 'update_core' );
@ -47,10 +50,10 @@ function wp_version_check( $extra_stats = array(), $force_check = false ) {
// Wait 60 seconds between multiple version check requests // Wait 60 seconds between multiple version check requests
$timeout = 60; $timeout = 60;
$time_not_changed = isset( $current->last_checked ) && $timeout > ( time() - $current->last_checked ); $time_not_changed = isset( $current->last_checked ) && $timeout > ( time() - $current->last_checked );
if ( ! $force_check && $time_not_changed ) if ( ! $force_check && $time_not_changed ) {
return false; return;
}
$locale = get_locale();
/** /**
* Filter the locale requested for WordPress core translations. * Filter the locale requested for WordPress core translations.
* *
@ -58,7 +61,7 @@ function wp_version_check( $extra_stats = array(), $force_check = false ) {
* *
* @param string $locale Current locale. * @param string $locale Current locale.
*/ */
$locale = apply_filters( 'core_version_check_locale', $locale ); $locale = apply_filters( 'core_version_check_locale', get_locale() );
// Update last_checked for current to prevent multiple blocking requests if request hangs // Update last_checked for current to prevent multiple blocking requests if request hangs
$current->last_checked = time(); $current->last_checked = time();
@ -120,14 +123,16 @@ function wp_version_check( $extra_stats = array(), $force_check = false ) {
$response = wp_remote_post( $http_url, $options ); $response = wp_remote_post( $http_url, $options );
} }
if ( is_wp_error( $response ) || 200 != wp_remote_retrieve_response_code( $response ) ) if ( is_wp_error( $response ) || 200 != wp_remote_retrieve_response_code( $response ) ) {
return false; return;
}
$body = trim( wp_remote_retrieve_body( $response ) ); $body = trim( wp_remote_retrieve_body( $response ) );
$body = json_decode( $body, true ); $body = json_decode( $body, true );
if ( ! is_array( $body ) || ! isset( $body['offers'] ) ) if ( ! is_array( $body ) || ! isset( $body['offers'] ) ) {
return false; return;
}
$offers = $body['offers']; $offers = $body['offers'];
@ -177,16 +182,18 @@ function wp_version_check( $extra_stats = array(), $force_check = false ) {
* api.wordpress.org. Will only check if WordPress isn't installing. * api.wordpress.org. Will only check if WordPress isn't installing.
* *
* @since 2.3.0 * @since 2.3.0
* @uses $wp_version Used to notify the WordPress version. * @global string $wp_version Used to notify the WordPress version.
* *
* @param array $extra_stats Extra statistics to report to the WordPress.org API. * @param array $extra_stats Extra statistics to report to the WordPress.org API.
* @return false|null Returns null if update is unsupported. Returns false if check is too soon.
*/ */
function wp_update_plugins( $extra_stats = array() ) { function wp_update_plugins( $extra_stats = array() ) {
include( ABSPATH . WPINC . '/version.php' ); // include an unmodified $wp_version if ( defined( 'WP_INSTALLING' ) ) {
return;
}
if ( defined('WP_INSTALLING') ) global $wp_version;
return false; // include an unmodified $wp_version
include( ABSPATH . WPINC . '/version.php' );
// If running blog-side, bail unless we've not checked in the last 12 hours // If running blog-side, bail unless we've not checked in the last 12 hours
if ( !function_exists( 'get_plugins' ) ) if ( !function_exists( 'get_plugins' ) )
@ -244,8 +251,9 @@ function wp_update_plugins( $extra_stats = array() ) {
} }
// Bail if we've checked recently and if nothing has changed // Bail if we've checked recently and if nothing has changed
if ( ! $plugin_changed ) if ( ! $plugin_changed ) {
return false; return;
}
} }
// Update last_checked for current to prevent multiple blocking requests if request hangs // Update last_checked for current to prevent multiple blocking requests if request hangs
@ -254,7 +262,6 @@ function wp_update_plugins( $extra_stats = array() ) {
$to_send = compact( 'plugins', 'active' ); $to_send = compact( 'plugins', 'active' );
$locales = array( get_locale() );
/** /**
* Filter the locales requested for plugin translations. * Filter the locales requested for plugin translations.
* *
@ -262,7 +269,7 @@ function wp_update_plugins( $extra_stats = array() ) {
* *
* @param array $locales Plugin locale. Default is current locale of the site. * @param array $locales Plugin locale. Default is current locale of the site.
*/ */
$locales = apply_filters( 'plugins_update_check_locales', $locales ); $locales = apply_filters( 'plugins_update_check_locales', array( get_locale() ) );
if ( defined( 'DOING_CRON' ) && DOING_CRON ) { if ( defined( 'DOING_CRON' ) && DOING_CRON ) {
$timeout = 30; $timeout = 30;
@ -296,8 +303,9 @@ function wp_update_plugins( $extra_stats = array() ) {
$raw_response = wp_remote_post( $http_url, $options ); $raw_response = wp_remote_post( $http_url, $options );
} }
if ( is_wp_error( $raw_response ) || 200 != wp_remote_retrieve_response_code( $raw_response ) ) if ( is_wp_error( $raw_response ) || 200 != wp_remote_retrieve_response_code( $raw_response ) ) {
return false; return;
}
$response = json_decode( wp_remote_retrieve_body( $raw_response ), true ); $response = json_decode( wp_remote_retrieve_body( $raw_response ), true );
foreach ( $response['plugins'] as &$plugin ) { foreach ( $response['plugins'] as &$plugin ) {
@ -334,13 +342,14 @@ function wp_update_plugins( $extra_stats = array() ) {
* @uses $wp_version Used to notify the WordPress version. * @uses $wp_version Used to notify the WordPress version.
* *
* @param array $extra_stats Extra statistics to report to the WordPress.org API. * @param array $extra_stats Extra statistics to report to the WordPress.org API.
* @return false|null Returns null if update is unsupported. Returns false if check is too soon.
*/ */
function wp_update_themes( $extra_stats = array() ) { function wp_update_themes( $extra_stats = array() ) {
include( ABSPATH . WPINC . '/version.php' ); // include an unmodified $wp_version if ( defined( 'WP_INSTALLING' ) ) {
return;
if ( defined( 'WP_INSTALLING' ) ) }
return false; global $wp_version;
// include an unmodified $wp_version
include( ABSPATH . WPINC . '/version.php' );
$installed_themes = wp_get_themes(); $installed_themes = wp_get_themes();
$translations = wp_get_installed_translations( 'themes' ); $translations = wp_get_installed_translations( 'themes' );
@ -407,8 +416,9 @@ function wp_update_themes( $extra_stats = array() ) {
} }
// Bail if we've checked recently and if nothing has changed // Bail if we've checked recently and if nothing has changed
if ( ! $theme_changed ) if ( ! $theme_changed ) {
return false; return;
}
} }
// Update last_checked for current to prevent multiple blocking requests if request hangs // Update last_checked for current to prevent multiple blocking requests if request hangs
@ -417,7 +427,6 @@ function wp_update_themes( $extra_stats = array() ) {
$request['themes'] = $themes; $request['themes'] = $themes;
$locales = array( get_locale() );
/** /**
* Filter the locales requested for theme translations. * Filter the locales requested for theme translations.
* *
@ -425,7 +434,7 @@ function wp_update_themes( $extra_stats = array() ) {
* *
* @param array $locales Theme locale. Default is current locale of the site. * @param array $locales Theme locale. Default is current locale of the site.
*/ */
$locales = apply_filters( 'themes_update_check_locales', $locales ); $locales = apply_filters( 'themes_update_check_locales', array( get_locale() ) );
if ( defined( 'DOING_CRON' ) && DOING_CRON ) { if ( defined( 'DOING_CRON' ) && DOING_CRON ) {
$timeout = 30; $timeout = 30;
@ -458,8 +467,9 @@ function wp_update_themes( $extra_stats = array() ) {
$raw_response = wp_remote_post( $http_url, $options ); $raw_response = wp_remote_post( $http_url, $options );
} }
if ( is_wp_error( $raw_response ) || 200 != wp_remote_retrieve_response_code( $raw_response ) ) if ( is_wp_error( $raw_response ) || 200 != wp_remote_retrieve_response_code( $raw_response ) ) {
return false; return;
}
$new_update = new stdClass; $new_update = new stdClass;
$new_update->last_checked = time(); $new_update->last_checked = time();
@ -492,12 +502,13 @@ function wp_maybe_auto_update() {
* Retrieves a list of all language updates available. * Retrieves a list of all language updates available.
* *
* @since 3.7.0 * @since 3.7.0
*
* @return array
*/ */
function wp_get_translation_updates() { function wp_get_translation_updates() {
$updates = array(); $updates = array();
$transients = array( 'update_core' => 'core', 'update_plugins' => 'plugin', 'update_themes' => 'theme' ); $transients = array( 'update_core' => 'core', 'update_plugins' => 'plugin', 'update_themes' => 'theme' );
foreach ( $transients as $transient => $type ) { foreach ( $transients as $transient => $type ) {
$transient = get_site_transient( $transient ); $transient = get_site_transient( $transient );
if ( empty( $transient->translations ) ) if ( empty( $transient->translations ) )
continue; continue;
@ -506,7 +517,6 @@ function wp_get_translation_updates() {
$updates[] = (object) $translation; $updates[] = (object) $translation;
} }
} }
return $updates; return $updates;
} }
@ -571,17 +581,20 @@ function wp_get_update_data() {
return apply_filters( 'wp_get_update_data', $update_data, $titles ); return apply_filters( 'wp_get_update_data', $update_data, $titles );
} }
/**
* @global string $wp_version
*/
function _maybe_update_core() { function _maybe_update_core() {
global $wp_version;
include( ABSPATH . WPINC . '/version.php' ); // include an unmodified $wp_version include( ABSPATH . WPINC . '/version.php' ); // include an unmodified $wp_version
$current = get_site_transient( 'update_core' ); $current = get_site_transient( 'update_core' );
if ( isset( $current->last_checked ) && if ( isset( $current->last_checked, $current->version_checked ) &&
12 * HOUR_IN_SECONDS > ( time() - $current->last_checked ) && 12 * HOUR_IN_SECONDS > ( time() - $current->last_checked ) &&
isset( $current->version_checked ) && $current->version_checked == $wp_version ) {
$current->version_checked == $wp_version )
return; return;
}
wp_version_check(); wp_version_check();
} }
/** /**
@ -614,7 +627,6 @@ function _maybe_update_themes() {
$current = get_site_transient( 'update_themes' ); $current = get_site_transient( 'update_themes' );
if ( isset( $current->last_checked ) && 12 * HOUR_IN_SECONDS > ( time() - $current->last_checked ) ) if ( isset( $current->last_checked ) && 12 * HOUR_IN_SECONDS > ( time() - $current->last_checked ) )
return; return;
wp_update_themes(); wp_update_themes();
} }