web/wp-login.php
changeset 194 32102edaa81b
parent 136 bde1974c263b
child 204 09a1c134465b
equal deleted inserted replaced
193:2f6f6f7551ca 194:32102edaa81b
    37  *		<title/> element.
    37  *		<title/> element.
    38  * @param string $message Optional. Message to display in header.
    38  * @param string $message Optional. Message to display in header.
    39  * @param WP_Error $wp_error Optional. WordPress Error Object
    39  * @param WP_Error $wp_error Optional. WordPress Error Object
    40  */
    40  */
    41 function login_header($title = 'Log In', $message = '', $wp_error = '') {
    41 function login_header($title = 'Log In', $message = '', $wp_error = '') {
    42 	global $error, $is_iphone, $interim_login;
    42 	global $error, $interim_login, $current_site;
    43 
    43 
    44 	// Don't index any of these forms
    44 	// Don't index any of these forms
    45 	add_filter( 'pre_option_blog_public', create_function( '$a', 'return 0;' ) );
    45 	add_action( 'login_head', 'wp_no_robots' );
    46 	add_action( 'login_head', 'noindex' );
       
    47 
    46 
    48 	if ( empty($wp_error) )
    47 	if ( empty($wp_error) )
    49 		$wp_error = new WP_Error();
    48 		$wp_error = new WP_Error();
       
    49 
       
    50 	// Shake it!
       
    51 	$shake_error_codes = array( 'empty_password', 'empty_email', 'invalid_email', 'invalidcombo', 'empty_username', 'invalid_username', 'incorrect_password' );
       
    52 	$shake_error_codes = apply_filters( 'shake_error_codes', $shake_error_codes );
       
    53 
       
    54 	if ( $shake_error_codes && $wp_error->get_error_code() && in_array( $wp_error->get_error_code(), $shake_error_codes ) )
       
    55 		add_action( 'login_head', 'wp_shake_js', 12 );
       
    56 
       
    57 	?><!DOCTYPE html>
       
    58 	<html xmlns="http://www.w3.org/1999/xhtml" <?php language_attributes(); ?>>
       
    59 	<head>
       
    60 	<meta http-equiv="Content-Type" content="<?php bloginfo('html_type'); ?>; charset=<?php bloginfo('charset'); ?>" />
       
    61 	<title><?php bloginfo('name'); ?> &rsaquo; <?php echo $title; ?></title>
       
    62 	<?php
       
    63 
       
    64 	wp_admin_css( 'wp-admin', true );
       
    65 	wp_admin_css( 'colors-fresh', true );
       
    66 
       
    67 	if ( wp_is_mobile() ) { ?>
       
    68 		<meta name="viewport" content="width=320; initial-scale=0.9; maximum-scale=1.0; user-scalable=0;" /><?php
       
    69 	}
       
    70 
       
    71 	do_action( 'login_enqueue_scripts' );
       
    72 	do_action( 'login_head' );
       
    73 
       
    74 	if ( is_multisite() ) {
       
    75 		$login_header_url   = network_home_url();
       
    76 		$login_header_title = $current_site->site_name;
       
    77 	} else {
       
    78 		$login_header_url   = __( 'http://wordpress.org/' );
       
    79 		$login_header_title = __( 'Powered by WordPress' );
       
    80 	}
       
    81 
       
    82 	$login_header_url   = apply_filters( 'login_headerurl',   $login_header_url   );
       
    83 	$login_header_title = apply_filters( 'login_headertitle', $login_header_title );
       
    84 
       
    85 	// Don't allow interim logins to navigate away from the page.
       
    86 	if ( $interim_login )
       
    87 		$login_header_url = '#';
       
    88 
    50 	?>
    89 	?>
    51 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    90 	</head>
    52 <html xmlns="http://www.w3.org/1999/xhtml" <?php language_attributes(); ?>>
    91 	<body class="login<?php if ( wp_is_mobile() ) echo ' mobile'; ?>">
    53 <head>
    92 	<div id="login">
    54 	<title><?php bloginfo('name'); ?> &rsaquo; <?php echo $title; ?></title>
    93 		<h1><a href="<?php echo esc_url( $login_header_url ); ?>" title="<?php echo esc_attr( $login_header_title ); ?>"><?php bloginfo( 'name' ); ?></a></h1>
    55 	<meta http-equiv="Content-Type" content="<?php bloginfo('html_type'); ?>; charset=<?php bloginfo('charset'); ?>" />
    94 	<?php
    56 <?php
    95 
    57 	wp_admin_css( 'login', true );
    96 	unset( $login_header_url, $login_header_title );
    58 	wp_admin_css( 'colors-fresh', true );
    97 
    59 
       
    60 	if ( $is_iphone ) { ?>
       
    61 	<meta name="viewport" content="width=320; initial-scale=0.9; maximum-scale=1.0; user-scalable=0;" />
       
    62 	<style type="text/css" media="screen">
       
    63 	form { margin-left: 0px; }
       
    64 	#login { margin-top: 20px; }
       
    65 	</style>
       
    66 <?php
       
    67 	} elseif ( isset($interim_login) && $interim_login ) { ?>
       
    68 	<style type="text/css" media="all">
       
    69 	.login #login { margin: 20px auto; }
       
    70 	</style>
       
    71 <?php
       
    72 	}
       
    73 
       
    74 	do_action('login_head'); ?>
       
    75 </head>
       
    76 <body class="login">
       
    77 
       
    78 <div id="login"><h1><a href="<?php echo apply_filters('login_headerurl', 'http://wordpress.org/'); ?>" title="<?php echo apply_filters('login_headertitle', __('Powered by WordPress')); ?>"><?php bloginfo('name'); ?></a></h1>
       
    79 <?php
       
    80 	$message = apply_filters('login_message', $message);
    98 	$message = apply_filters('login_message', $message);
    81 	if ( !empty( $message ) ) echo $message . "\n";
    99 	if ( !empty( $message ) )
    82 
   100 		echo $message . "\n";
    83 	// Incase a plugin uses $error rather than the $errors object
   101 
       
   102 	// In case a plugin uses $error rather than the $wp_errors object
    84 	if ( !empty( $error ) ) {
   103 	if ( !empty( $error ) ) {
    85 		$wp_error->add('error', $error);
   104 		$wp_error->add('error', $error);
    86 		unset($error);
   105 		unset($error);
    87 	}
   106 	}
    88 
   107 
   104 			echo '<p class="message">' . apply_filters('login_messages', $messages) . "</p>\n";
   123 			echo '<p class="message">' . apply_filters('login_messages', $messages) . "</p>\n";
   105 	}
   124 	}
   106 } // End of login_header()
   125 } // End of login_header()
   107 
   126 
   108 /**
   127 /**
       
   128  * Outputs the footer for the login page.
       
   129  *
       
   130  * @param string $input_id Which input to auto-focus
       
   131  */
       
   132 function login_footer($input_id = '') {
       
   133 	global $interim_login;
       
   134 
       
   135 	// Don't allow interim logins to navigate away from the page.
       
   136 	if ( ! $interim_login ): ?>
       
   137 	<p id="backtoblog"><a href="<?php echo esc_url( home_url( '/' ) ); ?>" title="<?php esc_attr_e( 'Are you lost?' ); ?>"><?php printf( __( '&larr; Back to %s' ), get_bloginfo( 'title', 'display' ) ); ?></a></p>
       
   138 	<?php endif; ?>
       
   139 
       
   140 	</div>
       
   141 
       
   142 	<?php if ( !empty($input_id) ) : ?>
       
   143 	<script type="text/javascript">
       
   144 	try{document.getElementById('<?php echo $input_id; ?>').focus();}catch(e){}
       
   145 	if(typeof wpOnload=='function')wpOnload();
       
   146 	</script>
       
   147 	<?php endif; ?>
       
   148 
       
   149 	<?php do_action('login_footer'); ?>
       
   150 	<div class="clear"></div>
       
   151 	</body>
       
   152 	</html>
       
   153 	<?php
       
   154 }
       
   155 
       
   156 function wp_shake_js() {
       
   157 	if ( wp_is_mobile() )
       
   158 		return;
       
   159 ?>
       
   160 <script type="text/javascript">
       
   161 addLoadEvent = function(func){if(typeof jQuery!="undefined")jQuery(document).ready(func);else if(typeof wpOnload!='function'){wpOnload=func;}else{var oldonload=wpOnload;wpOnload=function(){oldonload();func();}}};
       
   162 function s(id,pos){g(id).left=pos+'px';}
       
   163 function g(id){return document.getElementById(id).style;}
       
   164 function shake(id,a,d){c=a.shift();s(id,c);if(a.length>0){setTimeout(function(){shake(id,a,d);},d);}else{try{g(id).position='static';wp_attempt_focus();}catch(e){}}}
       
   165 addLoadEvent(function(){ var p=new Array(15,30,15,0,-15,-30,-15,0);p=p.concat(p.concat(p));var i=document.forms[0].id;g(i).position='relative';shake(i,p,20);});
       
   166 </script>
       
   167 <?php
       
   168 }
       
   169 
       
   170 /**
   109  * Handles sending password retrieval email to user.
   171  * Handles sending password retrieval email to user.
   110  *
   172  *
   111  * @uses $wpdb WordPress Database object
   173  * @uses $wpdb WordPress Database object
   112  *
   174  *
   113  * @return bool|WP_Error True: when finish. WP_Error on error
   175  * @return bool|WP_Error True: when finish. WP_Error on error
   114  */
   176  */
   115 function retrieve_password() {
   177 function retrieve_password() {
   116 	global $wpdb;
   178 	global $wpdb, $current_site;
   117 
   179 
   118 	$errors = new WP_Error();
   180 	$errors = new WP_Error();
   119 
   181 
   120 	if ( empty( $_POST['user_login'] ) && empty( $_POST['user_email'] ) )
   182 	if ( empty( $_POST['user_login'] ) ) {
   121 		$errors->add('empty_username', __('<strong>ERROR</strong>: Enter a username or e-mail address.'));
   183 		$errors->add('empty_username', __('<strong>ERROR</strong>: Enter a username or e-mail address.'));
   122 
   184 	} else if ( strpos( $_POST['user_login'], '@' ) ) {
   123 	if ( strpos($_POST['user_login'], '@') ) {
   185 		$user_data = get_user_by( 'email', trim( $_POST['user_login'] ) );
   124 		$user_data = get_user_by_email(trim($_POST['user_login']));
   186 		if ( empty( $user_data ) )
   125 		if ( empty($user_data) )
       
   126 			$errors->add('invalid_email', __('<strong>ERROR</strong>: There is no user registered with that email address.'));
   187 			$errors->add('invalid_email', __('<strong>ERROR</strong>: There is no user registered with that email address.'));
   127 	} else {
   188 	} else {
   128 		$login = trim($_POST['user_login']);
   189 		$login = trim($_POST['user_login']);
   129 		$user_data = get_userdatabylogin($login);
   190 		$user_data = get_user_by('login', $login);
   130 	}
   191 	}
   131 
   192 
   132 	do_action('lostpassword_post');
   193 	do_action('lostpassword_post');
   133 
   194 
   134 	if ( $errors->get_error_code() )
   195 	if ( $errors->get_error_code() )
   159 		$key = wp_generate_password(20, false);
   220 		$key = wp_generate_password(20, false);
   160 		do_action('retrieve_password_key', $user_login, $key);
   221 		do_action('retrieve_password_key', $user_login, $key);
   161 		// Now insert the new md5 key into the db
   222 		// Now insert the new md5 key into the db
   162 		$wpdb->update($wpdb->users, array('user_activation_key' => $key), array('user_login' => $user_login));
   223 		$wpdb->update($wpdb->users, array('user_activation_key' => $key), array('user_login' => $user_login));
   163 	}
   224 	}
   164 	$message = __('Someone has asked to reset the password for the following site and username.') . "\r\n\r\n";
   225 	$message = __('Someone requested that the password be reset for the following account:') . "\r\n\r\n";
   165 	$message .= get_option('siteurl') . "\r\n\r\n";
   226 	$message .= network_home_url( '/' ) . "\r\n\r\n";
   166 	$message .= sprintf(__('Username: %s'), $user_login) . "\r\n\r\n";
   227 	$message .= sprintf(__('Username: %s'), $user_login) . "\r\n\r\n";
   167 	$message .= __('To reset your password visit the following address, otherwise just ignore this email and nothing will happen.') . "\r\n\r\n";
   228 	$message .= __('If this was a mistake, just ignore this email and nothing will happen.') . "\r\n\r\n";
   168 	$message .= site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user_login), 'login') . "\r\n";
   229 	$message .= __('To reset your password, visit the following address:') . "\r\n\r\n";
   169 
   230 	$message .= '<' . network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user_login), 'login') . ">\r\n";
   170 	// The blogname option is escaped with esc_html on the way into the database in sanitize_option
   231 
   171 	// we want to reverse this for the plain text arena of emails.
   232 	if ( is_multisite() )
   172 	$blogname = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES);
   233 		$blogname = $GLOBALS['current_site']->site_name;
   173 
   234 	else
   174 	$title = sprintf(__('[%s] Password Reset'), $blogname);
   235 		// The blogname option is escaped with esc_html on the way into the database in sanitize_option
       
   236 		// we want to reverse this for the plain text arena of emails.
       
   237 		$blogname = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES);
       
   238 
       
   239 	$title = sprintf( __('[%s] Password Reset'), $blogname );
   175 
   240 
   176 	$title = apply_filters('retrieve_password_title', $title);
   241 	$title = apply_filters('retrieve_password_title', $title);
   177 	$message = apply_filters('retrieve_password_message', $message, $key);
   242 	$message = apply_filters('retrieve_password_message', $message, $key);
   178 
   243 
   179 	if ( $message && !wp_mail($user_email, $title, $message) )
   244 	if ( $message && !wp_mail($user_email, $title, $message) )
   180 		die('<p>' . __('The e-mail could not be sent.') . "<br />\n" . __('Possible reason: your host may have disabled the mail() function...') . '</p>');
   245 		wp_die( __('The e-mail could not be sent.') . "<br />\n" . __('Possible reason: your host may have disabled the mail() function...') );
   181 
   246 
   182 	return true;
   247 	return true;
       
   248 }
       
   249 
       
   250 /**
       
   251  * Retrieves a user row based on password reset key and login
       
   252  *
       
   253  * @uses $wpdb WordPress Database object
       
   254  *
       
   255  * @param string $key Hash to validate sending user's password
       
   256  * @param string $login The user login
       
   257  * @return object|WP_Error User's database row on success, error object for invalid keys
       
   258  */
       
   259 function check_password_reset_key($key, $login) {
       
   260 	global $wpdb;
       
   261 
       
   262 	$key = preg_replace('/[^a-z0-9]/i', '', $key);
       
   263 
       
   264 	if ( empty( $key ) || !is_string( $key ) )
       
   265 		return new WP_Error('invalid_key', __('Invalid key'));
       
   266 
       
   267 	if ( empty($login) || !is_string($login) )
       
   268 		return new WP_Error('invalid_key', __('Invalid key'));
       
   269 
       
   270 	$user = $wpdb->get_row($wpdb->prepare("SELECT * FROM $wpdb->users WHERE user_activation_key = %s AND user_login = %s", $key, $login));
       
   271 
       
   272 	if ( empty( $user ) )
       
   273 		return new WP_Error('invalid_key', __('Invalid key'));
       
   274 
       
   275 	return $user;
   183 }
   276 }
   184 
   277 
   185 /**
   278 /**
   186  * Handles resetting the user's password.
   279  * Handles resetting the user's password.
   187  *
   280  *
   188  * @uses $wpdb WordPress Database object
   281  * @param object $user The user
   189  *
   282  * @param string $new_pass New password for the user in plaintext
   190  * @param string $key Hash to validate sending user's password
       
   191  * @return bool|WP_Error
       
   192  */
   283  */
   193 function reset_password($key, $login) {
   284 function reset_password($user, $new_pass) {
   194 	global $wpdb;
       
   195 
       
   196 	$key = preg_replace('/[^a-z0-9]/i', '', $key);
       
   197 
       
   198 	if ( empty( $key ) || !is_string( $key ) )
       
   199 		return new WP_Error('invalid_key', __('Invalid key'));
       
   200 
       
   201 	if ( empty($login) || !is_string($login) )
       
   202 		return new WP_Error('invalid_key', __('Invalid key'));
       
   203 
       
   204 	$user = $wpdb->get_row($wpdb->prepare("SELECT * FROM $wpdb->users WHERE user_activation_key = %s AND user_login = %s", $key, $login));
       
   205 	if ( empty( $user ) )
       
   206 		return new WP_Error('invalid_key', __('Invalid key'));
       
   207 
       
   208 	// Generate something random for a password...
       
   209 	$new_pass = wp_generate_password();
       
   210 
       
   211 	do_action('password_reset', $user, $new_pass);
   285 	do_action('password_reset', $user, $new_pass);
   212 
   286 
   213 	wp_set_password($new_pass, $user->ID);
   287 	wp_set_password($new_pass, $user->ID);
   214 	update_usermeta($user->ID, 'default_password_nag', true); //Set up the Password change nag.
       
   215 	$message  = sprintf(__('Username: %s'), $user->user_login) . "\r\n";
       
   216 	$message .= sprintf(__('Password: %s'), $new_pass) . "\r\n";
       
   217 	$message .= site_url('wp-login.php', 'login') . "\r\n";
       
   218 
       
   219 	// The blogname option is escaped with esc_html on the way into the database in sanitize_option
       
   220 	// we want to reverse this for the plain text arena of emails.
       
   221 	$blogname = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES);
       
   222 
       
   223 	$title = sprintf(__('[%s] Your new password'), $blogname);
       
   224 
       
   225 	$title = apply_filters('password_reset_title', $title);
       
   226 	$message = apply_filters('password_reset_message', $message, $new_pass);
       
   227 
       
   228 	if ( $message && !wp_mail($user->user_email, $title, $message) )
       
   229   		die('<p>' . __('The e-mail could not be sent.') . "<br />\n" . __('Possible reason: your host may have disabled the mail() function...') . '</p>');
       
   230 
   288 
   231 	wp_password_change_notification($user);
   289 	wp_password_change_notification($user);
   232 
       
   233 	return true;
       
   234 }
   290 }
   235 
   291 
   236 /**
   292 /**
   237  * Handles registering a new user.
   293  * Handles registering a new user.
   238  *
   294  *
   239  * @param string $user_login User's username for logging in
   295  * @param string $user_login User's username for logging in
   240  * @param string $user_email User's email address to send password and add
   296  * @param string $user_email User's email address to send password and add
   241  * @return int|WP_Error Either user's ID or error on failure.
   297  * @return int|WP_Error Either user's ID or error on failure.
   242  */
   298  */
   243 function register_new_user($user_login, $user_email) {
   299 function register_new_user( $user_login, $user_email ) {
   244 	$errors = new WP_Error();
   300 	$errors = new WP_Error();
   245 
   301 
   246 	$user_login = sanitize_user( $user_login );
   302 	$sanitized_user_login = sanitize_user( $user_login );
   247 	$user_email = apply_filters( 'user_registration_email', $user_email );
   303 	$user_email = apply_filters( 'user_registration_email', $user_email );
   248 
   304 
   249 	// Check the username
   305 	// Check the username
   250 	if ( $user_login == '' )
   306 	if ( $sanitized_user_login == '' ) {
   251 		$errors->add('empty_username', __('<strong>ERROR</strong>: Please enter a username.'));
   307 		$errors->add( 'empty_username', __( '<strong>ERROR</strong>: Please enter a username.' ) );
   252 	elseif ( !validate_username( $user_login ) ) {
   308 	} elseif ( ! validate_username( $user_login ) ) {
   253 		$errors->add('invalid_username', __('<strong>ERROR</strong>: This username is invalid.  Please enter a valid username.'));
   309 		$errors->add( 'invalid_username', __( '<strong>ERROR</strong>: This username is invalid because it uses illegal characters. Please enter a valid username.' ) );
   254 		$user_login = '';
   310 		$sanitized_user_login = '';
   255 	} elseif ( username_exists( $user_login ) )
   311 	} elseif ( username_exists( $sanitized_user_login ) ) {
   256 		$errors->add('username_exists', __('<strong>ERROR</strong>: This username is already registered, please choose another one.'));
   312 		$errors->add( 'username_exists', __( '<strong>ERROR</strong>: This username is already registered, please choose another one.' ) );
       
   313 	}
   257 
   314 
   258 	// Check the e-mail address
   315 	// Check the e-mail address
   259 	if ($user_email == '') {
   316 	if ( $user_email == '' ) {
   260 		$errors->add('empty_email', __('<strong>ERROR</strong>: Please type your e-mail address.'));
   317 		$errors->add( 'empty_email', __( '<strong>ERROR</strong>: Please type your e-mail address.' ) );
   261 	} elseif ( !is_email( $user_email ) ) {
   318 	} elseif ( ! is_email( $user_email ) ) {
   262 		$errors->add('invalid_email', __('<strong>ERROR</strong>: The email address isn&#8217;t correct.'));
   319 		$errors->add( 'invalid_email', __( '<strong>ERROR</strong>: The email address isn&#8217;t correct.' ) );
   263 		$user_email = '';
   320 		$user_email = '';
   264 	} elseif ( email_exists( $user_email ) )
   321 	} elseif ( email_exists( $user_email ) ) {
   265 		$errors->add('email_exists', __('<strong>ERROR</strong>: This email is already registered, please choose another one.'));
   322 		$errors->add( 'email_exists', __( '<strong>ERROR</strong>: This email is already registered, please choose another one.' ) );
   266 
   323 	}
   267 	do_action('register_post', $user_login, $user_email, $errors);
   324 
   268 
   325 	do_action( 'register_post', $sanitized_user_login, $user_email, $errors );
   269 	$errors = apply_filters( 'registration_errors', $errors, $user_login, $user_email );
   326 
       
   327 	$errors = apply_filters( 'registration_errors', $errors, $sanitized_user_login, $user_email );
   270 
   328 
   271 	if ( $errors->get_error_code() )
   329 	if ( $errors->get_error_code() )
   272 		return $errors;
   330 		return $errors;
   273 
   331 
   274 	$user_pass = wp_generate_password();
   332 	$user_pass = wp_generate_password( 12, false);
   275 	$user_id = wp_create_user( $user_login, $user_pass, $user_email );
   333 	$user_id = wp_create_user( $sanitized_user_login, $user_pass, $user_email );
   276 	if ( !$user_id ) {
   334 	if ( ! $user_id ) {
   277 		$errors->add('registerfail', sprintf(__('<strong>ERROR</strong>: Couldn&#8217;t register you... please contact the <a href="mailto:%s">webmaster</a> !'), get_option('admin_email')));
   335 		$errors->add( 'registerfail', sprintf( __( '<strong>ERROR</strong>: Couldn&#8217;t register you... please contact the <a href="mailto:%s">webmaster</a> !' ), get_option( 'admin_email' ) ) );
   278 		return $errors;
   336 		return $errors;
   279 	}
   337 	}
   280 
   338 
   281 	wp_new_user_notification($user_id, $user_pass);
   339 	update_user_option( $user_id, 'default_password_nag', true, true ); //Set up the Password change nag.
       
   340 
       
   341 	wp_new_user_notification( $user_id, $user_pass );
   282 
   342 
   283 	return $user_id;
   343 	return $user_id;
   284 }
   344 }
   285 
   345 
   286 //
   346 //
   292 
   352 
   293 if ( isset($_GET['key']) )
   353 if ( isset($_GET['key']) )
   294 	$action = 'resetpass';
   354 	$action = 'resetpass';
   295 
   355 
   296 // validate action so as to default to the login screen
   356 // validate action so as to default to the login screen
   297 if ( !in_array($action, array('logout', 'lostpassword', 'retrievepassword', 'resetpass', 'rp', 'register', 'login'), true) && false === has_filter('login_form_' . $action) )
   357 if ( !in_array( $action, array( 'postpass', 'logout', 'lostpassword', 'retrievepassword', 'resetpass', 'rp', 'register', 'login' ), true ) && false === has_filter( 'login_form_' . $action ) )
   298 	$action = 'login';
   358 	$action = 'login';
   299 
   359 
   300 nocache_headers();
   360 nocache_headers();
   301 
   361 
   302 header('Content-Type: '.get_bloginfo('html_type').'; charset='.get_bloginfo('charset'));
   362 header('Content-Type: '.get_bloginfo('html_type').'; charset='.get_bloginfo('charset'));
   303 
   363 
   304 if ( defined('RELOCATE') ) { // Move flag is set
   364 if ( defined('RELOCATE') ) { // Move flag is set
   305 	if ( isset( $_SERVER['PATH_INFO'] ) && ($_SERVER['PATH_INFO'] != $_SERVER['PHP_SELF']) )
   365 	if ( isset( $_SERVER['PATH_INFO'] ) && ($_SERVER['PATH_INFO'] != $_SERVER['PHP_SELF']) )
   306 		$_SERVER['PHP_SELF'] = str_replace( $_SERVER['PATH_INFO'], '', $_SERVER['PHP_SELF'] );
   366 		$_SERVER['PHP_SELF'] = str_replace( $_SERVER['PATH_INFO'], '', $_SERVER['PHP_SELF'] );
   307 
   367 
   308 	$schema = ( isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) == 'on' ) ? 'https://' : 'http://';
   368 	$schema = is_ssl() ? 'https://' : 'http://';
   309 	if ( dirname($schema . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']) != get_option('siteurl') )
   369 	if ( dirname($schema . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']) != get_option('siteurl') )
   310 		update_option('siteurl', dirname($schema . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']) );
   370 		update_option('siteurl', dirname($schema . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']) );
   311 }
   371 }
   312 
   372 
   313 //Set a cookie now to see if they are supported by the browser.
   373 //Set a cookie now to see if they are supported by the browser.
   314 setcookie(TEST_COOKIE, 'WP Cookie check', 0, COOKIEPATH, COOKIE_DOMAIN);
   374 setcookie(TEST_COOKIE, 'WP Cookie check', 0, COOKIEPATH, COOKIE_DOMAIN);
   315 if ( SITECOOKIEPATH != COOKIEPATH )
   375 if ( SITECOOKIEPATH != COOKIEPATH )
   316 	setcookie(TEST_COOKIE, 'WP Cookie check', 0, SITECOOKIEPATH, COOKIE_DOMAIN);
   376 	setcookie(TEST_COOKIE, 'WP Cookie check', 0, SITECOOKIEPATH, COOKIE_DOMAIN);
   317 
   377 
   318 // allow plugins to override the default actions, and to add extra actions if they want
   378 // allow plugins to override the default actions, and to add extra actions if they want
   319 do_action('login_form_' . $action);
   379 do_action( 'login_init' );
       
   380 do_action( 'login_form_' . $action );
   320 
   381 
   321 $http_post = ('POST' == $_SERVER['REQUEST_METHOD']);
   382 $http_post = ('POST' == $_SERVER['REQUEST_METHOD']);
   322 switch ($action) {
   383 switch ($action) {
       
   384 
       
   385 case 'postpass' :
       
   386 	if ( empty( $wp_hasher ) ) {
       
   387 		require_once( ABSPATH . 'wp-includes/class-phpass.php' );
       
   388 		// By default, use the portable hash from phpass
       
   389 		$wp_hasher = new PasswordHash(8, true);
       
   390 	}
       
   391 
       
   392 	// 10 days
       
   393 	setcookie( 'wp-postpass_' . COOKIEHASH, $wp_hasher->HashPassword( stripslashes( $_POST['post_password'] ) ), time() + 864000, COOKIEPATH );
       
   394 
       
   395 	wp_safe_redirect( wp_get_referer() );
       
   396 	exit();
       
   397 
       
   398 break;
   323 
   399 
   324 case 'logout' :
   400 case 'logout' :
   325 	check_admin_referer('log-out');
   401 	check_admin_referer('log-out');
   326 	wp_logout();
   402 	wp_logout();
   327 
   403 
   328 	$redirect_to = 'wp-login.php?loggedout=true';
   404 	$redirect_to = !empty( $_REQUEST['redirect_to'] ) ? $_REQUEST['redirect_to'] : 'wp-login.php?loggedout=true';
   329 	if ( isset( $_REQUEST['redirect_to'] ) )
   405 	wp_safe_redirect( $redirect_to );
   330 		$redirect_to = $_REQUEST['redirect_to'];
       
   331 
       
   332 	wp_safe_redirect($redirect_to);
       
   333 	exit();
   406 	exit();
   334 
   407 
   335 break;
   408 break;
   336 
   409 
   337 case 'lostpassword' :
   410 case 'lostpassword' :
   338 case 'retrievepassword' :
   411 case 'retrievepassword' :
       
   412 
   339 	if ( $http_post ) {
   413 	if ( $http_post ) {
   340 		$errors = retrieve_password();
   414 		$errors = retrieve_password();
   341 		if ( !is_wp_error($errors) ) {
   415 		if ( !is_wp_error($errors) ) {
   342 			wp_redirect('wp-login.php?checkemail=confirm');
   416 			$redirect_to = !empty( $_REQUEST['redirect_to'] ) ? $_REQUEST['redirect_to'] : 'wp-login.php?checkemail=confirm';
       
   417 			wp_safe_redirect( $redirect_to );
   343 			exit();
   418 			exit();
   344 		}
   419 		}
   345 	}
   420 	}
   346 
   421 
   347 	if ( isset($_GET['error']) && 'invalidkey' == $_GET['error'] ) $errors->add('invalidkey', __('Sorry, that key does not appear to be valid.'));
   422 	if ( isset($_GET['error']) && 'invalidkey' == $_GET['error'] ) $errors->add('invalidkey', __('Sorry, that key does not appear to be valid.'));
       
   423 	$redirect_to = apply_filters( 'lostpassword_redirect', !empty( $_REQUEST['redirect_to'] ) ? $_REQUEST['redirect_to'] : '' );
   348 
   424 
   349 	do_action('lost_password');
   425 	do_action('lost_password');
   350 	login_header(__('Lost Password'), '<p class="message">' . __('Please enter your username or e-mail address. You will receive a new password via e-mail.') . '</p>', $errors);
   426 	login_header(__('Lost Password'), '<p class="message">' . __('Please enter your username or email address. You will receive a link to create a new password via email.') . '</p>', $errors);
   351 
   427 
   352 	$user_login = isset($_POST['user_login']) ? stripslashes($_POST['user_login']) : '';
   428 	$user_login = isset($_POST['user_login']) ? stripslashes($_POST['user_login']) : '';
   353 
   429 
   354 ?>
   430 ?>
   355 
   431 
   356 <form name="lostpasswordform" id="lostpasswordform" action="<?php echo site_url('wp-login.php?action=lostpassword', 'login_post') ?>" method="post">
   432 <form name="lostpasswordform" id="lostpasswordform" action="<?php echo esc_url( site_url( 'wp-login.php?action=lostpassword', 'login_post' ) ); ?>" method="post">
   357 	<p>
   433 	<p>
   358 		<label><?php _e('Username or E-mail:') ?><br />
   434 		<label for="user_login" ><?php _e('Username or E-mail:') ?><br />
   359 		<input type="text" name="user_login" id="user_login" class="input" value="<?php echo esc_attr($user_login); ?>" size="20" tabindex="10" /></label>
   435 		<input type="text" name="user_login" id="user_login" class="input" value="<?php echo esc_attr($user_login); ?>" size="20" tabindex="10" /></label>
   360 	</p>
   436 	</p>
   361 <?php do_action('lostpassword_form'); ?>
   437 <?php do_action('lostpassword_form'); ?>
       
   438 	<input type="hidden" name="redirect_to" value="<?php echo esc_attr( $redirect_to ); ?>" />
   362 	<p class="submit"><input type="submit" name="wp-submit" id="wp-submit" class="button-primary" value="<?php esc_attr_e('Get New Password'); ?>" tabindex="100" /></p>
   439 	<p class="submit"><input type="submit" name="wp-submit" id="wp-submit" class="button-primary" value="<?php esc_attr_e('Get New Password'); ?>" tabindex="100" /></p>
   363 </form>
   440 </form>
   364 
   441 
   365 <p id="nav">
   442 <p id="nav">
   366 <?php if (get_option('users_can_register')) : ?>
   443 <a href="<?php echo esc_url( wp_login_url() ); ?>"><?php _e('Log in') ?></a>
   367 <a href="<?php echo site_url('wp-login.php', 'login') ?>"><?php _e('Log in') ?></a> |
   444 <?php if ( get_option( 'users_can_register' ) ) : ?>
   368 <a href="<?php echo site_url('wp-login.php?action=register', 'login') ?>"><?php _e('Register') ?></a>
   445  | <a href="<?php echo esc_url( site_url( 'wp-login.php?action=register', 'login' ) ); ?>"><?php _e( 'Register' ); ?></a>
   369 <?php else : ?>
       
   370 <a href="<?php echo site_url('wp-login.php', 'login') ?>"><?php _e('Log in') ?></a>
       
   371 <?php endif; ?>
   446 <?php endif; ?>
   372 </p>
   447 </p>
   373 
   448 
   374 </div>
       
   375 
       
   376 <p id="backtoblog"><a href="<?php bloginfo('url'); ?>/" title="<?php _e('Are you lost?') ?>"><?php printf(__('&larr; Back to %s'), get_bloginfo('title', 'display' )); ?></a></p>
       
   377 
       
   378 <script type="text/javascript">
       
   379 try{document.getElementById('user_login').focus();}catch(e){}
       
   380 </script>
       
   381 </body>
       
   382 </html>
       
   383 <?php
   449 <?php
       
   450 login_footer('user_login');
   384 break;
   451 break;
   385 
   452 
   386 case 'resetpass' :
   453 case 'resetpass' :
   387 case 'rp' :
   454 case 'rp' :
   388 	$errors = reset_password($_GET['key'], $_GET['login']);
   455 	$user = check_password_reset_key($_GET['key'], $_GET['login']);
   389 
   456 
   390 	if ( ! is_wp_error($errors) ) {
   457 	if ( is_wp_error($user) ) {
   391 		wp_redirect('wp-login.php?checkemail=newpass');
   458 		wp_redirect( site_url('wp-login.php?action=lostpassword&error=invalidkey') );
   392 		exit();
   459 		exit;
   393 	}
   460 	}
   394 
   461 
   395 	wp_redirect('wp-login.php?action=lostpassword&error=invalidkey');
   462 	$errors = '';
   396 	exit();
   463 
   397 
   464 	if ( isset($_POST['pass1']) && $_POST['pass1'] != $_POST['pass2'] ) {
       
   465 		$errors = new WP_Error('password_reset_mismatch', __('The passwords do not match.'));
       
   466 	} elseif ( isset($_POST['pass1']) && !empty($_POST['pass1']) ) {
       
   467 		reset_password($user, $_POST['pass1']);
       
   468 		login_header( __( 'Password Reset' ), '<p class="message reset-pass">' . __( 'Your password has been reset.' ) . ' <a href="' . esc_url( wp_login_url() ) . '">' . __( 'Log in' ) . '</a></p>' );
       
   469 		login_footer();
       
   470 		exit;
       
   471 	}
       
   472 
       
   473 	wp_enqueue_script('utils');
       
   474 	wp_enqueue_script('user-profile');
       
   475 
       
   476 	login_header(__('Reset Password'), '<p class="message reset-pass">' . __('Enter your new password below.') . '</p>', $errors );
       
   477 
       
   478 ?>
       
   479 <form name="resetpassform" id="resetpassform" action="<?php echo esc_url( site_url( 'wp-login.php?action=resetpass&key=' . urlencode( $_GET['key'] ) . '&login=' . urlencode( $_GET['login'] ), 'login_post' ) ); ?>" method="post">
       
   480 	<input type="hidden" id="user_login" value="<?php echo esc_attr( $_GET['login'] ); ?>" autocomplete="off" />
       
   481 
       
   482 	<p>
       
   483 		<label for="pass1"><?php _e('New password') ?><br />
       
   484 		<input type="password" name="pass1" id="pass1" class="input" size="20" value="" autocomplete="off" /></label>
       
   485 	</p>
       
   486 	<p>
       
   487 		<label for="pass2"><?php _e('Confirm new password') ?><br />
       
   488 		<input type="password" name="pass2" id="pass2" class="input" size="20" value="" autocomplete="off" /></label>
       
   489 	</p>
       
   490 
       
   491 	<div id="pass-strength-result" class="hide-if-no-js"><?php _e('Strength indicator'); ?></div>
       
   492 	<p class="description indicator-hint"><?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 ! " ? $ % ^ &amp; ).'); ?></p>
       
   493 
       
   494 	<br class="clear" />
       
   495 	<p class="submit"><input type="submit" name="wp-submit" id="wp-submit" class="button-primary" value="<?php esc_attr_e('Reset Password'); ?>" tabindex="100" /></p>
       
   496 </form>
       
   497 
       
   498 <p id="nav">
       
   499 <a href="<?php echo esc_url( wp_login_url() ); ?>"><?php _e( 'Log in' ); ?></a>
       
   500 <?php if ( get_option( 'users_can_register' ) ) : ?>
       
   501  | <a href="<?php echo esc_url( site_url( 'wp-login.php?action=register', 'login' ) ); ?>"><?php _e( 'Register' ); ?></a>
       
   502 <?php endif; ?>
       
   503 </p>
       
   504 
       
   505 <?php
       
   506 login_footer('user_pass');
   398 break;
   507 break;
   399 
   508 
   400 case 'register' :
   509 case 'register' :
       
   510 	if ( is_multisite() ) {
       
   511 		// Multisite uses wp-signup.php
       
   512 		wp_redirect( apply_filters( 'wp_signup_location', site_url('wp-signup.php') ) );
       
   513 		exit;
       
   514 	}
       
   515 
   401 	if ( !get_option('users_can_register') ) {
   516 	if ( !get_option('users_can_register') ) {
   402 		wp_redirect('wp-login.php?registration=disabled');
   517 		wp_redirect( site_url('wp-login.php?registration=disabled') );
   403 		exit();
   518 		exit();
   404 	}
   519 	}
   405 
   520 
   406 	$user_login = '';
   521 	$user_login = '';
   407 	$user_email = '';
   522 	$user_email = '';
   408 	if ( $http_post ) {
   523 	if ( $http_post ) {
   409 		require_once( ABSPATH . WPINC . '/registration.php');
       
   410 
       
   411 		$user_login = $_POST['user_login'];
   524 		$user_login = $_POST['user_login'];
   412 		$user_email = $_POST['user_email'];
   525 		$user_email = $_POST['user_email'];
   413 		$errors = register_new_user($user_login, $user_email);
   526 		$errors = register_new_user($user_login, $user_email);
   414 		if ( !is_wp_error($errors) ) {
   527 		if ( !is_wp_error($errors) ) {
   415 			wp_redirect('wp-login.php?checkemail=registered');
   528 			$redirect_to = !empty( $_POST['redirect_to'] ) ? $_POST['redirect_to'] : 'wp-login.php?checkemail=registered';
       
   529 			wp_safe_redirect( $redirect_to );
   416 			exit();
   530 			exit();
   417 		}
   531 		}
   418 	}
   532 	}
   419 
   533 
       
   534 	$redirect_to = apply_filters( 'registration_redirect', !empty( $_REQUEST['redirect_to'] ) ? $_REQUEST['redirect_to'] : '' );
   420 	login_header(__('Registration Form'), '<p class="message register">' . __('Register For This Site') . '</p>', $errors);
   535 	login_header(__('Registration Form'), '<p class="message register">' . __('Register For This Site') . '</p>', $errors);
   421 ?>
   536 ?>
   422 
   537 
   423 <form name="registerform" id="registerform" action="<?php echo site_url('wp-login.php?action=register', 'login_post') ?>" method="post">
   538 <form name="registerform" id="registerform" action="<?php echo esc_url( site_url('wp-login.php?action=register', 'login_post') ); ?>" method="post">
   424 	<p>
   539 	<p>
   425 		<label><?php _e('Username') ?><br />
   540 		<label for="user_login"><?php _e('Username') ?><br />
   426 		<input type="text" name="user_login" id="user_login" class="input" value="<?php echo esc_attr(stripslashes($user_login)); ?>" size="20" tabindex="10" /></label>
   541 		<input type="text" name="user_login" id="user_login" class="input" value="<?php echo esc_attr(stripslashes($user_login)); ?>" size="20" tabindex="10" /></label>
   427 	</p>
   542 	</p>
   428 	<p>
   543 	<p>
   429 		<label><?php _e('E-mail') ?><br />
   544 		<label for="user_email"><?php _e('E-mail') ?><br />
   430 		<input type="text" name="user_email" id="user_email" class="input" value="<?php echo esc_attr(stripslashes($user_email)); ?>" size="25" tabindex="20" /></label>
   545 		<input type="email" name="user_email" id="user_email" class="input" value="<?php echo esc_attr(stripslashes($user_email)); ?>" size="25" tabindex="20" /></label>
   431 	</p>
   546 	</p>
   432 <?php do_action('register_form'); ?>
   547 <?php do_action('register_form'); ?>
   433 	<p id="reg_passmail"><?php _e('A password will be e-mailed to you.') ?></p>
   548 	<p id="reg_passmail"><?php _e('A password will be e-mailed to you.') ?></p>
   434 	<br class="clear" />
   549 	<br class="clear" />
       
   550 	<input type="hidden" name="redirect_to" value="<?php echo esc_attr( $redirect_to ); ?>" />
   435 	<p class="submit"><input type="submit" name="wp-submit" id="wp-submit" class="button-primary" value="<?php esc_attr_e('Register'); ?>" tabindex="100" /></p>
   551 	<p class="submit"><input type="submit" name="wp-submit" id="wp-submit" class="button-primary" value="<?php esc_attr_e('Register'); ?>" tabindex="100" /></p>
   436 </form>
   552 </form>
   437 
   553 
   438 <p id="nav">
   554 <p id="nav">
   439 <a href="<?php echo site_url('wp-login.php', 'login') ?>"><?php _e('Log in') ?></a> |
   555 <a href="<?php echo esc_url( wp_login_url() ); ?>"><?php _e( 'Log in' ); ?></a> |
   440 <a href="<?php echo site_url('wp-login.php?action=lostpassword', 'login') ?>" title="<?php _e('Password Lost and Found') ?>"><?php _e('Lost your password?') ?></a>
   556 <a href="<?php echo esc_url( wp_lostpassword_url() ); ?>" title="<?php esc_attr_e( 'Password Lost and Found' ) ?>"><?php _e( 'Lost your password?' ); ?></a>
   441 </p>
   557 </p>
   442 
   558 
   443 </div>
       
   444 
       
   445 <p id="backtoblog"><a href="<?php bloginfo('url'); ?>/" title="<?php _e('Are you lost?') ?>"><?php printf(__('&larr; Back to %s'), get_bloginfo('title', 'display' )); ?></a></p>
       
   446 
       
   447 <script type="text/javascript">
       
   448 try{document.getElementById('user_login').focus();}catch(e){}
       
   449 </script>
       
   450 </body>
       
   451 </html>
       
   452 <?php
   559 <?php
       
   560 login_footer('user_login');
   453 break;
   561 break;
   454 
   562 
   455 case 'login' :
   563 case 'login' :
   456 default:
   564 default:
   457 	$secure_cookie = '';
   565 	$secure_cookie = '';
   458 	$interim_login = isset($_REQUEST['interim-login']);
   566 	$interim_login = isset($_REQUEST['interim-login']);
       
   567 	$customize_login = isset( $_REQUEST['customize-login'] );
       
   568 	if ( $customize_login )
       
   569 		wp_enqueue_script( 'customize-base' );
   459 
   570 
   460 	// If the user wants ssl but the session is not ssl, force a secure cookie.
   571 	// If the user wants ssl but the session is not ssl, force a secure cookie.
   461 	if ( !empty($_POST['log']) && !force_ssl_admin() ) {
   572 	if ( !empty($_POST['log']) && !force_ssl_admin() ) {
   462 		$user_name = sanitize_user($_POST['log']);
   573 		$user_name = sanitize_user($_POST['log']);
   463 		if ( $user = get_userdatabylogin($user_name) ) {
   574 		if ( $user = get_user_by('login', $user_name) ) {
   464 			if ( get_user_option('use_ssl', $user->ID) ) {
   575 			if ( get_user_option('use_ssl', $user->ID) ) {
   465 				$secure_cookie = true;
   576 				$secure_cookie = true;
   466 				force_ssl_admin(true);
   577 				force_ssl_admin(true);
   467 			}
   578 			}
   468 		}
   579 		}
   475 			$redirect_to = preg_replace('|^http://|', 'https://', $redirect_to);
   586 			$redirect_to = preg_replace('|^http://|', 'https://', $redirect_to);
   476 	} else {
   587 	} else {
   477 		$redirect_to = admin_url();
   588 		$redirect_to = admin_url();
   478 	}
   589 	}
   479 
   590 
       
   591 	$reauth = empty($_REQUEST['reauth']) ? false : true;
       
   592 
       
   593 	// If the user was redirected to a secure login form from a non-secure admin page, and secure login is required but secure admin is not, then don't use a secure
       
   594 	// cookie and redirect back to the referring non-secure admin page. This allows logins to always be POSTed over SSL while allowing the user to choose visiting
       
   595 	// the admin via http or https.
   480 	if ( !$secure_cookie && is_ssl() && force_ssl_login() && !force_ssl_admin() && ( 0 !== strpos($redirect_to, 'https') ) && ( 0 === strpos($redirect_to, 'http') ) )
   596 	if ( !$secure_cookie && is_ssl() && force_ssl_login() && !force_ssl_admin() && ( 0 !== strpos($redirect_to, 'https') ) && ( 0 === strpos($redirect_to, 'http') ) )
   481 		$secure_cookie = false;
   597 		$secure_cookie = false;
   482 
   598 
   483 	$user = wp_signon('', $secure_cookie);
   599 	$user = wp_signon('', $secure_cookie);
   484 
   600 
   485 	$redirect_to = apply_filters('login_redirect', $redirect_to, isset( $_REQUEST['redirect_to'] ) ? $_REQUEST['redirect_to'] : '', $user);
   601 	$redirect_to = apply_filters('login_redirect', $redirect_to, isset( $_REQUEST['redirect_to'] ) ? $_REQUEST['redirect_to'] : '', $user);
   486 
   602 
   487 	if ( !is_wp_error($user) ) {
   603 	if ( !is_wp_error($user) && !$reauth ) {
   488 		if ( $interim_login ) {
   604 		if ( $interim_login ) {
   489 			$message = '<p class="message">' . __('You have logged in successfully.') . '</p>';
   605 			$message = '<p class="message">' . __('You have logged in successfully.') . '</p>';
   490 			login_header( '', $message ); ?>
   606 			login_header( '', $message ); ?>
       
   607 
       
   608 			<?php if ( ! $customize_login ) : ?>
   491 			<script type="text/javascript">setTimeout( function(){window.close()}, 8000);</script>
   609 			<script type="text/javascript">setTimeout( function(){window.close()}, 8000);</script>
   492 			<p class="alignright">
   610 			<p class="alignright">
   493 			<input type="button" class="button-primary" value="<?php esc_attr_e('Close'); ?>" onclick="window.close()" /></p>
   611 			<input type="button" class="button-primary" value="<?php esc_attr_e('Close'); ?>" onclick="window.close()" /></p>
   494 			</div></body></html>
   612 			<?php endif; ?>
       
   613 			</div>
       
   614 			<?php do_action( 'login_footer' ); ?>
       
   615 			<?php if ( $customize_login ) : ?>
       
   616 				<script type="text/javascript">setTimeout( function(){ new wp.customize.Messenger({ url: '<?php echo wp_customize_url(); ?>', channel: 'login' }).send('login') }, 1000 );</script>
       
   617 			<?php endif; ?>
       
   618 			</body></html>
   495 <?php		exit;
   619 <?php		exit;
   496 		}
   620 		}
   497 		// If the user can't edit posts, send them to their profile.
   621 
   498 		if ( !$user->has_cap('edit_posts') && ( empty( $redirect_to ) || $redirect_to == 'wp-admin/' || $redirect_to == admin_url() ) )
   622 		if ( ( empty( $redirect_to ) || $redirect_to == 'wp-admin/' || $redirect_to == admin_url() ) ) {
   499 			$redirect_to = admin_url('profile.php');
   623 			// If the user doesn't belong to a blog, send them to user admin. If the user can't edit posts, send them to their profile.
       
   624 			if ( is_multisite() && !get_active_blog_for_user($user->ID) && !is_super_admin( $user->ID ) )
       
   625 				$redirect_to = user_admin_url();
       
   626 			elseif ( is_multisite() && !$user->has_cap('read') )
       
   627 				$redirect_to = get_dashboard_url( $user->ID );
       
   628 			elseif ( !$user->has_cap('edit_posts') )
       
   629 				$redirect_to = admin_url('profile.php');
       
   630 		}
   500 		wp_safe_redirect($redirect_to);
   631 		wp_safe_redirect($redirect_to);
   501 		exit();
   632 		exit();
   502 	}
   633 	}
   503 
   634 
   504 	$errors = $user;
   635 	$errors = $user;
   505 	// Clear errors if loggedout is set.
   636 	// Clear errors if loggedout is set.
   506 	if ( !empty($_GET['loggedout']) )
   637 	if ( !empty($_GET['loggedout']) || $reauth )
   507 		$errors = new WP_Error();
   638 		$errors = new WP_Error();
   508 
   639 
   509 	// If cookies are disabled we can't log in even with a valid user+pass
   640 	// If cookies are disabled we can't log in even with a valid user+pass
   510 	if ( isset($_POST['testcookie']) && empty($_COOKIE[TEST_COOKIE]) )
   641 	if ( isset($_POST['testcookie']) && empty($_COOKIE[TEST_COOKIE]) )
   511 		$errors->add('test_cookie', __("<strong>ERROR</strong>: Cookies are blocked or not supported by your browser. You must <a href='http://www.google.com/cookies.html'>enable cookies</a> to use WordPress."));
   642 		$errors->add('test_cookie', __("<strong>ERROR</strong>: Cookies are blocked or not supported by your browser. You must <a href='http://www.google.com/cookies.html'>enable cookies</a> to use WordPress."));
   512 
   643 
   513 	// Some parts of this script use the main login form to display a message
   644 	// Some parts of this script use the main login form to display a message
   514 	if		( isset($_GET['loggedout']) && TRUE == $_GET['loggedout'] )
   645 	if		( isset($_GET['loggedout']) && true == $_GET['loggedout'] )
   515 		$errors->add('loggedout', __('You are now logged out.'), 'message');
   646 		$errors->add('loggedout', __('You are now logged out.'), 'message');
   516 	elseif	( isset($_GET['registration']) && 'disabled' == $_GET['registration'] )
   647 	elseif	( isset($_GET['registration']) && 'disabled' == $_GET['registration'] )
   517 		$errors->add('registerdisabled', __('User registration is currently not allowed.'));
   648 		$errors->add('registerdisabled', __('User registration is currently not allowed.'));
   518 	elseif	( isset($_GET['checkemail']) && 'confirm' == $_GET['checkemail'] )
   649 	elseif	( isset($_GET['checkemail']) && 'confirm' == $_GET['checkemail'] )
   519 		$errors->add('confirm', __('Check your e-mail for the confirmation link.'), 'message');
   650 		$errors->add('confirm', __('Check your e-mail for the confirmation link.'), 'message');
   521 		$errors->add('newpass', __('Check your e-mail for your new password.'), 'message');
   652 		$errors->add('newpass', __('Check your e-mail for your new password.'), 'message');
   522 	elseif	( isset($_GET['checkemail']) && 'registered' == $_GET['checkemail'] )
   653 	elseif	( isset($_GET['checkemail']) && 'registered' == $_GET['checkemail'] )
   523 		$errors->add('registered', __('Registration complete. Please check your e-mail.'), 'message');
   654 		$errors->add('registered', __('Registration complete. Please check your e-mail.'), 'message');
   524 	elseif	( $interim_login )
   655 	elseif	( $interim_login )
   525 		$errors->add('expired', __('Your session has expired. Please log-in again.'), 'message');
   656 		$errors->add('expired', __('Your session has expired. Please log-in again.'), 'message');
       
   657 	elseif ( strpos( $redirect_to, 'about.php?updated' ) )
       
   658 		$errors->add('updated', __( '<strong>You have successfully updated WordPress!</strong> Please log back in to experience the awesomeness.' ), 'message' );
       
   659 
       
   660 	// Clear any stale cookies.
       
   661 	if ( $reauth )
       
   662 		wp_clear_auth_cookie();
   526 
   663 
   527 	login_header(__('Log In'), '', $errors);
   664 	login_header(__('Log In'), '', $errors);
   528 
   665 
   529 	if ( isset($_POST['log']) )
   666 	if ( isset($_POST['log']) )
   530 		$user_login = ( 'incorrect_password' == $errors->get_error_code() || 'empty_password' == $errors->get_error_code() ) ? esc_attr(stripslashes($_POST['log'])) : '';
   667 		$user_login = ( 'incorrect_password' == $errors->get_error_code() || 'empty_password' == $errors->get_error_code() ) ? esc_attr(stripslashes($_POST['log'])) : '';
       
   668 	$rememberme = ! empty( $_POST['rememberme'] );
   531 ?>
   669 ?>
   532 
   670 
   533 <?php if ( !isset($_GET['checkemail']) || !in_array( $_GET['checkemail'], array('confirm', 'newpass') ) ) : ?>
   671 <form name="loginform" id="loginform" action="<?php echo esc_url( site_url( 'wp-login.php', 'login_post' ) ); ?>" method="post">
   534 <form name="loginform" id="loginform" action="<?php echo site_url('wp-login.php', 'login_post') ?>" method="post">
       
   535 	<p>
   672 	<p>
   536 		<label><?php _e('Username') ?><br />
   673 		<label for="user_login"><?php _e('Username') ?><br />
   537 		<input type="text" name="log" id="user_login" class="input" value="<?php echo esc_attr($user_login); ?>" size="20" tabindex="10" /></label>
   674 		<input type="text" name="log" id="user_login" class="input" value="<?php echo esc_attr($user_login); ?>" size="20" tabindex="10" /></label>
   538 	</p>
   675 	</p>
   539 	<p>
   676 	<p>
   540 		<label><?php _e('Password') ?><br />
   677 		<label for="user_pass"><?php _e('Password') ?><br />
   541 		<input type="password" name="pwd" id="user_pass" class="input" value="" size="20" tabindex="20" /></label>
   678 		<input type="password" name="pwd" id="user_pass" class="input" value="" size="20" tabindex="20" /></label>
   542 	</p>
   679 	</p>
   543 <?php do_action('login_form'); ?>
   680 <?php do_action('login_form'); ?>
   544 	<p class="forgetmenot"><label><input name="rememberme" type="checkbox" id="rememberme" value="forever" tabindex="90" /> <?php esc_attr_e('Remember Me'); ?></label></p>
   681 	<p class="forgetmenot"><label for="rememberme"><input name="rememberme" type="checkbox" id="rememberme" value="forever" tabindex="90"<?php checked( $rememberme ); ?> /> <?php esc_attr_e('Remember Me'); ?></label></p>
   545 	<p class="submit">
   682 	<p class="submit">
   546 		<input type="submit" name="wp-submit" id="wp-submit" class="button-primary" value="<?php esc_attr_e('Log In'); ?>" tabindex="100" />
   683 		<input type="submit" name="wp-submit" id="wp-submit" class="button-primary" value="<?php esc_attr_e('Log In'); ?>" tabindex="100" />
   547 <?php	if ( $interim_login ) { ?>
   684 <?php	if ( $interim_login ) { ?>
   548 		<input type="hidden" name="interim-login" value="1" />
   685 		<input type="hidden" name="interim-login" value="1" />
   549 <?php	} else { ?>
   686 <?php	} else { ?>
   550 		<input type="hidden" name="redirect_to" value="<?php echo esc_attr($redirect_to); ?>" />
   687 		<input type="hidden" name="redirect_to" value="<?php echo esc_attr($redirect_to); ?>" />
   551 <?php 	} ?>
   688 <?php 	} ?>
       
   689 <?php   if ( $customize_login ) : ?>
       
   690 		<input type="hidden" name="customize-login" value="1" />
       
   691 <?php   endif; ?>
   552 		<input type="hidden" name="testcookie" value="1" />
   692 		<input type="hidden" name="testcookie" value="1" />
   553 	</p>
   693 	</p>
   554 </form>
   694 </form>
   555 <?php endif; ?>
       
   556 
   695 
   557 <?php if ( !$interim_login ) { ?>
   696 <?php if ( !$interim_login ) { ?>
   558 <p id="nav">
   697 <p id="nav">
   559 <?php if ( isset($_GET['checkemail']) && in_array( $_GET['checkemail'], array('confirm', 'newpass') ) ) : ?>
   698 <?php if ( isset($_GET['checkemail']) && in_array( $_GET['checkemail'], array('confirm', 'newpass') ) ) : ?>
   560 <?php elseif (get_option('users_can_register')) : ?>
   699 <?php elseif ( get_option('users_can_register') ) : ?>
   561 <a href="<?php echo site_url('wp-login.php?action=register', 'login') ?>"><?php _e('Register') ?></a> |
   700 <a href="<?php echo esc_url( site_url( 'wp-login.php?action=register', 'login' ) ); ?>"><?php _e( 'Register' ); ?></a> |
   562 <a href="<?php echo site_url('wp-login.php?action=lostpassword', 'login') ?>" title="<?php _e('Password Lost and Found') ?>"><?php _e('Lost your password?') ?></a>
   701 <a href="<?php echo esc_url( wp_lostpassword_url() ); ?>" title="<?php esc_attr_e( 'Password Lost and Found' ); ?>"><?php _e( 'Lost your password?' ); ?></a>
   563 <?php else : ?>
   702 <?php else : ?>
   564 <a href="<?php echo site_url('wp-login.php?action=lostpassword', 'login') ?>" title="<?php _e('Password Lost and Found') ?>"><?php _e('Lost your password?') ?></a>
   703 <a href="<?php echo esc_url( wp_lostpassword_url() ); ?>" title="<?php esc_attr_e( 'Password Lost and Found' ); ?>"><?php _e( 'Lost your password?' ); ?></a>
   565 <?php endif; ?>
   704 <?php endif; ?>
   566 </p>
   705 </p>
   567 
       
   568 <p id="backtoblog"><a href="<?php bloginfo('url'); ?>/" title="<?php _e('Are you lost?') ?>"><?php printf(__('&larr; Back to %s'), get_bloginfo('title', 'display' )); ?></a></p>
       
   569 <?php } ?>
   706 <?php } ?>
   570 </div>
       
   571 
   707 
   572 <script type="text/javascript">
   708 <script type="text/javascript">
       
   709 function wp_attempt_focus(){
       
   710 setTimeout( function(){ try{
   573 <?php if ( $user_login || $interim_login ) { ?>
   711 <?php if ( $user_login || $interim_login ) { ?>
   574 setTimeout( function(){ try{
       
   575 d = document.getElementById('user_pass');
   712 d = document.getElementById('user_pass');
   576 d.value = '';
   713 d.value = '';
       
   714 <?php } else { ?>
       
   715 d = document.getElementById('user_login');
       
   716 <?php if ( 'invalid_username' == $errors->get_error_code() ) { ?>
       
   717 if( d.value != '' )
       
   718 d.value = '';
       
   719 <?php
       
   720 }
       
   721 }?>
   577 d.focus();
   722 d.focus();
       
   723 d.select();
   578 } catch(e){}
   724 } catch(e){}
   579 }, 200);
   725 }, 200);
   580 <?php } else { ?>
   726 }
   581 try{document.getElementById('user_login').focus();}catch(e){}
   727 
       
   728 <?php if ( !$error ) { ?>
       
   729 wp_attempt_focus();
   582 <?php } ?>
   730 <?php } ?>
       
   731 if(typeof wpOnload=='function')wpOnload();
   583 </script>
   732 </script>
   584 </body>
   733 
   585 </html>
       
   586 <?php
   734 <?php
   587 
   735 login_footer();
   588 break;
   736 break;
   589 } // end action switch
   737 } // end action switch
   590 ?>