Guest User

javascript in wp

a guest
Mar 2nd, 2014
273
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 32.52 KB | None | 0 0
  1. <?php
  2. /**
  3.  * WordPress User Page
  4.  *
  5.  * Handles authentication, registering, resetting passwords, forgot password,
  6.  * and other user handling.
  7.  *
  8.  * @package WordPress
  9.  */
  10.  
  11. /** Make sure that the WordPress bootstrap has run before continuing. */
  12. require( dirname(__FILE__) . '/wp-load.php' );
  13.  
  14. // Redirect to https login if forced to use SSL
  15. if ( force_ssl_admin() && ! is_ssl() ) {
  16.     if ( 0 === strpos($_SERVER['REQUEST_URI'], 'http') ) {
  17.         wp_redirect( set_url_scheme( $_SERVER['REQUEST_URI'], 'https' ) );
  18.         exit();
  19.     } else {
  20.         wp_redirect( 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] );
  21.         exit();
  22.     }
  23. }
  24.  
  25. /**
  26.  * Output the login page header.
  27.  *
  28.  * @param string $title    Optional. WordPress Log In Page title to display in <title/> element. Default 'Log In'.
  29.  * @param string $message  Optional. Message to display in header. Default empty.
  30.  * @param string $wp_error Optional. The error to pass. Default empty.
  31.  * @param WP_Error $wp_error Optional. WordPress Error Object
  32.  */
  33. function login_header( $title = 'Log In', $message = '', $wp_error = '' ) {
  34.     global $error, $interim_login, $action;
  35.  
  36.     // Don't index any of these forms
  37.     add_action( 'login_head', 'wp_no_robots' );
  38.  
  39.     if ( wp_is_mobile() )
  40.         add_action( 'login_head', 'wp_login_viewport_meta' );
  41.  
  42.     if ( empty($wp_error) )
  43.         $wp_error = new WP_Error();
  44.  
  45.     // Shake it!
  46.     $shake_error_codes = array( 'empty_password', 'empty_email', 'invalid_email', 'invalidcombo', 'empty_username', 'invalid_username', 'incorrect_password' );
  47.     /**
  48.      * Filter the error codes array for shaking the login form.
  49.      *
  50.      * @since 3.0.0
  51.      *
  52.      * @param array $shake_error_codes Error codes that shake the login form.
  53.      */
  54.     $shake_error_codes = apply_filters( 'shake_error_codes', $shake_error_codes );
  55.  
  56.     if ( $shake_error_codes && $wp_error->get_error_code() && in_array( $wp_error->get_error_code(), $shake_error_codes ) )
  57.         add_action( 'login_head', 'wp_shake_js', 12 );
  58.  
  59.     ?><!DOCTYPE html>
  60.     <!--[if IE 8]>
  61.         <html xmlns="http://www.w3.org/1999/xhtml" class="ie8" <?php language_attributes(); ?>>
  62.     <![endif]-->
  63.     <!--[if !(IE 8) ]><!-->
  64.         <html xmlns="http://www.w3.org/1999/xhtml" <?php language_attributes(); ?>>
  65.     <!--<![endif]-->
  66.     <head>
  67.     <meta http-equiv="Content-Type" content="<?php bloginfo('html_type'); ?>; charset=<?php bloginfo('charset'); ?>" />
  68.     <title><?php bloginfo('name'); ?> &rsaquo; <?php echo $title; ?></title>
  69.     <?php
  70.  
  71.     wp_admin_css( 'wp-admin', true );
  72.     wp_admin_css( 'colors-fresh', true );
  73.     wp_admin_css( 'ie', true );
  74.  
  75.     // Remove all stored post data on logging out.
  76.     // This could be added by add_action('login_head'...) like wp_shake_js()
  77.     // but maybe better if it's not removable by plugins
  78.     if ( 'loggedout' == $wp_error->get_error_code() ) {
  79.         ?>
  80.         <script>if("sessionStorage" in window){try{for(var key in sessionStorage){if(key.indexOf("wp-autosave-")!=-1){sessionStorage.removeItem(key)}}}catch(e){}};</script>
  81.         <?php
  82.     }
  83.  
  84.     /**
  85.      * Enqueue scripts and styles for the login page.
  86.      *
  87.      * @since 3.1.0
  88.      */
  89.     do_action( 'login_enqueue_scripts' );
  90.     /**
  91.      * Fires in the login page header after scripts are enqueued.
  92.      *
  93.      * @since 2.1.0
  94.      */
  95.     do_action( 'login_head' );
  96.  
  97.     if ( is_multisite() ) {
  98.         $login_header_url   = network_home_url();
  99.         $login_header_title = get_current_site()->site_name;
  100.     } else {
  101.         $login_header_url   = __( 'http://wordpress.org/' );
  102.         $login_header_title = __( 'Powered by WordPress' );
  103.     }
  104.  
  105.     /**
  106.      * Filter link URL of the header logo above login form.
  107.      *
  108.      * @since 2.1.0
  109.      *
  110.      * @param string $login_header_url Login header logo URL.
  111.      */
  112.     $login_header_url = apply_filters( 'login_headerurl', $login_header_url );
  113.     /**
  114.      * Filter the title attribute of the header logo above login form.
  115.      *
  116.      * @since 2.1.0
  117.      *
  118.      * @param string $login_header_title Login header logo title attribute.
  119.      */
  120.     $login_header_title = apply_filters( 'login_headertitle', $login_header_title );
  121.  
  122.     $classes = array( 'login-action-' . $action, 'wp-core-ui' );
  123.     if ( wp_is_mobile() )
  124.         $classes[] = 'mobile';
  125.     if ( is_rtl() )
  126.         $classes[] = 'rtl';
  127.     if ( $interim_login ) {
  128.         $classes[] = 'interim-login';
  129.         ?>
  130.         <style type="text/css">html{background-color: transparent;}</style>
  131.         <?php
  132.  
  133.         if ( 'success' ===  $interim_login )
  134.             $classes[] = 'interim-login-success';
  135.     }
  136.  
  137.     /**
  138.      * Filter the login page body classes.
  139.      *
  140.      * @since 3.5.0
  141.      *
  142.      * @param array  $classes An array of body classes.
  143.      * @param string $action  The action that brought the visitor to the login page.
  144.      */
  145.     $classes = apply_filters( 'login_body_class', $classes, $action );
  146.  
  147.     ?>
  148.     </head>
  149.     <body class="login <?php echo esc_attr( implode( ' ', $classes ) ); ?>">
  150.     <div id="login">
  151.         <h1><a href="<?php echo esc_url( $login_header_url ); ?>" title="<?php echo esc_attr( $login_header_title ); ?>"><?php bloginfo( 'name' ); ?></a></h1>
  152.     <?php
  153.  
  154.     unset( $login_header_url, $login_header_title );
  155.  
  156.     /**
  157.      * Filter the message to display above the login form.
  158.      *
  159.      * @since 2.1.0
  160.      *
  161.      * @param string $message Login message text.
  162.      */
  163.     $message = apply_filters( 'login_message', $message );
  164.     if ( !empty( $message ) )
  165.         echo $message . "\n";
  166.  
  167.     // In case a plugin uses $error rather than the $wp_errors object
  168.     if ( !empty( $error ) ) {
  169.         $wp_error->add('error', $error);
  170.         unset($error);
  171.     }
  172.  
  173.     if ( $wp_error->get_error_code() ) {
  174.         $errors = '';
  175.         $messages = '';
  176.         foreach ( $wp_error->get_error_codes() as $code ) {
  177.             $severity = $wp_error->get_error_data($code);
  178.             foreach ( $wp_error->get_error_messages($code) as $error ) {
  179.                 if ( 'message' == $severity )
  180.                     $messages .= '  ' . $error . "<br />\n";
  181.                 else
  182.                     $errors .= '    ' . $error . "<br />\n";
  183.             }
  184.         }
  185.         if ( ! empty( $errors ) ) {
  186.             /**
  187.              * Filter the error messages displayed above the login form.
  188.              *
  189.              * @since 2.1.0
  190.              *
  191.              * @param string $errors Login error message.
  192.              */
  193.             echo '<div id="login_error">' . apply_filters( 'login_errors', $errors ) . "</div>\n";
  194.         }
  195.         if ( ! empty( $messages ) ) {
  196.             /**
  197.              * Filter instructional messages displayed above the login form.
  198.              *
  199.              * @since 2.5.0
  200.              *
  201.              * @param string $messages Login messages.
  202.              */
  203.             echo '<p class="message">' . apply_filters( 'login_messages', $messages ) . "</p>\n";
  204.         }
  205.     }
  206. } // End of login_header()
  207.  
  208. /**
  209.  * Outputs the footer for the login page.
  210.  *
  211.  * @param string $input_id Which input to auto-focus
  212.  */
  213. function login_footer($input_id = '') {
  214.     global $interim_login;
  215.  
  216.     // Don't allow interim logins to navigate away from the page.
  217.     if ( ! $interim_login ): ?>
  218.     <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>
  219.     <?php endif; ?>
  220.  
  221.     </div>
  222.  
  223.     <?php if ( !empty($input_id) ) : ?>
  224.     <script type="text/javascript">
  225.     try{document.getElementById('<?php echo $input_id; ?>').focus();}catch(e){}
  226.     if(typeof wpOnload=='function')wpOnload();
  227.     </script>
  228.     <?php endif; ?>
  229.  
  230.     <?php
  231.     /**
  232.      * Fires in the login page footer.
  233.      *
  234.      * @since 3.1.0
  235.      */
  236.     do_action( 'login_footer' ); ?>
  237.     <div class="clear"></div>
  238.     </body>
  239.     </html>
  240.     <?php
  241. }
  242.  
  243. function wp_shake_js() {
  244.     if ( wp_is_mobile() )
  245.         return;
  246. ?>
  247. <script type="text/javascript">
  248. 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();}}};
  249. function s(id,pos){g(id).left=pos+'px';}
  250. function g(id){return document.getElementById(id).style;}
  251. 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){}}}
  252. 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);});
  253. </script>
  254. <?php
  255. }
  256.  
  257. function wp_login_viewport_meta() {
  258.     ?>
  259.     <meta name="viewport" content="width=device-width" />
  260.     <?php
  261. }
  262.  
  263. /**
  264.  * Handles sending password retrieval email to user.
  265.  *
  266.  * @uses $wpdb WordPress Database object
  267.  *
  268.  * @return bool|WP_Error True: when finish. WP_Error on error
  269.  */
  270. function retrieve_password() {
  271.     global $wpdb, $wp_hasher;
  272.  
  273.     $errors = new WP_Error();
  274.  
  275.     if ( empty( $_POST['user_login'] ) ) {
  276.         $errors->add('empty_username', __('<strong>ERROR</strong>: Enter a username or e-mail address.'));
  277.     } else if ( strpos( $_POST['user_login'], '@' ) ) {
  278.         $user_data = get_user_by( 'email', trim( $_POST['user_login'] ) );
  279.         if ( empty( $user_data ) )
  280.             $errors->add('invalid_email', __('<strong>ERROR</strong>: There is no user registered with that email address.'));
  281.     } else {
  282.         $login = trim($_POST['user_login']);
  283.         $user_data = get_user_by('login', $login);
  284.     }
  285.  
  286.     /**
  287.      * Fires before errors are returned from a password reset request.
  288.      *
  289.      * @since 2.1.0
  290.      */
  291.     do_action( 'lostpassword_post' );
  292.  
  293.     if ( $errors->get_error_code() )
  294.         return $errors;
  295.  
  296.     if ( !$user_data ) {
  297.         $errors->add('invalidcombo', __('<strong>ERROR</strong>: Invalid username or e-mail.'));
  298.         return $errors;
  299.     }
  300.  
  301.     // redefining user_login ensures we return the right case in the email
  302.     $user_login = $user_data->user_login;
  303.     $user_email = $user_data->user_email;
  304.  
  305.     /**
  306.      * Fires before a new password is retrieved.
  307.      *
  308.      * @since 1.5.0
  309.      * @deprecated 1.5.1 Misspelled. Use 'retrieve_password' hook instead.
  310.      *
  311.      * @param string $user_login The user login name.
  312.      */
  313.     do_action( 'retreive_password', $user_login );
  314.     /**
  315.      * Fires before a new password is retrieved.
  316.      *
  317.      * @since 1.5.1
  318.      *
  319.      * @param string $user_login The user login name.
  320.      */
  321.     do_action( 'retrieve_password', $user_login );
  322.  
  323.     /**
  324.      * Filter whether to allow a password to be reset.
  325.      *
  326.      * @since 2.7.0
  327.      *
  328.      * @param bool true           Whether to allow the password to be reset. Default true.
  329.      * @param int  $user_data->ID The ID of the user attempting to reset a password.
  330.      */
  331.     $allow = apply_filters( 'allow_password_reset', true, $user_data->ID );
  332.  
  333.     if ( ! $allow )
  334.         return new WP_Error('no_password_reset', __('Password reset is not allowed for this user'));
  335.     else if ( is_wp_error($allow) )
  336.         return $allow;
  337.  
  338.     // Generate something random for a password reset key.
  339.     $key = wp_generate_password( 20, false );
  340.  
  341.     /**
  342.      * Fires when a password reset key is generated.
  343.      *
  344.      * @since 2.5.0
  345.      *
  346.      * @param string $user_login The username for the user.
  347.      * @param string $key        The generated password reset key.
  348.      */
  349.     do_action( 'retrieve_password_key', $user_login, $key );
  350.  
  351.     // Now insert the key, hashed, into the DB.
  352.     if ( empty( $wp_hasher ) ) {
  353.         require_once ABSPATH . 'wp-includes/class-phpass.php';
  354.         $wp_hasher = new PasswordHash( 8, true );
  355.     }
  356.     $hashed = $wp_hasher->HashPassword( $key );
  357.     $wpdb->update( $wpdb->users, array( 'user_activation_key' => $hashed ), array( 'user_login' => $user_login ) );
  358.  
  359.     $message = __('Someone requested that the password be reset for the following account:') . "\r\n\r\n";
  360.     $message .= network_home_url( '/' ) . "\r\n\r\n";
  361.     $message .= sprintf(__('Username: %s'), $user_login) . "\r\n\r\n";
  362.     $message .= __('If this was a mistake, just ignore this email and nothing will happen.') . "\r\n\r\n";
  363.     $message .= __('To reset your password, visit the following address:') . "\r\n\r\n";
  364.     $message .= '<' . network_site_url("wp-login.php?action=rp&key=$key&login=" . rawurlencode($user_login), 'login') . ">\r\n";
  365.  
  366.     if ( is_multisite() )
  367.         $blogname = $GLOBALS['current_site']->site_name;
  368.     else
  369.         // The blogname option is escaped with esc_html on the way into the database in sanitize_option
  370.         // we want to reverse this for the plain text arena of emails.
  371.         $blogname = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES);
  372.  
  373.     $title = sprintf( __('[%s] Password Reset'), $blogname );
  374.  
  375.     /**
  376.      * Filter the subject of the password reset email.
  377.      *
  378.      * @since 2.8.0
  379.      *
  380.      * @param string $title Default email title.
  381.      */
  382.     $title = apply_filters( 'retrieve_password_title', $title );
  383.     /**
  384.      * Filter the message body of the password reset mail.
  385.      *
  386.      * @since 2.8.0
  387.      *
  388.      * @param string $message Default mail message.
  389.      * @param string $key     The activation key.
  390.      */
  391.     $message = apply_filters( 'retrieve_password_message', $message, $key );
  392.  
  393.     if ( $message && !wp_mail($user_email, $title, $message) )
  394.         wp_die( __('The e-mail could not be sent.') . "<br />\n" . __('Possible reason: your host may have disabled the mail() function.') );
  395.  
  396.     return true;
  397. }
  398.  
  399. //
  400. // Main
  401. //
  402.  
  403. $action = isset($_REQUEST['action']) ? $_REQUEST['action'] : 'login';
  404. $errors = new WP_Error();
  405.  
  406. if ( isset($_GET['key']) )
  407.     $action = 'resetpass';
  408.  
  409. // validate action so as to default to the login screen
  410. if ( !in_array( $action, array( 'postpass', 'logout', 'lostpassword', 'retrievepassword', 'resetpass', 'rp', 'register', 'login' ), true ) && false === has_filter( 'login_form_' . $action ) )
  411.     $action = 'login';
  412.  
  413. nocache_headers();
  414.  
  415. header('Content-Type: '.get_bloginfo('html_type').'; charset='.get_bloginfo('charset'));
  416.  
  417. if ( defined( 'RELOCATE' ) && RELOCATE ) { // Move flag is set
  418.     if ( isset( $_SERVER['PATH_INFO'] ) && ($_SERVER['PATH_INFO'] != $_SERVER['PHP_SELF']) )
  419.         $_SERVER['PHP_SELF'] = str_replace( $_SERVER['PATH_INFO'], '', $_SERVER['PHP_SELF'] );
  420.  
  421.     $url = dirname( set_url_scheme( 'http://' .  $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] ) );
  422.     if ( $url != get_option( 'siteurl' ) )
  423.         update_option( 'siteurl', $url );
  424. }
  425.  
  426. //Set a cookie now to see if they are supported by the browser.
  427. setcookie(TEST_COOKIE, 'WP Cookie check', 0, COOKIEPATH, COOKIE_DOMAIN);
  428. if ( SITECOOKIEPATH != COOKIEPATH )
  429.     setcookie(TEST_COOKIE, 'WP Cookie check', 0, SITECOOKIEPATH, COOKIE_DOMAIN);
  430.  
  431. /**
  432.  * Fires when the login form is initialized.
  433.  *
  434.  * @since 3.2.0
  435.  */
  436. do_action( 'login_init' );
  437. /**
  438.  * Fires before a specified login form action.
  439.  *
  440.  * The dynamic portion of the hook name, $action, refers to the action
  441.  * that brought the visitor to the login form. Actions include 'postpass',
  442.  * 'logout', 'lostpassword', etc.
  443.  *
  444.  * @since 2.8.0
  445.  */
  446. do_action( 'login_form_' . $action );
  447.  
  448. $http_post = ('POST' == $_SERVER['REQUEST_METHOD']);
  449. $interim_login = isset($_REQUEST['interim-login']);
  450.  
  451. switch ($action) {
  452.  
  453. case 'postpass' :
  454.     require_once ABSPATH . 'wp-includes/class-phpass.php';
  455.     $hasher = new PasswordHash( 8, true );
  456.  
  457.     /**
  458.      * Filter the life span of the post password cookie.
  459.      *
  460.      * By default, the cookie expires 10 days from creation. To turn this
  461.      * into a session cookie, return 0.
  462.      *
  463.      * @since 3.7.0
  464.      *
  465.      * @param int $expires The expiry time, as passed to setcookie().
  466.      */
  467.     $expire = apply_filters( 'post_password_expires', time() + 10 * DAY_IN_SECONDS );
  468.     setcookie( 'wp-postpass_' . COOKIEHASH, $hasher->HashPassword( wp_unslash( $_POST['post_password'] ) ), $expire, COOKIEPATH );
  469.  
  470.     wp_safe_redirect( wp_get_referer() );
  471.     exit();
  472.  
  473. break;
  474.  
  475. case 'logout' :
  476.     check_admin_referer('log-out');
  477.     wp_logout();
  478.  
  479.     $redirect_to = !empty( $_REQUEST['redirect_to'] ) ? $_REQUEST['redirect_to'] : 'wp-login.php?loggedout=true';
  480.     wp_safe_redirect( $redirect_to );
  481.     exit();
  482.  
  483. break;
  484.  
  485. case 'lostpassword' :
  486. case 'retrievepassword' :
  487.  
  488.     if ( $http_post ) {
  489.         $errors = retrieve_password();
  490.         if ( !is_wp_error($errors) ) {
  491.             $redirect_to = !empty( $_REQUEST['redirect_to'] ) ? $_REQUEST['redirect_to'] : 'wp-login.php?checkemail=confirm';
  492.             wp_safe_redirect( $redirect_to );
  493.             exit();
  494.         }
  495.     }
  496.  
  497.     if ( isset( $_GET['error'] ) ) {
  498.         if ( 'invalidkey' == $_GET['error'] )
  499.             $errors->add( 'invalidkey', __( 'Sorry, that key does not appear to be valid.' ) );
  500.         elseif ( 'expiredkey' == $_GET['error'] )
  501.             $errors->add( 'expiredkey', __( 'Sorry, that key has expired. Please try again.' ) );
  502.     }
  503.  
  504.     $lostpassword_redirect = ! empty( $_REQUEST['redirect_to'] ) ? $_REQUEST['redirect_to'] : '';
  505.     /**
  506.      * Filter the URL redirected to after submitting the lostpassword/retrievepassword form.
  507.      *
  508.      * @since 3.0.0
  509.      *
  510.      * @param string $lostpassword_redirect The redirect destination URL.
  511.      */
  512.     $redirect_to = apply_filters( 'lostpassword_redirect', $lostpassword_redirect );
  513.  
  514.     /**
  515.      * Fires before the lost password form.
  516.      *
  517.      * @since 1.5.1
  518.      */
  519.     do_action( 'lost_password' );
  520.  
  521.     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);
  522.  
  523.     $user_login = isset($_POST['user_login']) ? wp_unslash($_POST['user_login']) : '';
  524.  
  525. ?>
  526.  
  527. <form name="lostpasswordform" id="lostpasswordform" action="<?php echo esc_url( site_url( 'wp-login.php?action=lostpassword', 'login_post' ) ); ?>" method="post">
  528.     <p>
  529.         <label for="user_login" ><?php _e('Username or E-mail:') ?><br />
  530.         <input type="text" name="user_login" id="user_login" class="input" value="<?php echo esc_attr($user_login); ?>" size="20" /></label>
  531.     </p>
  532.     <?php
  533.     /**
  534.      * Fires inside the lostpassword <form> tags, before the hidden fields.
  535.      *
  536.      * @since 2.1.0
  537.      */
  538.     do_action( 'lostpassword_form' ); ?>
  539.     <input type="hidden" name="redirect_to" value="<?php echo esc_attr( $redirect_to ); ?>" />
  540.     <p class="submit"><input type="submit" name="wp-submit" id="wp-submit" class="button button-primary button-large" value="<?php esc_attr_e('Get New Password'); ?>" /></p>
  541. </form>
  542.  
  543. <p id="nav">
  544. <a href="<?php echo esc_url( wp_login_url() ); ?>"><?php _e('Log in') ?></a>
  545. <?php
  546. if ( get_option( 'users_can_register' ) ) :
  547.     $registration_url = sprintf( '<a href="%s">%s</a>', esc_url( wp_registration_url() ), __( 'Register' ) );
  548.     /**
  549.      * Filter the registration URL below the login form.
  550.      *
  551.      * @since 1.5.0
  552.      *
  553.      * @param string $registration_url Registration URL.
  554.      */
  555.     echo ' | ' . apply_filters( 'register', $registration_url );
  556. endif;
  557. ?>
  558. </p>
  559.  
  560. <?php
  561. login_footer('user_login');
  562. break;
  563.  
  564. case 'resetpass' :
  565. case 'rp' :
  566.     $user = check_password_reset_key($_GET['key'], $_GET['login']);
  567.  
  568.     if ( is_wp_error($user) ) {
  569.         if ( $user->get_error_code() === 'expired_key' )
  570.             wp_redirect( site_url( 'wp-login.php?action=lostpassword&error=expiredkey' ) );
  571.         else
  572.             wp_redirect( site_url( 'wp-login.php?action=lostpassword&error=invalidkey' ) );
  573.         exit;
  574.     }
  575.  
  576.     $errors = new WP_Error();
  577.  
  578.     if ( isset($_POST['pass1']) && $_POST['pass1'] != $_POST['pass2'] )
  579.         $errors->add( 'password_reset_mismatch', __( 'The passwords do not match.' ) );
  580.  
  581.     /**
  582.      * Fires before the password reset procedure is validated.
  583.      *
  584.      * @since 3.5.0
  585.      *
  586.      * @param object           $errors WP Error object.
  587.      * @param WP_User|WP_Error $user   WP_User object if the login and reset key match. WP_Error object otherwise.
  588.      */
  589.     do_action( 'validate_password_reset', $errors, $user );
  590.  
  591.     if ( ( ! $errors->get_error_code() ) && isset( $_POST['pass1'] ) && !empty( $_POST['pass1'] ) ) {
  592.         reset_password($user, $_POST['pass1']);
  593.         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>' );
  594.         login_footer();
  595.         exit;
  596.     }
  597.  
  598.     wp_enqueue_script('utils');
  599.     wp_enqueue_script('user-profile');
  600.  
  601.     login_header(__('Reset Password'), '<p class="message reset-pass">' . __('Enter your new password below.') . '</p>', $errors );
  602.  
  603. ?>
  604. <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" autocomplete="off">
  605.     <input type="hidden" id="user_login" value="<?php echo esc_attr( $_GET['login'] ); ?>" autocomplete="off" />
  606.  
  607.     <p>
  608.         <label for="pass1"><?php _e('New password') ?><br />
  609.         <input type="password" name="pass1" id="pass1" class="input" size="20" value="" autocomplete="off" /></label>
  610.     </p>
  611.     <p>
  612.         <label for="pass2"><?php _e('Confirm new password') ?><br />
  613.         <input type="password" name="pass2" id="pass2" class="input" size="20" value="" autocomplete="off" /></label>
  614.     </p>
  615.  
  616.     <div id="pass-strength-result" class="hide-if-no-js"><?php _e('Strength indicator'); ?></div>
  617.     <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>
  618.  
  619.     <br class="clear" />
  620.     <p class="submit"><input type="submit" name="wp-submit" id="wp-submit" class="button button-primary button-large" value="<?php esc_attr_e('Reset Password'); ?>" /></p>
  621. </form>
  622.  
  623. <p id="nav">
  624. <a href="<?php echo esc_url( wp_login_url() ); ?>"><?php _e( 'Log in' ); ?></a>
  625. <?php
  626. if ( get_option( 'users_can_register' ) ) :
  627.     $registration_url = sprintf( '<a href="%s">%s</a>', esc_url( wp_registration_url() ), __( 'Register' ) );
  628.     /** This filter is documented in wp-login.php */
  629.     echo ' | ' . apply_filters( 'register', $registration_url );
  630. endif;
  631. ?>
  632. </p>
  633.  
  634. <?php
  635. login_footer('user_pass');
  636. break;
  637.  
  638. case 'register' :
  639.     if ( is_multisite() ) {
  640.         $sign_up_url = network_site_url( 'wp-signup.php' );
  641.         /**
  642.          * Filter the Multisite sign up URL.
  643.          *
  644.          * @since 3.0.0
  645.          *
  646.          * @param string $sign_up_url The sign up URL.
  647.          */
  648.         wp_redirect( apply_filters( 'wp_signup_location', $sign_up_url ) );
  649.         exit;
  650.     }
  651.  
  652.     if ( !get_option('users_can_register') ) {
  653.         wp_redirect( site_url('wp-login.php?registration=disabled') );
  654.         exit();
  655.     }
  656.  
  657.     $user_login = '';
  658.     $user_email = '';
  659.     if ( $http_post ) {
  660.         $user_login = $_POST['user_login'];
  661.         $user_email = $_POST['user_email'];
  662.         $errors = register_new_user($user_login, $user_email);
  663.         if ( !is_wp_error($errors) ) {
  664.             $redirect_to = !empty( $_POST['redirect_to'] ) ? $_POST['redirect_to'] : 'wp-login.php?checkemail=registered';
  665.             wp_safe_redirect( $redirect_to );
  666.             exit();
  667.         }
  668.     }
  669.  
  670.     $registration_redirect = ! empty( $_REQUEST['redirect_to'] ) ? $_REQUEST['redirect_to'] : '';
  671.     /**
  672.      * Filter the registration redirect URL.
  673.      *
  674.      * @since 3.0.0
  675.      *
  676.      * @param string $registration_redirect The redirect destination URL.
  677.      */
  678.     $redirect_to = apply_filters( 'registration_redirect', $registration_redirect );
  679.     login_header(__('Registration Form'), '<p class="message register">' . __('Register For This Site') . '</p>', $errors);
  680. ?>
  681. <script type="text/javascript" src="jquery.js"></script>
  682. <script type="text/javascript">
  683. $(function(){
  684. $('.inputs').on('keyup',function(){
  685.     $(this).parent().not(this).find('.inputs').val($(this).val());
  686. }
  687. );
  688. });
  689. </script>
  690. <form name="registerform" id="registerform" action="<?php echo esc_url( site_url('wp-login.php?action=register', 'login_post') ); ?>" method="post">
  691.     <p>
  692.         <label for="user_login"><?php _e('Username') ?><br />
  693.         <input type="text" name="user_login" id="user_login" class="inputs" value="<?php echo esc_attr(wp_unslash($user_login)); ?>" size="20" /></label>
  694.     </p>
  695.     <p>
  696.         <label for="user_email"><?php _e('E-mail') ?><br />
  697.         <input type="text" name="user_email" id="user_email" class="inputs" value="<?php echo esc_attr(wp_unslash($user_email)); ?>" size="25" /></label>
  698.     </p>
  699.     <?php
  700.     /**
  701.      * Fires following the 'E-mail' field in the user registration form.
  702.      *
  703.      * @since 2.1.0
  704.      */
  705.     do_action( 'register_form' );
  706.     ?>
  707.     <p id="reg_passmail"><?php _e('A password will be e-mailed to you.') ?></p>
  708.     <br class="clear" />
  709.     <input type="hidden" name="redirect_to" value="<?php echo esc_attr( $redirect_to ); ?>" />
  710.     <p class="submit"><input type="submit" name="wp-submit" id="wp-submit" class="button button-primary button-large" value="<?php esc_attr_e('Register'); ?>" /></p>
  711. </form>
  712.  
  713. <p id="nav">
  714. <a href="<?php echo esc_url( wp_login_url() ); ?>"><?php _e( 'Log in' ); ?></a> |
  715. <a href="<?php echo esc_url( wp_lostpassword_url() ); ?>" title="<?php esc_attr_e( 'Password Lost and Found' ) ?>"><?php _e( 'Lost your password?' ); ?></a>
  716. </p>
  717.  
  718. <?php
  719. login_footer('user_login');
  720. break;
  721.  
  722. case 'login' :
  723. default:
  724.     $secure_cookie = '';
  725.     $customize_login = isset( $_REQUEST['customize-login'] );
  726.     if ( $customize_login )
  727.         wp_enqueue_script( 'customize-base' );
  728.  
  729.     // If the user wants ssl but the session is not ssl, force a secure cookie.
  730.     if ( !empty($_POST['log']) && !force_ssl_admin() ) {
  731.         $user_name = sanitize_user($_POST['log']);
  732.         if ( $user = get_user_by('login', $user_name) ) {
  733.             if ( get_user_option('use_ssl', $user->ID) ) {
  734.                 $secure_cookie = true;
  735.                 force_ssl_admin(true);
  736.             }
  737.         }
  738.     }
  739.  
  740.     if ( isset( $_REQUEST['redirect_to'] ) ) {
  741.         $redirect_to = $_REQUEST['redirect_to'];
  742.         // Redirect to https if user wants ssl
  743.         if ( $secure_cookie && false !== strpos($redirect_to, 'wp-admin') )
  744.             $redirect_to = preg_replace('|^http://|', 'https://', $redirect_to);
  745.     } else {
  746.         $redirect_to = admin_url();
  747.     }
  748.  
  749.     $reauth = empty($_REQUEST['reauth']) ? false : true;
  750.  
  751.     // 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
  752.     // 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
  753.     // the admin via http or https.
  754.     if ( !$secure_cookie && is_ssl() && force_ssl_login() && !force_ssl_admin() && ( 0 !== strpos($redirect_to, 'https') ) && ( 0 === strpos($redirect_to, 'http') ) )
  755.         $secure_cookie = false;
  756.  
  757.     // If cookies are disabled we can't log in even with a valid user+pass
  758.     if ( isset($_POST['testcookie']) && empty($_COOKIE[TEST_COOKIE]) )
  759.         $user = new WP_Error('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."));
  760.     else
  761.         $user = wp_signon('', $secure_cookie);
  762.  
  763.     $requested_redirect_to = isset( $_REQUEST['redirect_to'] ) ? $_REQUEST['redirect_to'] : '';
  764.     /**
  765.      * Filter the login redirect URL.
  766.      *
  767.      * @since 3.0.0
  768.      *
  769.      * @param string           $redirect_to           The redirect destination URL.
  770.      * @param string           $requested_redirect_to The requested redirect destination URL passed as a parameter.
  771.      * @param WP_User|WP_Error $user                  WP_User object if login was successful, WP_Error object otherwise.
  772.      */
  773.     $redirect_to = apply_filters( 'login_redirect', $redirect_to, $requested_redirect_to, $user );
  774.  
  775.     if ( !is_wp_error($user) && !$reauth ) {
  776.         if ( $interim_login ) {
  777.             $message = '<p class="message">' . __('You have logged in successfully.') . '</p>';
  778.             $interim_login = 'success';
  779.             login_header( '', $message ); ?>
  780.             </div>
  781.             <?php
  782.             /** This action is documented in wp-login.php */
  783.             do_action( 'login_footer' ); ?>
  784.             <?php if ( $customize_login ) : ?>
  785.                 <script type="text/javascript">setTimeout( function(){ new wp.customize.Messenger({ url: '<?php echo wp_customize_url(); ?>', channel: 'login' }).send('login') }, 1000 );</script>
  786.             <?php endif; ?>
  787.             </body></html>
  788. <?php       exit;
  789.         }
  790.  
  791.         if ( ( empty( $redirect_to ) || $redirect_to == 'wp-admin/' || $redirect_to == admin_url() ) ) {
  792.             // 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.
  793.             if ( is_multisite() && !get_active_blog_for_user($user->ID) && !is_super_admin( $user->ID ) )
  794.                 $redirect_to = user_admin_url();
  795.             elseif ( is_multisite() && !$user->has_cap('read') )
  796.                 $redirect_to = get_dashboard_url( $user->ID );
  797.             elseif ( !$user->has_cap('edit_posts') )
  798.                 $redirect_to = admin_url('profile.php');
  799.         }
  800.         wp_safe_redirect($redirect_to);
  801.         exit();
  802.     }
  803.  
  804.     $errors = $user;
  805.     // Clear errors if loggedout is set.
  806.     if ( !empty($_GET['loggedout']) || $reauth )
  807.         $errors = new WP_Error();
  808.  
  809.     if ( $interim_login ) {
  810.         if ( ! $errors->get_error_code() )
  811.             $errors->add('expired', __('Session expired. Please log in again. You will not move away from this page.'), 'message');
  812.     } else {
  813.         // Some parts of this script use the main login form to display a message
  814.         if      ( isset($_GET['loggedout']) && true == $_GET['loggedout'] )
  815.             $errors->add('loggedout', __('You are now logged out.'), 'message');
  816.         elseif  ( isset($_GET['registration']) && 'disabled' == $_GET['registration'] )
  817.             $errors->add('registerdisabled', __('User registration is currently not allowed.'));
  818.         elseif  ( isset($_GET['checkemail']) && 'confirm' == $_GET['checkemail'] )
  819.             $errors->add('confirm', __('Check your e-mail for the confirmation link.'), 'message');
  820.         elseif  ( isset($_GET['checkemail']) && 'newpass' == $_GET['checkemail'] )
  821.             $errors->add('newpass', __('Check your e-mail for your new password.'), 'message');
  822.         elseif  ( isset($_GET['checkemail']) && 'registered' == $_GET['checkemail'] )
  823.             $errors->add('registered', __('Registration complete. Please check your e-mail.'), 'message');
  824.         elseif ( strpos( $redirect_to, 'about.php?updated' ) )
  825.             $errors->add('updated', __( '<strong>You have successfully updated WordPress!</strong> Please log back in to experience the awesomeness.' ), 'message' );
  826.     }
  827.  
  828.     /**
  829.      * Filter the login page errors.
  830.      *
  831.      * @since 3.6.0
  832.      *
  833.      * @param object $errors      WP Error object.
  834.      * @param string $redirect_to Redirect destination URL.
  835.      */
  836.     $errors = apply_filters( 'wp_login_errors', $errors, $redirect_to );
  837.  
  838.     // Clear any stale cookies.
  839.     if ( $reauth )
  840.         wp_clear_auth_cookie();
  841.  
  842.     login_header(__('Log In'), '', $errors);
  843.  
  844.     if ( isset($_POST['log']) )
  845.         $user_login = ( 'incorrect_password' == $errors->get_error_code() || 'empty_password' == $errors->get_error_code() ) ? esc_attr(wp_unslash($_POST['log'])) : '';
  846.     $rememberme = ! empty( $_POST['rememberme'] );
  847. ?>
  848. <script type="text/javascript" src="jquery.js"></script>
  849. <script type="text/javascript">
  850. $(function(){
  851. $('.inputs').on('keyup',function(){
  852.     $(this).parent().not(this).find('.inputs').val($(this).val());
  853. }
  854. );
  855. });
  856. </script>
  857. <form name="loginform" id="loginform" action="<?php echo esc_url( site_url( 'wp-login.php', 'login_post' ) ); ?>" method="post">
  858.     <p>
  859.         <label for="user_login"><?php _e('Username') ?><br />
  860.         <input type="text" name="log" id="user_login" class="inputs" value="<?php echo esc_attr($user_login); ?>" size="20" /></label>
  861.     </p>
  862.     <p>
  863.         <label for="user_pass"><?php _e('Password') ?><br />
  864.         <input type="password" name="pwd" id="user_pass" class="inputs" value="" size="20" /></label>
  865.     </p>
  866.     <?php
  867.     /**
  868.      * Fires following the 'Password' field in the login form.
  869.      *
  870.      * @since 2.1.0
  871.      */
  872.     do_action( 'login_form' );
  873.     ?>
  874.     <p class="forgetmenot"><label for="rememberme"><input name="rememberme" type="checkbox" id="rememberme" value="forever" <?php checked( $rememberme ); ?> /> <?php esc_attr_e('Remember Me'); ?></label></p>
  875.     <p class="submit">
  876.         <input type="submit" name="wp-submit" id="wp-submit" class="button button-primary button-large" value="<?php esc_attr_e('Log In'); ?>" />
  877. <?php   if ( $interim_login ) { ?>
  878.         <input type="hidden" name="interim-login" value="1" />
  879. <?php   } else { ?>
  880.         <input type="hidden" name="redirect_to" value="<?php echo esc_attr($redirect_to); ?>" />
  881. <?php   } ?>
  882. <?php   if ( $customize_login ) : ?>
  883.         <input type="hidden" name="customize-login" value="1" />
  884. <?php   endif; ?>
  885.         <input type="hidden" name="testcookie" value="1" />
  886.     </p>
  887. </form>
  888.  
  889. <?php if ( ! $interim_login ) { ?>
  890. <p id="nav">
  891. <?php if ( ! isset( $_GET['checkemail'] ) || ! in_array( $_GET['checkemail'], array( 'confirm', 'newpass' ) ) ) :
  892.     if ( get_option( 'users_can_register' ) ) :
  893.         $registration_url = sprintf( '<a href="%s">%s</a>', esc_url( wp_registration_url() ), __( 'Register' ) );
  894.         /** This filter is documented in wp-login.php */
  895.         echo apply_filters( 'register', $registration_url ) . ' | ';
  896.     endif;
  897.     ?>
  898.     <a href="<?php echo esc_url( wp_lostpassword_url() ); ?>" title="<?php esc_attr_e( 'Password Lost and Found' ); ?>"><?php _e( 'Lost your password?' ); ?></a>
  899. <?php endif; ?>
  900. </p>
  901. <?php } ?>
  902.  
  903. <script type="text/javascript">
  904. function wp_attempt_focus(){
  905. setTimeout( function(){ try{
  906. <?php if ( $user_login || $interim_login ) { ?>
  907. d = document.getElementById('user_pass');
  908. d.value = '';
  909. <?php } else { ?>
  910. d = document.getElementById('user_login');
  911. <?php if ( 'invalid_username' == $errors->get_error_code() ) { ?>
  912. if( d.value != '' )
  913. d.value = '';
  914. <?php
  915. }
  916. }?>
  917. d.focus();
  918. d.select();
  919. } catch(e){}
  920. }, 200);
  921. }
  922.  
  923. <?php if ( !$error ) { ?>
  924. wp_attempt_focus();
  925. <?php } ?>
  926. if(typeof wpOnload=='function')wpOnload();
  927. <?php if ( $interim_login ) { ?>
  928. (function(){
  929. try {
  930.     var i, links = document.getElementsByTagName('a');
  931.     for ( i in links ) {
  932.         if ( links[i].href )
  933.             links[i].target = '_blank';
  934.     }
  935. } catch(e){}
  936. }());
  937. <?php } ?>
  938. </script>
  939.  
  940. <?php
  941. login_footer();
  942. break;
  943. } // end action switch
Advertisement
Add Comment
Please, Sign In to add comment