2007-08-17 12:33:52 +02:00
< ? php
2007-10-30 22:40:30 +01:00
/**
* A simple set of functions to check our version 1.0 update service
*
* @ package WordPress
* @ since 2.3
*/
2007-08-17 12:33:52 +02:00
2007-10-30 22:40:30 +01:00
/**
2008-08-01 07:00:07 +02:00
* Check WordPress version against the newest version . *
* The WordPress version , PHP version , and Locale is sent . Checks against the
* WordPress server at api . wordpress . org server . Will only check if WordPress
* isn ' t installing .
2007-10-30 22:40:30 +01: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 12:33:52 +02:00
function wp_version_check () {
2008-08-01 07:00:07 +02:00
if ( defined ( 'WP_INSTALLING' ) )
2007-08-19 06:27:04 +02:00
return ;
2007-08-17 12:33:52 +02:00
global $wp_version ;
$php_version = phpversion ();
2007-09-04 01:19:20 +02:00
2007-08-17 12:33:52 +02:00
$current = get_option ( 'update_core' );
$locale = get_locale ();
2007-09-04 01:32:58 +02:00
if (
isset ( $current -> last_checked ) &&
43200 > ( time () - $current -> last_checked ) &&
2007-08-17 12:33:52 +02: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-08-01 07:00:07 +02:00
$url = " http://api.wordpress.org/core/version-check/1.1/?version= $wp_version &php= $php_version &locale= $locale " ;
$options = array ( 'timeout' => 3 );
$headers = array (
'Content-Type' => 'application/x-www-form-urlencoded; charset=' . get_option ( 'blog_charset' ),
'User-Agent' => 'WordPress/' . $wp_version . '; ' . get_bloginfo ( 'url' )
);
$response = wp_remote_request ( $url , $options , $headers );
if ( 200 != $response [ 'response' ][ 'code' ] )
return false ;
$body = $response [ 'body' ];
$body = trim ( $response [ 1 ] );
$body = str_replace ( array ( " \r \n " , " \r " ), " \n " , $body );
$returns = explode ( " \n " , $body );
$new_option -> response = attribute_escape ( $returns [ 0 ] );
if ( isset ( $returns [ 1 ] ) )
$new_option -> url = clean_url ( $returns [ 1 ] );
if ( isset ( $returns [ 2 ] ) )
$new_option -> current = attribute_escape ( $returns [ 2 ] );
2007-08-17 12:33:52 +02:00
update_option ( 'update_core' , $new_option );
}
2008-02-20 03:55:36 +01:00
add_action ( 'init' , 'wp_version_check' );
2007-08-17 12:33:52 +02:00
2008-07-12 00:04:03 +02: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 ;
// If running blog-side, bail unless we've not checked in the last 12 hours
2008-08-01 06:26:32 +02:00
if ( ! function_exists ( 'get_plugins' ) )
2008-07-12 00:04:03 +02:00
require_once ( ABSPATH . 'wp-admin/includes/plugin.php' );
$plugins = get_plugins ();
$active = get_option ( 'active_plugins' );
2008-08-01 06:26:32 +02:00
$current = get_option ( 'update_plugins' );
2008-07-12 00:04:03 +02:00
$new_option = '' ;
$new_option -> last_checked = time ();
2008-08-01 06:26:32 +02:00
$time_not_changed = isset ( $current -> last_checked ) && 43200 > ( time () - $current -> last_checked );
2008-07-12 00:04:03 +02:00
$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 23:53:32 +02:00
foreach ( ( array ) $current -> response as $plugin_file => $update_details ) {
if ( ! isset ( $plugins [ $plugin_file ]) ) {
$plugin_changed = true ;
}
}
2008-07-12 00:04:03 +02: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 );
}
2008-08-01 06:26:32 +02:00
function _maybe_update_plugins () {
$current = get_option ( 'update_plugins' );
if ( isset ( $current -> last_checked ) && 43200 > ( time () - $current -> last_checked ) )
return ;
wp_update_plugins ();
}
add_action ( 'load-plugins.php' , 'wp_update_plugins' );
add_action ( 'admin_init' , '_maybe_update_plugins' );
add_action ( 'wp_update_plugins' , 'wp_update_plugins' );
if ( ! wp_next_scheduled ( 'wp_update_plugins' ) )
wp_schedule_event ( time (), 'twicedaily' , 'wp_update_plugins' );
2008-07-12 00:04:03 +02:00
2008-07-16 23:53:32 +02:00
?>