Bring the language chooser to setup-config.php.

see #28577.


git-svn-id: https://develop.svn.wordpress.org/trunk@29006 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Andrew Nacin
2014-07-05 05:13:05 +00:00
parent f25c1e989b
commit 277ada83d8
3 changed files with 170 additions and 94 deletions

View File

@@ -43,34 +43,6 @@ require_once( ABSPATH . WPINC . '/wp-db.php' );
$step = isset( $_GET['step'] ) ? (int) $_GET['step'] : 0;
/**
* @todo rename, move
*/
function wp_get_available_translations() {
$url = 'http://api.wordpress.org/translations/core/1.0/';
if ( wp_http_supports( array( 'ssl' ) ) ) {
$url = set_url_scheme( $url, 'https' );
}
$options = array(
'timeout' => 3,
'body' => array( 'version' => $GLOBALS['wp_version'] ),
);
$response = wp_remote_post( $url, $options );
$body = wp_remote_retrieve_body( $response );
if ( $body && $body = json_decode( $body, true ) ) {
$languages = array();
// Key the language array with the language code
foreach ( $body['languages'] as $language ) {
$languages[$language['language']] = $language;
}
$body['languages'] = $languages;
return $body;
}
return false;
}
/**
* Display install header.
*
@@ -171,7 +143,7 @@ function display_setup_form( $error = null ) {
</tr>
</table>
<p class="step"><input type="submit" name="Submit" value="<?php esc_attr_e( 'Install WordPress' ); ?>" class="button button-large" /></p>
<input type="hidden" name="language" value="<?php echo isset( $_POST['language'] ) ? esc_attr( $_POST['language'] ) : ''; ?>" />
<input type="hidden" name="language" value="<?php echo isset( $_REQUEST['language'] ) ? esc_attr( $_REQUEST['language'] ) : ''; ?>" />
</form>
<?php
} // end display_setup_form()
@@ -206,60 +178,22 @@ if ( ! is_string( $wpdb->base_prefix ) || '' === $wpdb->base_prefix ) {
switch($step) {
case 0: // Step 0
$body = wp_get_available_translations();
if ( $body ) {
if ( empty( $_GET['language'] ) && ( $body = wp_get_available_translations() ) ) {
display_header( 'language-chooser' );
echo '<form id="setup" method="post" action="install.php?step=1">';
echo "<fieldset>\n";
echo "<legend class='screen-reader-text'>Select a default language</legend>\n";
echo '<input type="radio" checked="checked" class="screen-reader-input" name="language" id="language_default" value="">';
echo '<label for="language_default">English (United States)</label>';
echo "\n";
if ( defined( 'WPLANG' ) && ( '' !== WPLANG ) && ( 'en_US' !== WPLANG ) ) {
if ( isset( $body['languages'][WPLANG] ) ) {
$language = $body['languages'][WPLANG];
echo '<input type="radio" name="language" checked="checked" class="' . esc_attr( $language['language'] ) . ' screen-reader-input" id="language_wplang" value="' . esc_attr( $language['language'] ) . '">';
echo '<label for="language_wplang">' . esc_html( $language['native_name'] ) . "</label>\n";
}
}
foreach ( $body['languages'] as $language ) {
echo '<input type="radio" name="language" class="' . esc_attr( $language['language'] ) . ' screen-reader-input" id="language_'. esc_attr( $language['language'] ) .'" value="' . esc_attr( $language['language'] ) . '">';
echo '<label for="language_' . esc_attr( $language['language'] ) . '">' . esc_html( $language['native_name'] ) . "</label>\n";
}
echo "</fieldset>\n";
echo '<p class="step"><input type="submit" class="button button-primary button-hero" value="&raquo;" /></p>';
echo '<form id="setup" method="post" action="?step=1">';
wp_install_language_form( $body );
echo '</form>';
break;
}
// Deliberately fall through if we can't reach the translations API.
case 1: // Step 1, direct link or from language chooser.
if ( ! empty( $_POST['language'] ) ) {
$body = wp_get_available_translations();
$loading_language = false;
if ( $body ) {
foreach ( $body['languages'] as $language ) {
if ( $language['language'] === $_POST['language'] ) {
$loading_language = $_POST['language'];
break;
}
}
}
if ( ! empty( $loading_language ) ) {
require ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
$skin = new Automatic_Upgrader_Skin;
$upgrader = new Language_Pack_Upgrader( $skin );
$options = array( 'clear_update_cache' => false );
$language['type'] = 'core';
$language = (object) $language;
/**
* @todo failures (such as non-direct FS)
*/
$upgrader->upgrade( $language, array( 'clear_update_cache' => false ) );
load_textdomain( 'default', WP_LANG_DIR . "/{$loading_language}.mo" );
load_textdomain( 'default', WP_LANG_DIR . "/admin-{$loading_language}.mo" );
if ( ! empty( $_REQUEST['language'] ) ) {
$loaded_language = wp_install_download_language_pack( $_REQUEST['language'] );
if ( $loaded_language ) {
wp_install_load_language( $loaded_language );
}
}
@@ -275,15 +209,7 @@ switch($step) {
display_setup_form();
break;
case 2:
$loading_language = '';
if ( ! empty( $_POST['language'] ) ) {
$available_languages = get_available_languages();
if ( in_array( $_POST['language'], $available_languages ) ) {
$loading_language = $_POST['language'];
load_textdomain( 'default', WP_LANG_DIR . "/{$loading_language}.mo" );
load_textdomain( 'default', WP_LANG_DIR . "/admin-{$loading_language}.mo" );
}
}
$loaded_language = wp_install_load_language( $_REQUEST['language'] );
if ( ! empty( $wpdb->error ) )
wp_die( $wpdb->error->get_error_message() );
@@ -321,7 +247,7 @@ switch($step) {
if ( $error === false ) {
$wpdb->show_errors();
$result = wp_install( $weblog_title, $user_name, $admin_email, $public, '', wp_slash( $admin_password ), $loading_language );
$result = wp_install( $weblog_title, $user_name, $admin_email, $public, '', wp_slash( $admin_password ), $loaded_language );
?>
<h1><?php _e( 'Success!' ); ?></h1>