PageRenderTime 28ms CodeModel.GetById 12ms app.highlight 9ms RepoModel.GetById 1ms app.codeStats 1ms

/wp-admin/update-core.php

https://github.com/webgefrickel/frckl-init-wordpress
PHP | 631 lines | 512 code | 88 blank | 31 comment | 134 complexity | e35ed87b2f6e42590f9f31bf2c33c8eb MD5 | raw file
  1<?php
  2/**
  3 * Update Core administration panel.
  4 *
  5 * @package WordPress
  6 * @subpackage Administration
  7 */
  8
  9/** WordPress Administration Bootstrap */
 10require_once( dirname( __FILE__ ) . '/admin.php' );
 11
 12wp_enqueue_style( 'plugin-install' );
 13wp_enqueue_script( 'plugin-install' );
 14add_thickbox();
 15
 16if ( is_multisite() && ! is_network_admin() ) {
 17	wp_redirect( network_admin_url( 'update-core.php' ) );
 18	exit();
 19}
 20
 21if ( ! current_user_can( 'update_core' ) && ! current_user_can( 'update_themes' ) && ! current_user_can( 'update_plugins' ) )
 22	wp_die( __( 'You do not have sufficient permissions to update this site.' ) );
 23
 24function list_core_update( $update ) {
 25 	global $wp_local_package, $wpdb, $wp_version;
 26  	static $first_pass = true;
 27
 28 	if ( 'en_US' == $update->locale && 'en_US' == get_locale() )
 29 		$version_string = $update->current;
 30 	// If the only available update is a partial builds, it doesn't need a language-specific version string.
 31 	elseif ( 'en_US' == $update->locale && $update->packages->partial && $wp_version == $update->partial_version && ( $updates = get_core_updates() ) && 1 == count( $updates ) )
 32 		$version_string = $update->current;
 33 	else
 34 		$version_string = sprintf( "%s&ndash;<strong>%s</strong>", $update->current, $update->locale );
 35
 36	$current = false;
 37	if ( !isset($update->response) || 'latest' == $update->response )
 38		$current = true;
 39	$submit = __('Update Now');
 40	$form_action = 'update-core.php?action=do-core-upgrade';
 41	$php_version    = phpversion();
 42	$mysql_version  = $wpdb->db_version();
 43	$show_buttons = true;
 44	if ( 'development' == $update->response ) {
 45		$message = __('You are using a development version of WordPress. You can update to the latest nightly build automatically or download the nightly build and install it manually:');
 46		$download = __('Download nightly build');
 47	} else {
 48		if ( $current ) {
 49			$message = sprintf( __( 'If you need to re-install version %s, you can do so here or download the package and re-install manually:' ), $version_string );
 50			$submit = __('Re-install Now');
 51			$form_action = 'update-core.php?action=do-core-reinstall';
 52		} else {
 53			$php_compat     = version_compare( $php_version, $update->php_version, '>=' );
 54			if ( file_exists( WP_CONTENT_DIR . '/db.php' ) && empty( $wpdb->is_mysql ) )
 55				$mysql_compat = true;
 56			else
 57				$mysql_compat = version_compare( $mysql_version, $update->mysql_version, '>=' );
 58
 59			if ( !$mysql_compat && !$php_compat )
 60				$message = sprintf( __('You cannot update because <a href="http://codex.wordpress.org/Version_%1$s">WordPress %1$s</a> requires PHP version %2$s or higher and MySQL version %3$s or higher. You are running PHP version %4$s and MySQL version %5$s.'), $update->current, $update->php_version, $update->mysql_version, $php_version, $mysql_version );
 61			elseif ( !$php_compat )
 62				$message = sprintf( __('You cannot update because <a href="http://codex.wordpress.org/Version_%1$s">WordPress %1$s</a> requires PHP version %2$s or higher. You are running version %3$s.'), $update->current, $update->php_version, $php_version );
 63			elseif ( !$mysql_compat )
 64				$message = sprintf( __('You cannot update because <a href="http://codex.wordpress.org/Version_%1$s">WordPress %1$s</a> requires MySQL version %2$s or higher. You are running version %3$s.'), $update->current, $update->mysql_version, $mysql_version );
 65			else
 66				$message = 	sprintf(__('You can update to <a href="http://codex.wordpress.org/Version_%1$s">WordPress %2$s</a> automatically or download the package and install it manually:'), $update->current, $version_string);
 67			if ( !$mysql_compat || !$php_compat )
 68				$show_buttons = false;
 69		}
 70		$download = sprintf(__('Download %s'), $version_string);
 71	}
 72
 73	echo '<p>';
 74	echo $message;
 75	echo '</p>';
 76	echo '<form method="post" action="' . $form_action . '" name="upgrade" class="upgrade">';
 77	wp_nonce_field('upgrade-core');
 78	echo '<p>';
 79	echo '<input name="version" value="'. esc_attr($update->current) .'" type="hidden"/>';
 80	echo '<input name="locale" value="'. esc_attr($update->locale) .'" type="hidden"/>';
 81	if ( $show_buttons ) {
 82		if ( $first_pass ) {
 83			submit_button( $submit, $current ? 'button' : 'primary regular', 'upgrade', false );
 84			$first_pass = false;
 85		} else {
 86			submit_button( $submit, 'button', 'upgrade', false );
 87		}
 88		echo '&nbsp;<a href="' . esc_url( $update->download ) . '" class="button">' . $download . '</a>&nbsp;';
 89	}
 90	if ( 'en_US' != $update->locale )
 91		if ( !isset( $update->dismissed ) || !$update->dismissed )
 92			submit_button( __('Hide this update'), 'button', 'dismiss', false );
 93		else
 94			submit_button( __('Bring back this update'), 'button', 'undismiss', false );
 95	echo '</p>';
 96	if ( 'en_US' != $update->locale && ( !isset($wp_local_package) || $wp_local_package != $update->locale ) )
 97	    echo '<p class="hint">'.__('This localized version contains both the translation and various other localization fixes. You can skip upgrading if you want to keep your current translation.').'</p>';
 98	// Partial builds don't need language-specific warnings.
 99	elseif ( 'en_US' == $update->locale && get_locale() != 'en_US' && ( ! $update->packages->partial && $wp_version == $update->partial_version ) ) {
100	    echo '<p class="hint">'.sprintf( __('You are about to install WordPress %s <strong>in English (US).</strong> There is a chance this update will break your translation. You may prefer to wait for the localized version to be released.'), $update->response != 'development' ? $update->current : '' ).'</p>';
101	}
102	echo '</form>';
103
104}
105
106function dismissed_updates() {
107	$dismissed = get_core_updates( array( 'dismissed' => true, 'available' => false ) );
108	if ( $dismissed ) {
109
110		$show_text = esc_js(__('Show hidden updates'));
111		$hide_text = esc_js(__('Hide hidden updates'));
112	?>
113	<script type="text/javascript">
114
115		jQuery(function($) {
116			$('dismissed-updates').show();
117			$('#show-dismissed').toggle(function(){$(this).text('<?php echo $hide_text; ?>');}, function() {$(this).text('<?php echo $show_text; ?>')});
118			$('#show-dismissed').click(function() { $('#dismissed-updates').toggle('slow');});
119		});
120	</script>
121	<?php
122		echo '<p class="hide-if-no-js"><a id="show-dismissed" href="#">'.__('Show hidden updates').'</a></p>';
123		echo '<ul id="dismissed-updates" class="core-updates dismissed">';
124		foreach( (array) $dismissed as $update) {
125			echo '<li>';
126			list_core_update( $update );
127			echo '</li>';
128		}
129		echo '</ul>';
130	}
131}
132
133/**
134 * Display upgrade WordPress for downloading latest or upgrading automatically form.
135 *
136 * @since 2.7
137 *
138 * @return null
139 */
140function core_upgrade_preamble() {
141	global $wp_version, $required_php_version, $required_mysql_version;
142
143	$updates = get_core_updates();
144
145	if ( !isset($updates[0]->response) || 'latest' == $updates[0]->response ) {
146		echo '<h3>';
147		_e('You have the latest version of WordPress.');
148
149		if ( wp_http_supports( array( 'ssl' ) ) ) {
150			require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
151			$upgrader = new WP_Automatic_Updater;
152			$future_minor_update = (object) array(
153				'current'       => $wp_version . '.1.next.minor',
154				'version'       => $wp_version . '.1.next.minor',
155				'php_version'   => $required_php_version,
156				'mysql_version' => $required_mysql_version,
157			);
158			$should_auto_update = $upgrader->should_update( 'core', $future_minor_update, ABSPATH );
159			if ( $should_auto_update )
160				echo ' ' . __( 'Future security updates will be applied automatically.' );
161		}
162		echo '</h3>';
163	} else {
164		echo '<div class="updated inline"><p>';
165		_e('<strong>Important:</strong> before updating, please <a href="http://codex.wordpress.org/WordPress_Backups">back up your database and files</a>. For help with updates, visit the <a href="http://codex.wordpress.org/Updating_WordPress">Updating WordPress</a> Codex page.');
166		echo '</p></div>';
167
168		echo '<h3 class="response">';
169		_e( 'An updated version of WordPress is available.' );
170		echo '</h3>';
171	}
172
173	if ( isset( $updates[0] ) && $updates[0]->response == 'development' ) {
174		require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
175		$upgrader = new WP_Automatic_Updater;
176		if ( wp_http_supports( 'ssl' ) && $upgrader->should_update( 'core', $updates[0], ABSPATH ) )
177			echo '<div class="updated inline"><p><strong>BETA TESTERS:</strong> This site is set up to install updates of future beta versions automatically.</p></div>';
178	}
179
180	echo '<ul class="core-updates">';
181	$alternate = true;
182	foreach( (array) $updates as $update ) {
183		echo '<li>';
184		list_core_update( $update );
185		echo '</li>';
186	}
187	echo '</ul>';
188	// Don't show the maintenance mode notice when we are only showing a single re-install option.
189	if ( $updates && ( count( $updates ) > 1 || $updates[0]->response != 'latest' ) ) {
190		echo '<p>' . __( 'While your site is being updated, it will be in maintenance mode. As soon as your updates are complete, your site will return to normal.' ) . '</p>';
191	} elseif ( ! $updates ) {
192		list( $normalized_version ) = explode( '-', $wp_version );
193		echo '<p>' . sprintf( __( '<a href="%s">Learn more about WordPress %s</a>.' ), esc_url( self_admin_url( 'about.php' ) ), $normalized_version ) . '</p>';
194	}
195	dismissed_updates();
196}
197
198function list_plugin_updates() {
199	global $wp_version;
200
201	$cur_wp_version = preg_replace('/-.*$/', '', $wp_version);
202
203	require_once(ABSPATH . 'wp-admin/includes/plugin-install.php');
204	$plugins = get_plugin_updates();
205	if ( empty( $plugins ) ) {
206		echo '<h3>' . __( 'Plugins' ) . '</h3>';
207		echo '<p>' . __( 'Your plugins are all up to date.' ) . '</p>';
208		return;
209	}
210	$form_action = 'update-core.php?action=do-plugin-upgrade';
211
212	$core_updates = get_core_updates();
213	if ( !isset($core_updates[0]->response) || 'latest' == $core_updates[0]->response || 'development' == $core_updates[0]->response || version_compare( $core_updates[0]->current, $cur_wp_version, '=') )
214		$core_update_version = false;
215	else
216		$core_update_version = $core_updates[0]->current;
217	?>
218<h3><?php _e( 'Plugins' ); ?></h3>
219<p><?php _e( 'The following plugins have new versions available. Check the ones you want to update and then click &#8220;Update Plugins&#8221;.' ); ?></p>
220<form method="post" action="<?php echo esc_url( $form_action ); ?>" name="upgrade-plugins" class="upgrade">
221<?php wp_nonce_field('upgrade-core'); ?>
222<p><input id="upgrade-plugins" class="button" type="submit" value="<?php esc_attr_e('Update Plugins'); ?>" name="upgrade" /></p>
223<table class="widefat" cellspacing="0" id="update-plugins-table">
224	<thead>
225	<tr>
226		<th scope="col" class="manage-column check-column"><input type="checkbox" id="plugins-select-all" /></th>
227		<th scope="col" class="manage-column"><label for="plugins-select-all"><?php _e('Select All'); ?></label></th>
228	</tr>
229	</thead>
230
231	<tfoot>
232	<tr>
233		<th scope="col" class="manage-column check-column"><input type="checkbox" id="plugins-select-all-2" /></th>
234		<th scope="col" class="manage-column"><label for="plugins-select-all-2"><?php _e('Select All'); ?></label></th>
235	</tr>
236	</tfoot>
237	<tbody class="plugins">
238<?php
239	foreach ( (array) $plugins as $plugin_file => $plugin_data) {
240		$info = plugins_api('plugin_information', array('slug' => $plugin_data->update->slug ));
241		// Get plugin compat for running version of WordPress.
242		if ( isset($info->tested) && version_compare($info->tested, $cur_wp_version, '>=') ) {
243			$compat = '<br />' . sprintf(__('Compatibility with WordPress %1$s: 100%% (according to its author)'), $cur_wp_version);
244		} elseif ( isset($info->compatibility[$cur_wp_version][$plugin_data->update->new_version]) ) {
245			$compat = $info->compatibility[$cur_wp_version][$plugin_data->update->new_version];
246			$compat = '<br />' . sprintf(__('Compatibility with WordPress %1$s: %2$d%% (%3$d "works" votes out of %4$d total)'), $cur_wp_version, $compat[0], $compat[2], $compat[1]);
247		} else {
248			$compat = '<br />' . sprintf(__('Compatibility with WordPress %1$s: Unknown'), $cur_wp_version);
249		}
250		// Get plugin compat for updated version of WordPress.
251		if ( $core_update_version ) {
252			if ( isset($info->compatibility[$core_update_version][$plugin_data->update->new_version]) ) {
253				$update_compat = $info->compatibility[$core_update_version][$plugin_data->update->new_version];
254				$compat .= '<br />' . sprintf(__('Compatibility with WordPress %1$s: %2$d%% (%3$d "works" votes out of %4$d total)'), $core_update_version, $update_compat[0], $update_compat[2], $update_compat[1]);
255			} else {
256				$compat .= '<br />' . sprintf(__('Compatibility with WordPress %1$s: Unknown'), $core_update_version);
257			}
258		}
259		// Get the upgrade notice for the new plugin version.
260		if ( isset($plugin_data->update->upgrade_notice) ) {
261			$upgrade_notice = '<br />' . strip_tags($plugin_data->update->upgrade_notice);
262		} else {
263			$upgrade_notice = '';
264		}
265
266		$details_url = self_admin_url('plugin-install.php?tab=plugin-information&plugin=' . $plugin_data->update->slug . '&section=changelog&TB_iframe=true&width=640&height=662');
267		$details_text = sprintf(__('View version %1$s details'), $plugin_data->update->new_version);
268		$details = sprintf('<a href="%1$s" class="thickbox" title="%2$s">%3$s</a>.', esc_url($details_url), esc_attr($plugin_data->Name), $details_text);
269
270		echo "
271	<tr class='active'>
272		<th scope='row' class='check-column'><input type='checkbox' name='checked[]' value='" . esc_attr($plugin_file) . "' /></th>
273		<td><p><strong>{$plugin_data->Name}</strong><br />" . sprintf(__('You have version %1$s installed. Update to %2$s.'), $plugin_data->Version, $plugin_data->update->new_version) . ' ' . $details . $compat . $upgrade_notice . "</p></td>
274	</tr>";
275	}
276?>
277	</tbody>
278</table>
279<p><input id="upgrade-plugins-2" class="button" type="submit" value="<?php esc_attr_e('Update Plugins'); ?>" name="upgrade" /></p>
280</form>
281<?php
282}
283
284function list_theme_updates() {
285	$themes = get_theme_updates();
286	if ( empty( $themes ) ) {
287		echo '<h3>' . __( 'Themes' ) . '</h3>';
288		echo '<p>' . __( 'Your themes are all up to date.' ) . '</p>';
289		return;
290	}
291
292	$form_action = 'update-core.php?action=do-theme-upgrade';
293
294?>
295<h3><?php _e( 'Themes' ); ?></h3>
296<p><?php _e( 'The following themes have new versions available. Check the ones you want to update and then click &#8220;Update Themes&#8221;.' ); ?></p>
297<p><?php printf( __( '<strong>Please Note:</strong> Any customizations you have made to theme files will be lost. Please consider using <a href="%s">child themes</a> for modifications.' ), __( 'http://codex.wordpress.org/Child_Themes' ) ); ?></p>
298<form method="post" action="<?php echo esc_url( $form_action ); ?>" name="upgrade-themes" class="upgrade">
299<?php wp_nonce_field('upgrade-core'); ?>
300<p><input id="upgrade-themes" class="button" type="submit" value="<?php esc_attr_e('Update Themes'); ?>" name="upgrade" /></p>
301<table class="widefat" cellspacing="0" id="update-themes-table">
302	<thead>
303	<tr>
304		<th scope="col" class="manage-column check-column"><input type="checkbox" id="themes-select-all" /></th>
305		<th scope="col" class="manage-column"><label for="themes-select-all"><?php _e('Select All'); ?></label></th>
306	</tr>
307	</thead>
308
309	<tfoot>
310	<tr>
311		<th scope="col" class="manage-column check-column"><input type="checkbox" id="themes-select-all-2" /></th>
312		<th scope="col" class="manage-column"><label for="themes-select-all-2"><?php _e('Select All'); ?></label></th>
313	</tr>
314	</tfoot>
315	<tbody class="plugins">
316<?php
317	foreach ( $themes as $stylesheet => $theme ) {
318		echo "
319	<tr class='active'>
320		<th scope='row' class='check-column'><input type='checkbox' name='checked[]' value='" . esc_attr( $stylesheet ) . "' /></th>
321		<td class='plugin-title'><img src='" . esc_url( $theme->get_screenshot() ) . "' width='85' height='64' style='float:left; padding: 0 5px 5px' /><strong>" . $theme->display('Name') . '</strong> ' . sprintf( __( 'You have version %1$s installed. Update to %2$s.' ), $theme->display('Version'), $theme->update['new_version'] ) . "</td>
322	</tr>";
323	}
324?>
325	</tbody>
326</table>
327<p><input id="upgrade-themes-2" class="button" type="submit" value="<?php esc_attr_e('Update Themes'); ?>" name="upgrade" /></p>
328</form>
329<?php
330}
331
332function list_translation_updates() {
333	$updates = wp_get_translation_updates();
334	if ( ! $updates ) {
335		if ( 'en_US' != get_locale() ) {
336			echo '<h3>' . __( 'Translations' ) . '</h3>';
337			echo '<p>' . __( 'Your translations are all up to date.' ) . '</p>';
338		}
339		return;
340	}
341
342	$form_action = 'update-core.php?action=do-translation-upgrade';
343	?>
344	<h3><?php _e( 'Translations' ); ?></h3>
345	<form method="post" action="<?php echo esc_url( $form_action ); ?>" name="upgrade-themes" class="upgrade">
346		<p><?php _e( 'Some of your translations are out of date.' ); ?></p>
347		<?php wp_nonce_field('upgrade-translations'); ?>
348		<p><input class="button" type="submit" value="<?php esc_attr_e( 'Update Translations' ); ?>" name="upgrade" /></p>
349	</form>
350	<?php
351}
352
353/**
354 * Upgrade WordPress core display.
355 *
356 * @since 2.7
357 *
358 * @return null
359 */
360function do_core_upgrade( $reinstall = false ) {
361	global $wp_filesystem;
362
363	include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
364
365	if ( $reinstall )
366		$url = 'update-core.php?action=do-core-reinstall';
367	else
368		$url = 'update-core.php?action=do-core-upgrade';
369	$url = wp_nonce_url($url, 'upgrade-core');
370
371	$version = isset( $_POST['version'] )? $_POST['version'] : false;
372	$locale = isset( $_POST['locale'] )? $_POST['locale'] : 'en_US';
373	$update = find_core_update( $version, $locale );
374	if ( !$update )
375		return;
376
377?>
378	<div class="wrap">
379	<?php screen_icon('tools'); ?>
380	<h2><?php _e('Update WordPress'); ?></h2>
381<?php
382
383	if ( false === ( $credentials = request_filesystem_credentials( $url, '', false, ABSPATH ) ) ) {
384		echo '</div>';
385		return;
386	}
387
388	if ( ! WP_Filesystem( $credentials, ABSPATH ) ) {
389		// Failed to connect, Error and request again
390		request_filesystem_credentials( $url, '', true, ABSPATH );
391		echo '</div>';
392		return;
393	}
394
395	if ( $wp_filesystem->errors->get_error_code() ) {
396		foreach ( $wp_filesystem->errors->get_error_messages() as $message )
397			show_message($message);
398		echo '</div>';
399		return;
400	}
401
402	if ( $reinstall )
403		$update->response = 'reinstall';
404
405	add_filter( 'update_feedback', 'show_message' );
406
407	$upgrader = new Core_Upgrader();
408	$result = $upgrader->upgrade( $update );
409
410	if ( is_wp_error($result) ) {
411		show_message($result);
412		if ('up_to_date' != $result->get_error_code() )
413			show_message( __('Installation Failed') );
414		echo '</div>';
415		return;
416	}
417
418	show_message( __('WordPress updated successfully') );
419	show_message( '<span class="hide-if-no-js">' . sprintf( __( 'Welcome to WordPress %1$s. You will be redirected to the About WordPress screen. If not, click <a href="%2$s">here</a>.' ), $result, esc_url( self_admin_url( 'about.php?updated' ) ) ) . '</span>' );
420	show_message( '<span class="hide-if-js">' . sprintf( __( 'Welcome to WordPress %1$s. <a href="%2$s">Learn more</a>.' ), $result, esc_url( self_admin_url( 'about.php?updated' ) ) ) . '</span>' );
421	?>
422	</div>
423	<script type="text/javascript">
424	window.location = '<?php echo self_admin_url( 'about.php?updated' ); ?>';
425	</script>
426	<?php
427}
428
429function do_dismiss_core_update() {
430	$version = isset( $_POST['version'] )? $_POST['version'] : false;
431	$locale = isset( $_POST['locale'] )? $_POST['locale'] : 'en_US';
432	$update = find_core_update( $version, $locale );
433	if ( !$update )
434		return;
435	dismiss_core_update( $update );
436	wp_redirect( wp_nonce_url('update-core.php?action=upgrade-core', 'upgrade-core') );
437	exit;
438}
439
440function do_undismiss_core_update() {
441	$version = isset( $_POST['version'] )? $_POST['version'] : false;
442	$locale = isset( $_POST['locale'] )? $_POST['locale'] : 'en_US';
443	$update = find_core_update( $version, $locale );
444	if ( !$update )
445		return;
446	undismiss_core_update( $version, $locale );
447	wp_redirect( wp_nonce_url('update-core.php?action=upgrade-core', 'upgrade-core') );
448	exit;
449}
450
451function no_update_actions($actions) {
452	return '';
453}
454
455$action = isset($_GET['action']) ? $_GET['action'] : 'upgrade-core';
456
457$upgrade_error = false;
458if ( ( 'do-theme-upgrade' == $action || ( 'do-plugin-upgrade' == $action && ! isset( $_GET['plugins'] ) ) )
459	&& ! isset( $_POST['checked'] ) ) {
460	$upgrade_error = $action == 'do-theme-upgrade' ? 'themes' : 'plugins';
461	$action = 'upgrade-core';
462}
463
464$title = __('WordPress Updates');
465$parent_file = 'tools.php';
466
467get_current_screen()->add_help_tab( array(
468'id'		=> 'overview',
469'title'		=> __('Overview'),
470'content'	=>
471	'<p>' . __('This screen lets you update to the latest version of WordPress as well as update your themes and plugins from the WordPress.org repository. When updates are available, the number of available updates will appear in a bubble on the left hand menu as a notification.') . '</p>' .
472	'<p>' . __('It is very important to keep your WordPress installation up to date for security reasons, so when you see a number appear, make sure you take the time to update, which is an easy process.') . '</p>'
473) );
474
475get_current_screen()->add_help_tab( array(
476'id'		=> 'how-to-update',
477'title'		=> __('How to Update'),
478'content'	=>
479	'<p>' . __('Updating your WordPress installation is a simple one-click procedure; just click on the Update button when it says a new version is available.') . '</p>' .
480	'<p>' . __('To update themes or plugins from this screen, use the checkboxes to make your selection and click on the appropriate Update button. Check the box at the top of the Themes or Plugins section to select all and update them all at once.') . '</p>'
481) );
482
483get_current_screen()->set_help_sidebar(
484	'<p><strong>' . __('For more information:') . '</strong></p>' .
485	'<p>' . __('<a href="http://codex.wordpress.org/Dashboard_Updates_Screen" target="_blank">Documentation on Updating WordPress</a>') . '</p>' .
486	'<p>' . __('<a href="http://wordpress.org/support/" target="_blank">Support Forums</a>') . '</p>'
487);
488
489if ( 'upgrade-core' == $action ) {
490
491	wp_version_check();
492	require_once(ABSPATH . 'wp-admin/admin-header.php');
493	?>
494	<div class="wrap">
495	<?php screen_icon('tools'); ?>
496	<h2><?php _e('WordPress Updates'); ?></h2>
497	<?php
498	if ( $upgrade_error ) {
499		echo '<div class="error"><p>';
500		if ( $upgrade_error == 'themes' )
501			_e('Please select one or more themes to update.');
502		else
503			_e('Please select one or more plugins to update.');
504		echo '</p></div>';
505	}
506
507	echo '<p>';
508	/* translators: %1 date, %2 time. */
509	printf( __('Last checked on %1$s at %2$s.'), date_i18n( get_option( 'date_format' ) ), date_i18n( get_option( 'time_format' ) ) );
510	echo ' &nbsp; <a class="button" href="' . esc_url( self_admin_url('update-core.php') ) . '">' . __( 'Check Again' ) . '</a>';
511	echo '</p>';
512
513	if ( $core = current_user_can( 'update_core' ) )
514		core_upgrade_preamble();
515	if ( $plugins = current_user_can( 'update_plugins' ) )
516		list_plugin_updates();
517	if ( $themes = current_user_can( 'update_themes' ) )
518		list_theme_updates();
519	if ( $core || $plugins || $themes )
520		list_translation_updates();
521	unset( $core, $plugins, $themes );
522	do_action('core_upgrade_preamble');
523	echo '</div>';
524	include(ABSPATH . 'wp-admin/admin-footer.php');
525
526} elseif ( 'do-core-upgrade' == $action || 'do-core-reinstall' == $action ) {
527
528	if ( ! current_user_can( 'update_core' ) )
529		wp_die( __( 'You do not have sufficient permissions to update this site.' ) );
530
531	check_admin_referer('upgrade-core');
532
533	// do the (un)dismiss actions before headers,
534	// so that they can redirect
535	if ( isset( $_POST['dismiss'] ) )
536		do_dismiss_core_update();
537	elseif ( isset( $_POST['undismiss'] ) )
538		do_undismiss_core_update();
539
540	require_once(ABSPATH . 'wp-admin/admin-header.php');
541	if ( 'do-core-reinstall' == $action )
542		$reinstall = true;
543	else
544		$reinstall = false;
545
546	if ( isset( $_POST['upgrade'] ) )
547		do_core_upgrade($reinstall);
548
549	include(ABSPATH . 'wp-admin/admin-footer.php');
550
551} elseif ( 'do-plugin-upgrade' == $action ) {
552
553	if ( ! current_user_can( 'update_plugins' ) )
554		wp_die( __( 'You do not have sufficient permissions to update this site.' ) );
555
556	check_admin_referer('upgrade-core');
557
558	if ( isset( $_GET['plugins'] ) ) {
559		$plugins = explode( ',', $_GET['plugins'] );
560	} elseif ( isset( $_POST['checked'] ) ) {
561		$plugins = (array) $_POST['checked'];
562	} else {
563		wp_redirect( admin_url('update-core.php') );
564		exit;
565	}
566
567	$url = 'update.php?action=update-selected&plugins=' . urlencode(implode(',', $plugins));
568	$url = wp_nonce_url($url, 'bulk-update-plugins');
569
570	$title = __('Update Plugins');
571
572	require_once(ABSPATH . 'wp-admin/admin-header.php');
573	echo '<div class="wrap">';
574	screen_icon('plugins');
575	echo '<h2>' . esc_html__('Update Plugins') . '</h2>';
576	echo "<iframe src='$url' style='width: 100%; height: 100%; min-height: 750px;' frameborder='0'></iframe>";
577	echo '</div>';
578	include(ABSPATH . 'wp-admin/admin-footer.php');
579
580} elseif ( 'do-theme-upgrade' == $action ) {
581
582	if ( ! current_user_can( 'update_themes' ) )
583		wp_die( __( 'You do not have sufficient permissions to update this site.' ) );
584
585	check_admin_referer('upgrade-core');
586
587	if ( isset( $_GET['themes'] ) ) {
588		$themes = explode( ',', $_GET['themes'] );
589	} elseif ( isset( $_POST['checked'] ) ) {
590		$themes = (array) $_POST['checked'];
591	} else {
592		wp_redirect( admin_url('update-core.php') );
593		exit;
594	}
595
596	$url = 'update.php?action=update-selected-themes&themes=' . urlencode(implode(',', $themes));
597	$url = wp_nonce_url($url, 'bulk-update-themes');
598
599	$title = __('Update Themes');
600
601	require_once(ABSPATH . 'wp-admin/admin-header.php');
602	echo '<div class="wrap">';
603	screen_icon('themes');
604	echo '<h2>' . esc_html__('Update Themes') . '</h2>';
605	echo "<iframe src='$url' style='width: 100%; height: 100%; min-height: 750px;' frameborder='0'></iframe>";
606	echo '</div>';
607	include(ABSPATH . 'wp-admin/admin-footer.php');
608
609} elseif ( 'do-translation-upgrade' == $action ) {
610
611	if ( ! current_user_can( 'update_core' ) && ! current_user_can( 'update_plugins' ) && ! current_user_can( 'update_themes' ) )
612		wp_die( __( 'You do not have sufficient permissions to update this site.' ) );
613
614	check_admin_referer( 'upgrade-translations' );
615
616	require_once( ABSPATH . 'wp-admin/admin-header.php' );
617	include_once( ABSPATH . 'wp-admin/includes/class-wp-upgrader.php' );
618
619	$url = 'update-core.php?action=do-translation-upgrade';
620	$nonce = 'upgrade-translations';
621	$title = __( 'Update Translations' );
622	$context = WP_LANG_DIR;
623
624	$upgrader = new Language_Pack_Upgrader( new Language_Pack_Upgrader_Skin( compact( 'url', 'nonce', 'title', 'context' ) ) );
625	$result = $upgrader->bulk_upgrade();
626
627	require_once( ABSPATH . 'wp-admin/admin-footer.php' );
628
629} else {
630	do_action('update-core-custom_' . $action);
631}