web/wp-admin/includes/update.php
branchwordpress
changeset 109 03b0d1493584
child 132 4d4862461b8d
equal deleted inserted replaced
-1:000000000000 109:03b0d1493584
       
     1 <?php
       
     2 /**
       
     3  * WordPress Administration Update API
       
     4  *
       
     5  * @package WordPress
       
     6  * @subpackage Admin
       
     7  */
       
     8 
       
     9 // The admin side of our 1.1 update system
       
    10 
       
    11 /**
       
    12  * Selects the first update version from the update_core option
       
    13  *
       
    14  * @return object the response from the API
       
    15  */
       
    16 function get_preferred_from_update_core() {
       
    17 	$updates = get_core_updates();
       
    18 	if ( !is_array( $updates ) )
       
    19 		return false;
       
    20 	if ( empty( $updates ) )
       
    21 		return (object)array('response' => 'latest');
       
    22 	return $updates[0];
       
    23 }
       
    24 
       
    25 /**
       
    26  * Get available core updates
       
    27  *
       
    28  * @param array $options Set $options['dismissed'] to true to show dismissed upgrades too,
       
    29  * 	set $options['available'] to false to skip not-dimissed updates.
       
    30  * @return array Array of the update objects
       
    31  */
       
    32 function get_core_updates( $options = array() ) {
       
    33 	$options = array_merge( array('available' => true, 'dismissed' => false ), $options );
       
    34 	$dismissed = get_option( 'dismissed_update_core' );
       
    35 	if ( !is_array( $dismissed ) ) $dismissed = array();
       
    36 	$from_api = get_transient( 'update_core' );
       
    37 	if ( empty($from_api) )
       
    38 		return false;
       
    39 	if ( !isset( $from_api->updates ) || !is_array( $from_api->updates ) ) return false;
       
    40 	$updates = $from_api->updates;
       
    41 	if ( !is_array( $updates ) ) return false;
       
    42 	$result = array();
       
    43 	foreach($updates as $update) {
       
    44 		if ( array_key_exists( $update->current.'|'.$update->locale, $dismissed ) ) {
       
    45 			if ( $options['dismissed'] ) {
       
    46 				$update->dismissed = true;
       
    47 				$result[]= $update;
       
    48 			}
       
    49 		} else {
       
    50 			if ( $options['available'] ) {
       
    51 				$update->dismissed = false;
       
    52 				$result[]= $update;
       
    53 			}
       
    54 		}
       
    55 	}
       
    56 	return $result;
       
    57 }
       
    58 
       
    59 function dismiss_core_update( $update ) {
       
    60 	$dismissed = get_option( 'dismissed_update_core' );
       
    61 	$dismissed[ $update->current.'|'.$update->locale ] = true;
       
    62 	return update_option( 'dismissed_update_core', $dismissed );
       
    63 }
       
    64 
       
    65 function undismiss_core_update( $version, $locale ) {
       
    66 	$dismissed = get_option( 'dismissed_update_core' );
       
    67 	$key = $version.'|'.$locale;
       
    68 	if ( !isset( $dismissed[$key] ) ) return false;
       
    69 	unset( $dismissed[$key] );
       
    70 	return update_option( 'dismissed_update_core', $dismissed );
       
    71 }
       
    72 
       
    73 function find_core_update( $version, $locale ) {
       
    74 	$from_api = get_transient( 'update_core' );
       
    75 	if ( !is_array( $from_api->updates ) ) return false;
       
    76 	$updates = $from_api->updates;
       
    77 	foreach($updates as $update) {
       
    78 		if ( $update->current == $version && $update->locale == $locale )
       
    79 			return $update;
       
    80 	}
       
    81 	return false;
       
    82 }
       
    83 
       
    84 function core_update_footer( $msg = '' ) {
       
    85 	if ( !current_user_can('manage_options') )
       
    86 		return sprintf( __( 'Version %s' ), $GLOBALS['wp_version'] );
       
    87 
       
    88 	$cur = get_preferred_from_update_core();
       
    89 	if ( ! isset( $cur->current ) )
       
    90 		$cur->current = '';
       
    91 
       
    92 	if ( ! isset( $cur->url ) )
       
    93 		$cur->url = '';
       
    94 
       
    95 	if ( ! isset( $cur->response ) )
       
    96 		$cur->response = '';
       
    97 
       
    98 	switch ( $cur->response ) {
       
    99 	case 'development' :
       
   100 		return sprintf( __( 'You are using a development version (%1$s). Cool! Please <a href="%2$s">stay updated</a>.' ), $GLOBALS['wp_version'], 'update-core.php');
       
   101 	break;
       
   102 
       
   103 	case 'upgrade' :
       
   104 		if ( current_user_can('manage_options') ) {
       
   105 			return sprintf( '<strong>'.__( '<a href="%1$s">Get Version %2$s</a>' ).'</strong>', 'update-core.php', $cur->current);
       
   106 			break;
       
   107 		}
       
   108 
       
   109 	case 'latest' :
       
   110 	default :
       
   111 		return sprintf( __( 'Version %s' ), $GLOBALS['wp_version'] );
       
   112 	break;
       
   113 	}
       
   114 }
       
   115 add_filter( 'update_footer', 'core_update_footer' );
       
   116 
       
   117 function update_nag() {
       
   118 	global $pagenow;
       
   119 
       
   120 	if ( 'update-core.php' == $pagenow )
       
   121 		return;
       
   122 
       
   123 	$cur = get_preferred_from_update_core();
       
   124 
       
   125 	if ( ! isset( $cur->response ) || $cur->response != 'upgrade' )
       
   126 		return false;
       
   127 
       
   128 	if ( current_user_can('manage_options') )
       
   129 		$msg = sprintf( __('WordPress %1$s is available! <a href="%2$s">Please update now</a>.'), $cur->current, 'update-core.php' );
       
   130 	else
       
   131 		$msg = sprintf( __('WordPress %1$s is available! Please notify the site administrator.'), $cur->current );
       
   132 
       
   133 	echo "<div id='update-nag'>$msg</div>";
       
   134 }
       
   135 add_action( 'admin_notices', 'update_nag', 3 );
       
   136 
       
   137 // Called directly from dashboard
       
   138 function update_right_now_message() {
       
   139 	$cur = get_preferred_from_update_core();
       
   140 
       
   141 	$msg = sprintf( __('You are using <span class="b">WordPress %s</span>.'), $GLOBALS['wp_version'] );
       
   142 	if ( isset( $cur->response ) && $cur->response == 'upgrade' && current_user_can('manage_options') )
       
   143 		$msg .= " <a href='update-core.php' class='button'>" . sprintf( __('Update to %s'), $cur->current ? $cur->current : __( 'Latest' ) ) . '</a>';
       
   144 
       
   145 	echo "<span id='wp-version-message'>$msg</span>";
       
   146 }
       
   147 
       
   148 function wp_plugin_update_row( $file, $plugin_data ) {
       
   149 	$current = get_transient( 'update_plugins' );
       
   150 	if ( !isset( $current->response[ $file ] ) )
       
   151 		return false;
       
   152 
       
   153 	$r = $current->response[ $file ];
       
   154 
       
   155 	$plugins_allowedtags = array('a' => array('href' => array(),'title' => array()),'abbr' => array('title' => array()),'acronym' => array('title' => array()),'code' => array(),'em' => array(),'strong' => array());
       
   156 	$plugin_name = wp_kses( $plugin_data['Name'], $plugins_allowedtags );
       
   157 
       
   158 	$details_url = admin_url('plugin-install.php?tab=plugin-information&plugin=' . $r->slug . '&TB_iframe=true&width=600&height=800');
       
   159 
       
   160 	echo '<tr class="plugin-update-tr"><td colspan="3" class="plugin-update"><div class="update-message">';
       
   161 	if ( ! current_user_can('update_plugins') )
       
   162 		printf( __('There is a new version of %1$s available. <a href="%2$s" class="thickbox" title="%3$s">View version %4$s Details</a>.'), $plugin_name, esc_url($details_url), esc_attr($plugin_name), $r->new_version );
       
   163 	else if ( empty($r->package) )
       
   164 		printf( __('There is a new version of %1$s available. <a href="%2$s" class="thickbox" title="%3$s">View version %4$s Details</a> <em>automatic upgrade unavailable for this plugin</em>.'), $plugin_name, esc_url($details_url), esc_attr($plugin_name), $r->new_version );
       
   165 	else
       
   166 		printf( __('There is a new version of %1$s available. <a href="%2$s" class="thickbox" title="%3$s">View version %4$s Details</a> or <a href="%5$s">upgrade automatically</a>.'), $plugin_name, esc_url($details_url), esc_attr($plugin_name), $r->new_version, wp_nonce_url('update.php?action=upgrade-plugin&plugin=' . $file, 'upgrade-plugin_' . $file) );
       
   167 
       
   168 	do_action( "in_plugin_update_message-$file", $plugin_data, $r );
       
   169 
       
   170 	echo '</div></td></tr>';
       
   171 }
       
   172 add_action( 'after_plugin_row', 'wp_plugin_update_row', 10, 2 );
       
   173 
       
   174 function wp_update_plugin($plugin, $feedback = '') {
       
   175 
       
   176 	if ( !empty($feedback) )
       
   177 		add_filter('update_feedback', $feedback);
       
   178 
       
   179 	include ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
       
   180 	$upgrader = new Plugin_Upgrader();
       
   181 	return $upgrader->upgrade($plugin);
       
   182 }
       
   183 
       
   184 function wp_update_theme($theme, $feedback = '') {
       
   185 
       
   186 	if ( !empty($feedback) )
       
   187 		add_filter('update_feedback', $feedback);
       
   188 
       
   189 	include ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
       
   190 	$upgrader = new Theme_Upgrader();
       
   191 	return $upgrader->upgrade($theme);
       
   192 }
       
   193 
       
   194 
       
   195 function wp_update_core($current, $feedback = '') {
       
   196 
       
   197 	if ( !empty($feedback) )
       
   198 		add_filter('update_feedback', $feedback);
       
   199 
       
   200 	include ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
       
   201 	$upgrader = new Core_Upgrader();
       
   202 	return $upgrader->upgrade($current);
       
   203 
       
   204 }
       
   205 
       
   206 function maintenance_nag() {
       
   207 	global $upgrading;
       
   208 	if ( ! isset( $upgrading ) )
       
   209 		return false;
       
   210 
       
   211 	if ( current_user_can('manage_options') )
       
   212 		$msg = sprintf( __('An automated WordPress update has failed to complete - <a href="%s">please attempt the update again now</a>.'), 'update-core.php' );
       
   213 	else
       
   214 		$msg = __('An automated WordPress update has failed to complete! Please notify the site administrator.');
       
   215 
       
   216 	echo "<div id='update-nag'>$msg</div>";
       
   217 }
       
   218 add_action( 'admin_notices', 'maintenance_nag' );
       
   219 
       
   220 ?>