2007-08-17 06:33:52 -04:00
< ? php
2007-10-30 17:40:30 -04:00
/**
* A simple set of functions to check our version 1.0 update service
*
* @ package WordPress
* @ since 2.3
*/
2007-08-17 06:33:52 -04:00
2007-10-30 17:40:30 -04:00
/**
* wp_version_check () - Check WordPress version against the newest version .
*
2008-02-05 01:47:27 -05:00
* The WordPress version , PHP version , and Locale is sent . Checks against the WordPress server at
2008-07-11 18:04:03 -04:00
* api . wordpress . org . Will only check if PHP has fsockopen enabled and WordPress isn ' t installing .
2007-10-30 17:40:30 -04:00
*
* @ package WordPress
* @ since 2.3
* @ uses $wp_version Used to check against the newest WordPress version .
*
* @ return mixed Returns null if update is unsupported . Returns false if check is too soon .
*/
2007-08-17 06:33:52 -04:00
function wp_version_check () {
2008-07-11 18:04:03 -04:00
if ( ! function_exists ( 'fsockopen' ) || defined ( 'WP_INSTALLING' ) )
2007-08-19 00:27:04 -04:00
return ;
2007-08-17 06:33:52 -04:00
global $wp_version ;
$php_version = phpversion ();
2007-09-03 19:19:20 -04:00
2007-08-17 06:33:52 -04:00
$current = get_option ( 'update_core' );
$locale = get_locale ();
2007-09-03 19:32:58 -04:00
if (
isset ( $current -> last_checked ) &&
43200 > ( time () - $current -> last_checked ) &&
2007-08-17 06:33:52 -04:00
$current -> version_checked == $wp_version
)
return false ;
$new_option = '' ;
$new_option -> last_checked = time (); // this gets set whether we get a response or not, so if something is down or misconfigured it won't delay the page load for more than 3 seconds, twice a day
$new_option -> version_checked = $wp_version ;
2008-03-11 12:13:07 -04:00
$http_request = " GET /core/version-check/1.1/?version= $wp_version &php= $php_version &locale= $locale HTTP/1.0 \r \n " ;
2007-08-17 06:33:52 -04:00
$http_request .= " Host: api.wordpress.org \r \n " ;
$http_request .= 'Content-Type: application/x-www-form-urlencoded; charset=' . get_option ( 'blog_charset' ) . " \r \n " ;
$http_request .= 'User-Agent: WordPress/' . $wp_version . '; ' . get_bloginfo ( 'url' ) . " \r \n " ;
$http_request .= " \r \n " ;
$response = '' ;
2007-09-21 20:08:50 -04:00
if ( false !== ( $fs = @ fsockopen ( 'api.wordpress.org' , 80 , $errno , $errstr , 3 ) ) && is_resource ( $fs ) ) {
2007-08-17 06:33:52 -04:00
fwrite ( $fs , $http_request );
while ( ! feof ( $fs ) )
$response .= fgets ( $fs , 1160 ); // One TCP-IP packet
fclose ( $fs );
2007-09-03 19:19:20 -04:00
2007-08-17 06:33:52 -04:00
$response = explode ( " \r \n \r \n " , $response , 2 );
2008-03-11 12:13:07 -04:00
if ( ! preg_match ( '|HTTP/.*? 200|' , $response [ 0 ] ) )
return false ;
2007-08-17 06:33:52 -04:00
$body = trim ( $response [ 1 ] );
$body = str_replace ( array ( " \r \n " , " \r " ), " \n " , $body );
2007-09-03 19:19:20 -04:00
2007-08-17 06:33:52 -04:00
$returns = explode ( " \n " , $body );
2008-03-11 12:13:07 -04:00
$new_option -> response = attribute_escape ( $returns [ 0 ] );
2007-08-17 06:33:52 -04:00
if ( isset ( $returns [ 1 ] ) )
2008-03-11 12:13:07 -04:00
$new_option -> url = clean_url ( $returns [ 1 ] );
if ( isset ( $returns [ 2 ] ) )
$new_option -> current = attribute_escape ( $returns [ 2 ] );
2007-08-17 06:33:52 -04:00
}
update_option ( 'update_core' , $new_option );
}
2008-02-19 21:55:36 -05:00
add_action ( 'init' , 'wp_version_check' );
2007-08-17 06:33:52 -04:00
2008-07-11 18:04:03 -04:00
/**
* wp_update_plugins () - Check plugin versions against the latest versions hosted on WordPress . org .
*
* The WordPress version , PHP version , and Locale is sent along with a list of all plugins installed .
* Checks against the WordPress server at api . wordpress . org .
* Will only check if PHP has fsockopen enabled and WordPress isn ' t installing .
*
* @ package WordPress
* @ since 2.3
* @ uses $wp_version Used to notidy the WordPress version .
*
* @ return mixed Returns null if update is unsupported . Returns false if check is too soon .
*/
function wp_update_plugins () {
global $wp_version ;
if ( ! function_exists ( 'fsockopen' ) || defined ( 'WP_INSTALLING' ) )
return false ;
$current = get_option ( 'update_plugins' );
$time_not_changed = isset ( $current -> last_checked ) && 43200 > ( time () - $current -> last_checked );
// If running blog-side, bail unless we've not checked in the last 12 hours
if ( ! function_exists ( 'get_plugins' ) ) {
if ( $time_not_changed )
return false ;
require_once ( ABSPATH . 'wp-admin/includes/plugin.php' );
}
$plugins = get_plugins ();
$active = get_option ( 'active_plugins' );
$new_option = '' ;
$new_option -> last_checked = time ();
$plugin_changed = false ;
foreach ( $plugins as $file => $p ) {
$new_option -> checked [ $file ] = $p [ 'Version' ];
if ( ! isset ( $current -> checked [ $file ] ) ) {
$plugin_changed = true ;
continue ;
}
if ( strval ( $current -> checked [ $file ]) !== strval ( $p [ 'Version' ]) )
$plugin_changed = true ;
}
2008-07-16 17:53:32 -04:00
foreach ( ( array ) $current -> response as $plugin_file => $update_details ) {
if ( ! isset ( $plugins [ $plugin_file ]) ) {
$plugin_changed = true ;
}
}
2008-07-11 18:04:03 -04:00
// Bail if we've checked in the last 12 hours and if nothing has changed
if ( $time_not_changed && ! $plugin_changed )
return false ;
$to_send -> plugins = $plugins ;
$to_send -> active = $active ;
$send = serialize ( $to_send );
$request = 'plugins=' . urlencode ( $send );
$http_request = " POST /plugins/update-check/1.0/ HTTP/1.0 \r \n " ;
$http_request .= " Host: api.wordpress.org \r \n " ;
$http_request .= " Content-Type: application/x-www-form-urlencoded; charset= " . get_option ( 'blog_charset' ) . " \r \n " ;
$http_request .= " Content-Length: " . strlen ( $request ) . " \r \n " ;
$http_request .= 'User-Agent: WordPress/' . $wp_version . '; ' . get_bloginfo ( 'url' ) . " \r \n " ;
$http_request .= " \r \n " ;
$http_request .= $request ;
$response = '' ;
if ( false != ( $fs = @ fsockopen ( 'api.wordpress.org' , 80 , $errno , $errstr , 3 ) ) && is_resource ( $fs ) ) {
fwrite ( $fs , $http_request );
while ( ! feof ( $fs ) )
$response .= fgets ( $fs , 1160 ); // One TCP-IP packet
fclose ( $fs );
$response = explode ( " \r \n \r \n " , $response , 2 );
}
$response = unserialize ( $response [ 1 ] );
if ( $response )
$new_option -> response = $response ;
update_option ( 'update_plugins' , $new_option );
}
if ( defined ( 'WP_ADMIN' ) && WP_ADMIN )
add_action ( 'admin_init' , 'wp_update_plugins' );
else
add_action ( 'init' , 'wp_update_plugins' );
2008-07-16 17:53:32 -04:00
?>