2003-05-23 07:07:05 -04:00
< ? php
2008-08-14 02:30:38 -04:00
/**
* WordPress Installer
*
* @ package WordPress
* @ subpackage Administration
*/
2010-02-26 01:31:40 -05:00
// Sanity check.
if ( false ) {
?>
2011-07-21 20:25:41 -04:00
<! DOCTYPE html >
2012-02-08 01:05:35 -05:00
< html xmlns = " http://www.w3.org/1999/xhtml " >
2010-03-11 15:45:24 -05:00
< head >
< meta http - equiv = " Content-Type " content = " text/html; charset=utf-8 " />
< title > Error : PHP is not running </ title >
</ head >
2012-11-30 08:40:59 -05:00
< body class = " wp-core-ui " >
2014-03-07 23:14:15 -05:00
< h1 id = " logo " >< a href = " https://wordpress.org/ " > WordPress </ a ></ h1 >
2010-03-11 15:45:24 -05:00
< h2 > Error : PHP is not running </ h2 >
< p > WordPress requires that your web server is running PHP . Your server does not have PHP installed , or PHP is turned off .</ p >
</ body >
</ html >
2010-02-26 01:31:40 -05:00
< ? php
}
2008-08-14 02:30:38 -04:00
/**
* We are installing WordPress .
*
2010-02-13 15:40:42 -05:00
* @ since 1.5 . 1
2008-08-14 02:30:38 -04:00
* @ var bool
*/
2010-02-13 15:40:42 -05:00
define ( 'WP_INSTALLING' , true );
2004-07-23 04:45:55 -04:00
2008-08-14 02:30:38 -04:00
/** Load WordPress Bootstrap */
2010-02-13 15:40:42 -05:00
require_once ( dirname ( dirname ( __FILE__ ) ) . '/wp-load.php' );
2008-08-14 02:30:38 -04:00
/** Load WordPress Administration Upgrade API */
2013-09-24 20:18:11 -04:00
require_once ( ABSPATH . 'wp-admin/includes/upgrade.php' );
2003-05-23 07:07:05 -04:00
2010-02-13 22:07:47 -05:00
/** Load wpdb */
2014-06-29 18:21:15 -04:00
require_once ( ABSPATH . WPINC . '/wp-db.php' );
2010-02-13 22:07:47 -05:00
2012-04-27 14:57:08 -04:00
$step = isset ( $_GET [ 'step' ] ) ? ( int ) $_GET [ 'step' ] : 0 ;
2008-08-14 02:30:38 -04:00
2014-06-18 15:58:15 -04:00
/**
* @ 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 ) ) {
return $body ;
}
return false ;
}
2008-08-14 02:30:38 -04:00
/**
* Display install header .
*
2010-02-13 15:40:42 -05:00
* @ since 2.5 . 0
2008-08-14 02:30:38 -04:00
*/
2014-06-19 00:47:14 -04:00
function display_header ( $body_classes = '' ) {
2010-02-13 15:40:42 -05:00
header ( 'Content-Type: text/html; charset=utf-8' );
2014-06-19 00:47:14 -04:00
if ( is_rtl () ) {
$body_classes .= 'rtl' ;
}
if ( $body_classes ) {
$body_classes = ' ' . $body_classes ;
}
2003-05-23 07:07:05 -04:00
?>
2011-07-21 20:25:41 -04:00
<! DOCTYPE html >
2006-09-28 13:35:59 -04:00
< html xmlns = " http://www.w3.org/1999/xhtml " < ? php language_attributes (); ?> >
2004-06-11 12:09:18 -04:00
< head >
2013-11-20 19:21:11 -05:00
< meta name = " viewport " content = " width=device-width " />
2004-07-23 04:45:55 -04:00
< meta http - equiv = " Content-Type " content = " text/html; charset=utf-8 " />
2010-02-13 15:40:42 -05:00
< title >< ? php _e ( 'WordPress › Installation' ); ?> </title>
2012-11-17 10:11:29 -05:00
< ? php
2012-10-26 15:40:39 -04:00
wp_admin_css ( 'install' , true );
?>
2003-05-23 07:07:05 -04:00
</ head >
2014-06-19 00:47:14 -04:00
< body class = " wp-core-ui<?php echo $body_classes ?> " >
2014-06-29 10:10:15 -04:00
< h1 id = " logo " >< a href = " <?php echo esc_url( __( 'https://wordpress.org/' ) ); ?> " tabindex = " -1 " >< ? php _e ( 'WordPress' ); ?> </a></h1>
2007-12-19 21:10:09 -05:00
2003-05-23 07:07:05 -04:00
< ? php
2010-02-13 15:40:42 -05:00
} // end display_header()
2007-12-19 21:10:09 -05:00
2010-02-13 15:40:42 -05:00
/**
* Display installer setup form .
*
* @ since 2.8 . 0
*/
2009-02-15 07:58:10 -05:00
function display_setup_form ( $error = null ) {
2010-02-13 22:07:47 -05:00
global $wpdb ;
2014-06-09 20:44:15 -04:00
$sql = $wpdb -> prepare ( " SHOW TABLES LIKE %s " , $wpdb -> esc_like ( $wpdb -> users ) );
$user_table = ( $wpdb -> get_var ( $sql ) != null );
2010-02-13 22:07:47 -05:00
2014-06-19 00:37:15 -04:00
// Ensure that Blogs appear in search engines by default.
2009-08-16 05:01:39 -04:00
$blog_public = 1 ;
2014-06-19 00:37:15 -04:00
if ( isset ( $_POST [ 'weblog_title' ] ) ) {
2010-02-13 15:40:42 -05:00
$blog_public = isset ( $_POST [ 'blog_public' ] );
2014-06-19 00:37:15 -04:00
}
2009-09-14 10:03:32 -04:00
2013-03-01 12:14:09 -05:00
$weblog_title = isset ( $_POST [ 'weblog_title' ] ) ? trim ( wp_unslash ( $_POST [ 'weblog_title' ] ) ) : '' ;
2013-08-06 15:04:32 -04:00
$user_name = isset ( $_POST [ 'user_name' ]) ? trim ( wp_unslash ( $_POST [ 'user_name' ] ) ) : '' ;
2013-03-01 12:14:09 -05:00
$admin_email = isset ( $_POST [ 'admin_email' ] ) ? trim ( wp_unslash ( $_POST [ 'admin_email' ] ) ) : '' ;
2010-02-13 22:07:47 -05:00
2009-02-15 07:58:10 -05:00
if ( ! is_null ( $error ) ) {
2003-05-23 07:07:05 -04:00
?>
2013-09-25 12:14:09 -04:00
< p class = " message " >< ? php echo $error ; ?> </p>
2009-02-15 07:58:10 -05:00
< ? php } ?>
2005-01-24 02:44:38 -05:00
< form id = " setup " method = " post " action = " install.php?step=2 " >
2011-10-05 19:42:11 -04:00
< table class = " form-table " >
< tr >
< th scope = " row " >< label for = " weblog_title " >< ? php _e ( 'Site Title' ); ?> </label></th>
< td >< input name = " weblog_title " type = " text " id = " weblog_title " size = " 25 " value = " <?php echo esc_attr( $weblog_title ); ?> " /></ td >
</ tr >
< tr >
2013-06-30 07:18:35 -04:00
< th scope = " row " >< label for = " user_login " >< ? php _e ( 'Username' ); ?> </label></th>
2011-10-05 19:42:11 -04:00
< td >
2010-02-13 22:07:47 -05:00
< ? php
if ( $user_table ) {
_e ( 'User(s) already exists.' );
2014-03-28 15:00:15 -04:00
echo '<input name="user_name" type="hidden" value="admin" />' ;
2010-02-13 22:07:47 -05:00
} else {
2010-04-27 22:17:19 -04:00
?> <input name="user_name" type="text" id="user_login" size="25" value="<?php echo esc_attr( sanitize_user( $user_name, true ) ); ?>" />
< p >< ? php _e ( 'Usernames can have only alphanumeric characters, spaces, underscores, hyphens, periods and the @ symbol.' ); ?> </p>
< ? php
2010-02-13 22:07:47 -05:00
} ?>
2011-10-05 19:42:11 -04:00
</ td >
</ tr >
2010-02-13 22:07:47 -05:00
< ? php if ( ! $user_table ) : ?>
2011-10-05 19:42:11 -04:00
< tr >
< th scope = " row " >
2014-06-17 10:37:16 -04:00
< label for = " pass1 " >< ? php _e ( 'Password, twice' ); ?> </label>
2010-03-13 21:30:50 -05:00
< p >< ? php _e ( 'A password will be automatically generated for you if you leave this blank.' ); ?> </p>
2011-10-05 19:42:11 -04:00
</ th >
< td >
2010-03-13 21:30:50 -05:00
< input name = " admin_password " type = " password " id = " pass1 " size = " 25 " value = " " />
2010-03-05 07:25:30 -05:00
< p >< input name = " admin_password2 " type = " password " id = " pass2 " size = " 25 " value = " " /></ p >
< div id = " pass-strength-result " >< ? php _e ( 'Strength indicator' ); ?> </div>
2014-02-24 18:31:15 -05:00
< p >< ? php _e ( 'Hint: The password should be at least seven characters long. To make it stronger, use upper and lower case letters, numbers, and symbols like ! " ? $ % ^ & ).' ); ?> </p>
2011-10-05 19:42:11 -04:00
</ td >
</ tr >
2010-02-13 22:07:47 -05:00
< ? php endif ; ?>
2011-10-05 19:42:11 -04:00
< tr >
< th scope = " row " >< label for = " admin_email " >< ? php _e ( 'Your E-mail' ); ?> </label></th>
< td >< input name = " admin_email " type = " text " id = " admin_email " size = " 25 " value = " <?php echo esc_attr( $admin_email ); ?> " />
< p >< ? php _e ( 'Double-check your email address before continuing.' ); ?> </p></td>
</ tr >
< tr >
2011-11-15 10:47:07 -05:00
< th scope = " row " >< label for = " blog_public " >< ? php _e ( 'Privacy' ); ?> </label></th>
2014-06-17 10:37:16 -04:00
< td colspan = " 2 " >< label >< input type = " checkbox " name = " blog_public " id = " blog_public " value = " 1 " < ? php checked ( $blog_public ); ?> /> <?php _e( 'Allow search engines to index this site.' ); ?></label></td>
2011-10-05 19:42:11 -04:00
</ tr >
</ table >
2012-10-26 15:40:39 -04:00
< p class = " step " >< input type = " submit " name = " Submit " value = " <?php esc_attr_e( 'Install WordPress' ); ?> " class = " button button-large " /></ p >
2014-06-18 15:58:15 -04:00
< input type = " hidden " name = " language " value = " <?php echo isset( $_POST['language'] ) ? esc_attr( $_POST['language'] ) : ''; ?> " />
2004-07-23 04:45:55 -04:00
</ form >
2009-02-15 07:58:10 -05:00
< ? php
2010-02-13 15:40:42 -05:00
} // end display_setup_form()
2009-02-15 07:58:10 -05:00
// Let's check to make sure WP isn't already installed.
2010-02-13 15:40:42 -05:00
if ( is_blog_installed () ) {
display_header ();
2012-10-26 15:40:39 -04:00
die ( '<h1>' . __ ( 'Already Installed' ) . '</h1><p>' . __ ( 'You appear to have already installed WordPress. To reinstall please clear your old database tables first.' ) . '</p><p class="step"><a href="../wp-login.php" class="button button-large">' . __ ( 'Log In' ) . '</a></p></body></html>' );
2010-02-13 15:40:42 -05:00
}
2009-02-15 07:58:10 -05:00
2009-12-29 17:07:35 -05:00
$php_version = phpversion ();
$mysql_version = $wpdb -> db_version ();
$php_compat = version_compare ( $php_version , $required_php_version , '>=' );
$mysql_compat = version_compare ( $mysql_version , $required_mysql_version , '>=' ) || file_exists ( WP_CONTENT_DIR . '/db.php' );
if ( ! $mysql_compat && ! $php_compat )
2012-05-02 16:37:18 -04:00
$compat = sprintf ( __ ( 'You cannot install 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.' ), $wp_version , $required_php_version , $required_mysql_version , $php_version , $mysql_version );
2009-12-29 17:07:35 -05:00
elseif ( ! $php_compat )
2012-05-02 16:37:18 -04:00
$compat = sprintf ( __ ( 'You cannot install 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.' ), $wp_version , $required_php_version , $php_version );
2009-12-29 17:07:35 -05:00
elseif ( ! $mysql_compat )
2012-05-02 16:37:18 -04:00
$compat = sprintf ( __ ( 'You cannot install 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.' ), $wp_version , $required_mysql_version , $mysql_version );
2009-12-29 17:07:35 -05:00
if ( ! $mysql_compat || ! $php_compat ) {
display_header ();
2012-05-02 16:37:18 -04:00
die ( '<h1>' . __ ( 'Insufficient Requirements' ) . '</h1><p>' . $compat . '</p></body></html>' );
}
2012-05-02 16:38:58 -04:00
if ( ! is_string ( $wpdb -> base_prefix ) || '' === $wpdb -> base_prefix ) {
2012-05-03 12:41:59 -04:00
display_header ();
2012-05-02 16:37:18 -04:00
die ( '<h1>' . __ ( 'Configuration Error' ) . '</h1><p>' . __ ( 'Your <code>wp-config.php</code> file has an empty database table prefix, which is not supported.' ) . '</p></body></html>' );
2009-12-29 17:07:35 -05:00
}
2009-02-15 07:58:10 -05:00
switch ( $step ) {
2014-06-18 15:58:15 -04:00
case 0 : // Step 0
2014-07-03 18:31:16 -04:00
$body = wp_get_available_translations ();
if ( $body ) {
2014-06-19 00:47:14 -04:00
display_header ( 'language-chooser' );
2014-06-18 15:58:15 -04:00
echo '<form id="setup" method="post" action="install.php?step=1">' ;
2014-07-03 18:53:16 -04:00
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 " ;
2014-06-18 15:58:15 -04:00
foreach ( $body [ 'languages' ] as $language ) {
2014-07-03 18:53:16 -04:00
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 " ;
2014-06-18 15:58:15 -04:00
}
2014-07-03 18:53:16 -04:00
echo " </fieldset> \n " ;
2014-06-18 15:58:15 -04:00
echo '<p class="step"><input type="submit" class="button button-primary button-hero" value="»" /></p>' ;
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 ();
2014-07-03 18:31:16 -04:00
$loading_language = false ;
if ( $body ) {
foreach ( $body [ 'languages' ] as $language ) {
if ( $language [ 'language' ] === $_POST [ 'language' ] ) {
$loading_language = $_POST [ 'language' ];
break ;
}
2014-06-18 15:58:15 -04:00
}
}
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 " );
}
}
display_header ();
2009-02-15 07:58:10 -05:00
?>
2012-02-01 09:49:41 -05:00
< h1 >< ? php _ex ( 'Welcome' , 'Howdy' ); ?> </h1>
2010-02-13 15:40:42 -05:00
< p >< ? php printf ( __ ( 'Welcome to the famous five minute WordPress installation process! You may want to browse the <a href="%s">ReadMe documentation</a> at your leisure. Otherwise, just fill in the information below and you’ll be on your way to using the most extendable and powerful personal publishing platform in the world.' ), '../readme.html' ); ?> </p>
2009-02-15 07:58:10 -05:00
2010-02-13 15:40:42 -05:00
< h1 >< ? php _e ( 'Information needed' ); ?> </h1>
< p >< ? php _e ( 'Please provide the following information. Don’t worry, you can always change these settings later.' ); ?> </p>
2004-07-23 04:45:55 -04:00
< ? php
2009-02-15 07:58:10 -05:00
display_setup_form ();
2006-09-28 13:35:59 -04:00
break ;
2004-07-23 04:45:55 -04:00
case 2 :
2014-06-18 15:58:15 -04:00
$loading_language = '' ;
if ( ! empty ( $_POST [ 'language' ] ) ) {
$available_languages = get_available_languages ();
2014-06-19 00:37:15 -04:00
if ( in_array ( $_POST [ 'language' ], $available_languages ) ) {
2014-06-18 15:58:15 -04:00
$loading_language = $_POST [ 'language' ];
load_textdomain ( 'default' , WP_LANG_DIR . " / { $loading_language } .mo " );
load_textdomain ( 'default' , WP_LANG_DIR . " /admin- { $loading_language } .mo " );
}
}
2010-02-13 15:40:42 -05:00
if ( ! empty ( $wpdb -> error ) )
wp_die ( $wpdb -> error -> get_error_message () );
2007-12-22 12:45:30 -05:00
2008-02-05 01:47:27 -05:00
display_header ();
2006-09-28 13:35:59 -04:00
// Fill in the data we gathered
2013-03-01 12:14:09 -05:00
$weblog_title = isset ( $_POST [ 'weblog_title' ] ) ? trim ( wp_unslash ( $_POST [ 'weblog_title' ] ) ) : '' ;
2013-08-24 09:57:09 -04:00
$user_name = isset ( $_POST [ 'user_name' ]) ? trim ( wp_unslash ( $_POST [ 'user_name' ] ) ) : '' ;
2013-03-01 12:14:09 -05:00
$admin_password = isset ( $_POST [ 'admin_password' ]) ? wp_unslash ( $_POST [ 'admin_password' ] ) : '' ;
$admin_password_check = isset ( $_POST [ 'admin_password2' ]) ? wp_unslash ( $_POST [ 'admin_password2' ] ) : '' ;
$admin_email = isset ( $_POST [ 'admin_email' ] ) ? trim ( wp_unslash ( $_POST [ 'admin_email' ] ) ) : '' ;
2010-02-13 15:40:42 -05:00
$public = isset ( $_POST [ 'blog_public' ] ) ? ( int ) $_POST [ 'blog_public' ] : 0 ;
2006-09-28 13:35:59 -04:00
// check e-mail address
2009-02-15 07:58:10 -05:00
$error = false ;
2010-02-13 22:07:47 -05:00
if ( empty ( $user_name ) ) {
// TODO: poka-yoke
2013-09-25 12:14:09 -04:00
display_setup_form ( __ ( 'Please provide a valid username.' ) );
2010-02-13 22:07:47 -05:00
$error = true ;
2010-04-27 22:20:32 -04:00
} elseif ( $user_name != sanitize_user ( $user_name , true ) ) {
2013-09-25 12:14:09 -04:00
display_setup_form ( __ ( 'The username you provided has invalid characters.' ) );
2010-04-27 22:20:32 -04:00
$error = true ;
2010-03-05 07:25:30 -05:00
} elseif ( $admin_password != $admin_password_check ) {
// TODO: poka-yoke
2013-10-02 13:49:09 -04:00
display_setup_form ( __ ( 'Your passwords do not match. Please try again.' ) );
2010-03-05 07:25:30 -05:00
$error = true ;
2010-02-13 22:07:47 -05:00
} else if ( empty ( $admin_email ) ) {
2007-08-02 21:08:59 -04:00
// TODO: poka-yoke
2013-09-25 12:14:09 -04:00
display_setup_form ( __ ( 'You must provide an email address.' ) );
2009-02-15 07:58:10 -05:00
$error = true ;
2010-02-13 15:40:42 -05:00
} elseif ( ! is_email ( $admin_email ) ) {
2007-08-02 21:08:59 -04:00
// TODO: poka-yoke
2013-10-02 13:49:09 -04:00
display_setup_form ( __ ( 'Sorry, that isn’t a valid email address. Email addresses look like <code>username@example.com</code>.' ) );
2009-02-15 07:58:10 -05:00
$error = true ;
2006-09-28 13:35:59 -04:00
}
2006-02-12 02:53:23 -05:00
2009-02-15 07:58:10 -05:00
if ( $error === false ) {
$wpdb -> show_errors ();
2014-06-18 15:58:15 -04:00
$result = wp_install ( $weblog_title , $user_name , $admin_email , $public , '' , wp_slash ( $admin_password ), $loading_language );
2003-05-23 07:07:05 -04:00
?>
2010-02-13 15:40:42 -05:00
< h1 >< ? php _e ( 'Success!' ); ?> </h1>
2003-05-23 07:07:05 -04:00
2010-02-13 15:40:42 -05:00
< p >< ? php _e ( 'WordPress has been installed. Were you expecting more steps? Sorry to disappoint.' ); ?> </p>
2006-09-28 13:35:59 -04:00
2011-11-15 10:47:07 -05:00
< table class = " form-table install-success " >
2011-10-05 19:42:11 -04:00
< tr >
< th >< ? php _e ( 'Username' ); ?> </th>
2011-11-15 10:47:07 -05:00
< td >< ? php echo esc_html ( sanitize_user ( $user_name , true ) ); ?> </td>
2011-10-05 19:42:11 -04:00
</ tr >
< tr >
< th >< ? php _e ( 'Password' ); ?> </th>
< td >< ? php
2014-05-14 12:43:15 -04:00
if ( ! empty ( $result [ 'password' ] ) && empty ( $admin_password_check ) ) : ?>
< code >< ? php echo esc_html ( $result [ 'password' ] ) ?> </code><br />
< ? php endif ?>
< p >< ? php echo $result [ 'password_message' ] ?> </p>
2011-10-05 19:42:11 -04:00
</ td >
</ tr >
</ table >
2008-02-21 18:55:11 -05:00
2012-10-26 15:40:39 -04:00
< p class = " step " >< a href = " ../wp-login.php " class = " button button-large " >< ? php _e ( 'Log In' ); ?> </a></p>
2006-09-28 13:35:59 -04:00
2003-05-23 07:07:05 -04:00
< ? php
2009-02-15 07:58:10 -05:00
}
2006-09-28 13:35:59 -04:00
break ;
2003-05-23 07:07:05 -04:00
}
2013-11-20 19:21:11 -05:00
if ( ! wp_is_mobile () ) {
2003-05-23 07:07:05 -04:00
?>
2014-07-03 18:53:16 -04:00
< script type = " text/javascript " > var t = document . getElementById ( 'weblog_title' ); if ( t ){ t . focus (); } </ script >
2013-11-20 19:21:11 -05:00
< ? php } ?>
2011-08-13 14:01:26 -04:00
< ? php wp_print_scripts ( 'user-profile' ); ?>
2003-05-23 07:07:05 -04:00
</ body >
2008-03-14 14:22:19 -04:00
</ html >