WordPress.org

Support

Support » Requests and Feedback » class WP_User_Login ?

class WP_User_Login ?

Viewing 4 replies - 1 through 4 (of 4 total)
  • by the way this class can replace the wp2.7 login without showing any change.

    best to copy and paste it into an editor to view it, the column is to narrow here…and my tabs are slightly out in the post

    minor bug in above code : in function login_form need to change the $redirect_to to $this->settings['login_redirect']

    anyway the idea is the feature request.

    Hope nobody minds posting all this code here,
    this seems to be bug-free now…removed tabs

    <?php
    /**
    * WordPress User Login Class
    *
    * Handles authentication, registering, resetting passwords, forgot password,
    * and other user handling.
    *
    * @package WordPress
    */
    
    if (!class_exists("WP_Users_Login")) {
    
    class WP_Users_Login{		
    
    var $errors,$action,$user_login,$user_email;			
    
    function WP_Users_Login(){
    
    if ( force_ssl_admin() &amp;&amp; !is_ssl() ) {
    if ( 0 === strpos($_SERVER['REQUEST_URI'], 'http') ) {
    wp_redirect(preg_replace('|^http://|', 'https://', $_SERVER['REQUEST_URI']));
    exit();
    } else {
    wp_redirect('https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
    exit();
    }
    }		
    
    $this->settings_keys = array(
    'display','cache','backtoblog',
    'login_action' , 'login_redirect' , 'login_url',
    'register_action' , 'register_redirect' , 'register_url',
    'password_action' , 'password_redirect' , 'password_url',
    'resetpassword_redirect_newpass','resetpassword_redirect_invalidkey'
    );		
    
    $this->settings = array(	
    
    /*
    
    can set to 'default' -> the default display will be
    (html header -> document body -> login|register|lostpass form -> page close)
    can set to 'form' -> will only show the form part
    can set to anything else -> must then explicitly call the form you want
    
    */	
    
    'display'	=> 'default',
    'cache'	=> 'nocache',
    'backtoblog' => 'show',
    
    'logout_redirect'=>'wp-login.php?loggedout=true',
    
    'login_action' =>site_url('wp-login.php', 'login_post'),
    'login_redirect' =>admin_url(),
    'login_url' =>site_url('wp-login.php', 'login'),	
    
    'register_action'=> site_url('wp-login.php?action=register', 'login_post'),
    'register_redirect' => ( !get_option('users_can_register') ) ? 'wp-login.php?registration=disabled' : 'wp-login.php?checkemail=registered',
    'register_url' =>site_url('wp-login.php?action=register', 'login'),											
    
    'lostpassword_action'=>site_url('wp-login.php?action=lostpassword', 'login_post'),
    'lostpassword_redirect'=>'wp-login.php?checkemail=confirm',
    'lostpassword_url' =>site_url('wp-login.php?action=lostpassword', 'login'),
    
    'resetpassword_redirect_newpass'=>'wp-login.php?checkemail=newpass',
    'resetpassword_redirect_invalidkey'=>'wp-login.php?action=lostpassword&amp;error=invalidkey'
    
    );
    
    $this->errors = new WP_Error();
    $this->action = isset($_REQUEST['action']) ? $_REQUEST['action'] : '';			
    
    if ( isset($_GET['key']) ) $this->action = 'resetpass';
    $this->header_info();
    $this->relocate_defined();
    
    }	
    
    function log_settings($settings=false){
    
    if(!$settings || !is_array($settings))return false;
    
    $keys = array_keys($settings);			
    
    foreach($keys as $k){
    
    if(in_array($k,$this->settings_keys))$this->settings[$k] = $settings[$k];
    
    }
    
    return true;
    
    }
    
    //function login_header($title = 'Log In', $message = '', $wp_error = '') {
    function login_header($title = 'Log In', $message = '') {
    
    /*no need for this*/
    //if ( empty($wp_error) )
    //$wp_error = new WP_Error();
    
    if('default' == $this->settings['display']){
    
    ?>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" <?php language_attributes(); ?>>
    <head>
    <title><?php bloginfo('name'); ?> &rsaquo; <?php echo $title; ?></title>
    <meta http-equiv="Content-Type" content="<?php bloginfo('html_type'); ?>; charset=<?php bloginfo('charset'); ?>" />
    
    <?php
    
    wp_admin_css( 'login', true );
    wp_admin_css( 'colors-fresh', true );
    do_action('login_head'); 
    
    ?>
    
    </head>
    <body class="login">
    <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>
    
    <?php
    
    if ( !empty( $message ) ) echo apply_filters('login_message', $message) . "\n";
    
    // Incase a plugin uses $error rather than the $errors object
    /* no need for this */
    //if ( !empty( $error ) ) {
    //$wp_error->add('error', $error);
    //unset($error);
    //}
    
    $this->print_errors_default();
    
    }  //END display == default
    
    } 
    
    function print_errors_default(){
    
    if ( $this->errors->get_error_code() ) {
    $err = '';
    $messages = '';
    
    foreach ( $this->errors->get_error_codes() as $code ) {
    $severity = $this->errors->get_error_data($code);
    foreach ( $this->errors->get_error_messages($code) as $error ) {
    if ( 'message' == $severity )
    $messages .= '	' . $error . "<br />\n";
    else
    $err .= '	' . $error . "<br />\n";
    }
    }
    if ( !empty($err) )
    echo '<div id="login_error">' . apply_filters('login_errors', $err) . "</div>\n";
    if ( !empty($messages) )
    echo '<p class="message">' . apply_filters('login_messages', $messages) . "</p>\n";
    }
    
    }
    
    function print_errors_custom($how=false){
    
    if(!$how || !is_array($how)){						
    
    $this->print_errors_default();		
    
    }else{
    
    foreach ( $this->errors->get_error_codes() as $code ) {
    $severity = $this->errors->get_error_data($code);
    foreach ( $this->errors->get_error_messages($code) as $error ) {
    if ( 'message' == $severity )
    $messages .= ( array_key_exists('message_item_before',$how) ? $how['message_item_before'] : '' )
    . $error .
    ( array_key_exists('message_item_after',$how) ? $how['message_item_after'] : '' )
    ."\n";
    else
    $err .= ( array_key_exists('error_item_before',$how) ? $how['error_item_before'] : '' )
    . $error .
    ( array_key_exists('error_item_after',$how) ? $how['error_item_after'] : '' )
    ."\n";
    }
    }
    if ( !empty($err) )
    echo ( array_key_exists('error_block_start',$how) ? $how['error_block_start'] : '' )
    . apply_filters('login_errors', $err) .
    ( array_key_exists('error_block_end',$how) ? $how['error_block_end'] : '' ) ."\n";
    
    if ( !empty($messages) )
    echo ( array_key_exists('message_block_start',$how) ? $how['message_block_start'] : '' )
    . apply_filters('login_messages', $messages) .
    ( array_key_exists('message_block_end',$how) ? $how['message_block_end'] : '' ) ."\n";		
    
    }
    
    }
    
    function header_info($cache=''){		
    
    if('cache' == $this->settings['cache'] || $this->settings['display'] == 'default' ) nocache_headers();
    header('Content-Type: '.get_bloginfo('html_type').'; charset='.get_bloginfo('charset'));		
    
    }	
    
    function relocate_defined(){
    
    if ( defined('RELOCATE') ) { // Move flag is set
    
    if ( isset( $_SERVER['PATH_INFO'] ) &amp;&amp; ($_SERVER['PATH_INFO'] != $_SERVER['PHP_SELF']) )
    $_SERVER['PHP_SELF'] = str_replace( $_SERVER['PATH_INFO'], '', $_SERVER['PHP_SELF'] );
    
    $schema = ( isset($_SERVER['HTTPS']) &amp;&amp; strtolower($_SERVER['HTTPS']) == 'on' ) ? 'https://' : 'http://';
    if ( dirname($schema . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']) != get_option('siteurl') )
    update_option('siteurl', dirname($schema . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']) );
    
    }
    
    }		
    
    function set_cookie(){
    
    //Set a cookie now to see if they are supported by the browser.
    setcookie(TEST_COOKIE, 'WP Cookie check', 0, COOKIEPATH, COOKIE_DOMAIN);
    if ( SITECOOKIEPATH != COOKIEPATH )
    setcookie(TEST_COOKIE, 'WP Cookie check', 0, SITECOOKIEPATH, COOKIE_DOMAIN);		
    
    }	
    
    function log_run(){		
    
    $http_post = ('POST' == $_SERVER['REQUEST_METHOD']);		
    
    switch ($this->action) {				
    
    case 'logout' :
    check_admin_referer('log-out');
    wp_logout();
    
    $redirect_to = $this->settings['logout_redirect'];
    if ( isset( $_REQUEST['redirect_to'] ) )
    $redirect_to = $_REQUEST['redirect_to'];
    wp_safe_redirect($redirect_to);
    exit();
    break;	
    
    case 'lostpassword' :
    case 'retrievepassword' :
    
    if ( $http_post ) {
    $this->errors = $this->retrieve_password();
    if ( !is_wp_error($this->errors) ) {
    wp_redirect($this->settings['lostpassword_redirect']);
    exit();
    }
    }
    
    if ( isset($_GET['error']) &amp;&amp; 'invalidkey' == $_GET['error'] ) $this->errors->add('invalidkey', __('Sorry, that key does not appear to be valid.'));
    
    do_action('lost_password');
    $this->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);
    $this->user_login = isset($_POST['user_login']) ? stripslashes($_POST['user_login']) : '';
    
    //form-action|filter-messages
    
    if('default' == $this->settings['display'] || 'form' == $this->settings['display']){ 
    
    $this->password_form();
    
    }else{
    
    //do_action()
    // the form will be called somewhere else for here...:>
    
    }		
    
    break;
    
    ////////////////////////////////////////////////////	
    
    case 'resetpass' :
    case 'rp' :				
    
    $errors = $this->reset_password($_GET['key']);
    if ( ! is_wp_error($errors) ) {
    wp_redirect($this->settings['resetpassword_redirect_newpass']);
    exit();
    }
    
    wp_redirect($this->settings['resetpassword_redirect_invalidkey']);
    exit();
    break;				
    
    case 'register' :
    if ( !get_option('users_can_register') ) {
    //already checked for get_option in constructor -> ok
    wp_redirect($this->settings['register_redirect']);
    exit();
    }
    
    $this->user_login = '';
    $this->user_email = '';
    
    if ( $http_post ) {
    require_once( ABSPATH . WPINC . '/registration.php');
    
    $this->user_login = $_POST['user_login'];
    $this->user_email = $_POST['user_email'];
    $this->errors = $this->register_new_user($this->user_login, $this->user_email);
    if ( !is_wp_error($this->errors) ) {
    
    //already checked for get_option in constructor -> ok
    wp_redirect($this->settings['register_redirect']);
    exit();
    
    }
    }
    
    $this->login_header(__('Registration Form'), '<p class="message register">' . __('Register For This Site') . '</p>', $errors);				
    
    if('default' == $this->settings['display'] || 'form' == $this->settings['display']){ 
    
    $this->register_form();
    
    }else{
    
    // do_action('custom_registration_form');
    // the form will be called somewhere else for here...:>
    
    }								
    
    break;
    
    case 'login' :
    default:
    
    $secure_cookie = '';
    
    // If the user wants ssl but the session is not ssl, force a secure cookie.
    if ( !empty($_POST['log']) &amp;&amp; !force_ssl_admin() ) {
    $user_name = sanitize_user($_POST['log']);
    if ( $user = get_userdatabylogin($user_name) ) {
    if ( get_user_option('use_ssl', $user->ID) ) {
    $secure_cookie = true;
    force_ssl_admin(true);
    }
    }
    }
    
    if ( isset( $_REQUEST['redirect_to'] ) ) {
    
    $redirect_to = $_REQUEST['redirect_to'];
    
    // Redirect to https if user wants ssl
    if ( $secure_cookie &amp;&amp; false !== strpos($redirect_to, 'wp-admin') )
    $redirect_to = preg_replace('|^http://|', 'https://', $redirect_to);
    
    } else {
    //check redirect
    $redirect_to = $this->settings['login_redirect'];  //admin_url();
    }
    
    if ( !$secure_cookie &amp;&amp; is_ssl() &amp;&amp; force_ssl_login() &amp;&amp; !force_ssl_admin() &amp;&amp; ( 0 !== strpos($redirect_to, 'https') ) &amp;&amp; ( 0 === strpos($redirect_to, 'http') ) )
    $secure_cookie = false;
    
    $user = wp_signon('', $secure_cookie);
    
    $redirect_to = apply_filters('login_redirect', $redirect_to, isset( $_REQUEST['redirect_to'] ) ? $_REQUEST['redirect_to'] : '', $user);
    
    $redirect .= "?gg=".$GET['where'];
    //check for if user not
    if ( !is_wp_error($user) ) {
    
    // If the user can't edit posts, send them to their profile.
    if ( !$user->has_cap('edit_posts') &amp;&amp; ( empty( $redirect_to ) || $redirect_to == 'wp-admin/' ) )
    $redirect_to = admin_url('profile.php');
    wp_safe_redirect($redirect_to);
    exit();
    
    }	
    
    $this->errors = $user;
    // Clear errors if loggedout is set.
    if ( !empty($_GET['loggedout']) )
    $this->errors = new WP_Error();
    
    // If cookies are disabled we can't log in even with a valid user+pass
    if ( isset($_POST['testcookie']) &amp;&amp; empty($_COOKIE[TEST_COOKIE]) )
    $this->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."));
    
    // Some parts of this script use the main login form to display a message
    if	     ( isset($_GET['loggedout']) &amp;&amp; TRUE == $_GET['loggedout'] )			   $this->errors->add('loggedout', __('You are now logged out.'), 'message');
    elseif ( isset($_GET['registration']) &amp;&amp; 'disabled' == $_GET['registration'] )   $this->errors->add('registerdisabled', __('User registration is currently not allowed.'));
    elseif ( isset($_GET['checkemail']) &amp;&amp; 'confirm' == $_GET['checkemail'] )	   $this->errors->add('confirm', __('Check your e-mail for the confirmation link.'), 'message');
    elseif ( isset($_GET['checkemail']) &amp;&amp; 'newpass' == $_GET['checkemail'] )    $this->errors->add('newpass', __('Check your e-mail for your new password.'), 'message');
    elseif ( isset($_GET['checkemail']) &amp;&amp; 'registered' == $_GET['checkemail'] )  $this->errors->add('registered', __('Registration complete. Please check your e-mail.'), 'message');
    
    //login_header(__('Log In'), '', $errors);
    if('default' == $this->settings['display'] ) $this->login_header(__('Log In'), '');
    
    if ( isset($_POST['log']) )
    $this->user_login = ( 'incorrect_password' == $this->errors->get_error_code() || 'empty_password' == $this->errors->get_error_code() ) ? attribute_escape(stripslashes($_POST['log'])) : '';
    
    if('default' == $this->settings['display'] || 'form' == $this->settings['display']){ 
    
    $this->login_form();
    
    }else{
    
    // the form will be called somewhere else for here...:>
    
    }
    
    break;
    
    } // end action switch	
    
    }
    
    function password_form(){
    
    ?>
    
    <form name="lostpasswordform" id="lostpasswordform" action="<?php echo $this->settings['lostpassword_action'] ?>" method="post">
    <p>
    <label><?php _e('Username or E-mail:') ?><br />
    <input type="text" name="user_login" id="user_login" class="input" value="<?php echo attribute_escape($this->user_login); ?>" size="20" tabindex="10" /></label>
    </p>
    <?php do_action('lostpassword_form'); ?>
    <p class="submit"><input type="submit" name="wp-submit" id="wp-submit" value="<?php _e('Get New Password'); ?>" tabindex="100" /></p>
    </form>
    
    <p id="nav">
    <?php if (get_option('users_can_register')) : ?>
    <a href="<?php echo $this->settings['login_url'] ?>"><?php _e('Log in') ?></a> |
    <a href="<?php echo $this->settings['register_url'] ?>"><?php _e('Register') ?></a>
    <?php else : ?>
    <a href="<?php $this->settings['login_url'] ?>"><?php _e('Log in') ?></a>
    <?php endif; ?>
    </p>
    
    <?php if( 'default' == $this->settings['display'] ) { ?> </div> <?php } ?>
    
    <?php if( 'show' == $this->settings['backtoblog'] ){ ?>
    <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>
    <?php } ?>
    
    <script type="text/javascript">
    try{document.getElementById('user_login').focus();}catch(e){}
    </script>
    
    <?php if( 'default' == $this->settings['display'] ) { ?> </body></html> <?php } 			
    
    }
    
    function register_form(){	
    
    ?>
    
    <form name="registerform" id="registerform" action="<?php echo $this->settings['register_action'] ?>" method="post">
    <p>
    <label><?php _e('Username') ?><br />
    <input type="text" name="user_login" id="user_login" class="input" value="<?php echo attribute_escape(stripslashes($user_login)); ?>" size="20" tabindex="10" /></label>
    </p>
    <p>
    <label><?php _e('E-mail') ?><br />
    <input type="text" name="user_email" id="user_email" class="input" value="<?php echo attribute_escape(stripslashes($user_email)); ?>" size="25" tabindex="20" /></label>
    </p>
    <?php do_action('register_form'); ?>
    <p id="reg_passmail"><?php _e('A password will be e-mailed to you.') ?></p>
    <p class="submit"><input type="submit" name="wp-submit" id="wp-submit" value="<?php _e('Register'); ?>" tabindex="100" /></p>
    </form>
    
    <p id="nav">
    <a href="<?php echo $this->settings['login_url'] ?>"><?php _e('Log in') ?></a> |
    <a href="<?php echo $this->settings['lostpassword_url'] ?>" title="<?php _e('Password Lost and Found') ?>"><?php _e('Lost your password?') ?></a>
    </p>
    
    <?php if( 'default' == $this->settings['display'] ) { ?> </div> <?php } ?>
    
    <?php if( 'show' == $this->settings['backtoblog'] ){ ?>
    <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>
    <?php } ?>
    
    <script type="text/javascript">
    try{document.getElementById('user_login').focus();}catch(e){}
    </script>
    
    <?php if( 'default' == $this->settings['display'] ) { ?> </body></html> <?php } 
    
    }
    
    function login_form(){
    
    if ( !isset($_GET['checkemail']) || !in_array( $_GET['checkemail'], array('confirm', 'newpass') ) ) : 
    
    ?>
    
    <form name="loginform" id="loginform" action="<?php echo $this->settings['login_action'] ?>" method="post">
    <p>
    <label><?php _e('Username') ?><br />
    <input type="text" name="log" id="user_login" class="input" value="<?php echo $this->user_login; ?>" size="20" tabindex="10" /></label>
    </p>
    <p>
    <label><?php _e('Password') ?><br />
    <input type="password" name="pwd" id="user_pass" class="input" value="" size="20" tabindex="20" /></label>
    </p>
    
    <?php do_action('login_form'); ?>
    
    <p class="forgetmenot"><label><input name="rememberme" type="checkbox" id="rememberme" value="forever" tabindex="90" /> <?php _e('Remember Me'); ?></label></p>
    <p class="submit">
    <input type="submit" name="wp-submit" id="wp-submit" value="<?php _e('Log In'); ?>" tabindex="100" />
    
    <input type="hidden" name="redirect_to" value="<?php echo attribute_escape($this->settings['login_redirect'].'?where='.$this->settings['login_redirect']); ?>" />
    <input type="hidden" name="testcookie" value="1" />
    </p>
    
    </form>
    
    <?php endif; ?>
    
    <p id="nav">
    <?php if ( isset($_GET['checkemail']) &amp;&amp; in_array( $_GET['checkemail'], array('confirm', 'newpass') ) ) : ?>
    <?php elseif (get_option('users_can_register')) : ?>
    <a href="<?php echo $this->settings['register_url'] ?>"><?php _e('Register') ?></a> |
    <a href="<?php echo $this->settings['lostpassword_url'] ?>" title="<?php _e('Password Lost and Found') ?>"><?php _e('Lost your password?') ?></a>
    <?php else : ?>
    <a href="<?php echo $this->settings['lostpassword_url'] ?>" title="<?php _e('Password Lost and Found') ?>"><?php _e('Lost your password?') ?></a>
    <?php endif; ?>
    </p>
    
    <?php if( 'default' == $this->settings['display'] ) { ?> </div> <?php } ?>
    
    <?php if( 'show' == $this->settings['backtoblog'] ){ ?>
    <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>
    <?php } ?>
    
    <script type="text/javascript">
    <?php if ( $this->user_login ) { ?>
    setTimeout( function(){ try{
    d = document.getElementById('user_pass');
    d.value = '';
    d.focus();
    } catch(e){
    
    }	}, 200);
    
    <?php } else { ?>
    
    try{document.getElementById('user_login').focus();}catch(e){}
    
    <?php } ?>
    </script>
    
    <?php if( 'default' == $this->settings['display'] ) { ?> </body></html> <?php } 
    
    }
    
    function retrieve_password() {
    
    global $wpdb;
    
    $errors = new WP_Error();
    
    if ( empty( $_POST['user_login'] ) &amp;&amp; empty( $_POST['user_email'] ) )
    $errors->add('empty_username', __('<strong>ERROR</strong>: Enter a username or e-mail address.'));
    
    if ( strpos($_POST['user_login'], '@') ) {
    $user_data = get_user_by_email(trim($_POST['user_login']));
    if ( empty($user_data) )
    $errors->add('invalid_email', __('<strong>ERROR</strong>: There is no user registered with that email address.'));
    } else {
    $login = trim($_POST['user_login']);
    $user_data = get_userdatabylogin($login);
    }
    
    do_action('lostpassword_post');
    
    if ( $errors->get_error_code() ) return $errors;
    
    if ( !$user_data ) {
    $errors->add('invalidcombo', __('<strong>ERROR</strong>: Invalid username or e-mail.'));
    return $errors;
    }
    
    // redefining user_login ensures we return the right case in the email
    $user_login = $user_data->user_login;
    $user_email = $user_data->user_email;
    
    do_action('retreive_password', $user_login);  // Misspelled and deprecated
    do_action('retrieve_password', $user_login);
    
    $allow = apply_filters('allow_password_reset', true, $user_data->ID);
    
    if ( ! $allow )
    return new WP_Error('no_password_reset', __('Password reset is not allowed for this user'));
    else if ( is_wp_error($allow) )
    return $allow;
    
    $key = $wpdb->get_var($wpdb->prepare("SELECT user_activation_key FROM $wpdb->users WHERE user_login = %s", $user_login));
    if ( empty($key) ) {
    // Generate something random for a key...
    $key = wp_generate_password(20, false);
    do_action('retrieve_password_key', $user_login, $key);
    // Now insert the new md5 key into the db
    $wpdb->query($wpdb->prepare("UPDATE $wpdb->users SET user_activation_key = %s WHERE user_login = %s", $key, $user_login));
    }
    
    $message = __('Someone has asked to reset the password for the following site and username.') . "\r\n\r\n";
    $message .= get_option('siteurl') . "\r\n\r\n";
    $message .= sprintf(__('Username: %s'), $user_login) . "\r\n\r\n";
    $message .= __('To reset your password visit the following address, otherwise just ignore this email and nothing will happen.') . "\r\n\r\n";
    $message .= site_url("wp-login.php?action=rp&amp;key=$key", 'login') . "\r\n";
    
    if ( !wp_mail($user_email, sprintf(__('[%s] Password Reset'), get_option('blogname')), $message) )
    die('<p>' . __('The e-mail could not be sent.') . "<br />\n" . __('Possible reason: your host may have disabled the mail() function...') . '</p>');
    
    return true;
    }
    
    function reset_password($key) {
    
    global $wpdb;
    $key = preg_replace('/[^a-z0-9]/i', '', $key);
    
    if ( empty( $key ) )	return new WP_Error('invalid_key', __('Invalid key'));
    
    $user = $wpdb->get_row($wpdb->prepare("SELECT * FROM $wpdb->users WHERE user_activation_key = %s", $key));
    if ( empty( $user ) )
    return new WP_Error('invalid_key', __('Invalid key'));
    
    do_action('password_reset', $user);
    
    // Generate something random for a password...
    $new_pass = wp_generate_password();
    wp_set_password($new_pass, $user->ID);
    $message  = sprintf(__('Username: %s'), $user->user_login) . "\r\n";
    $message .= sprintf(__('Password: %s'), $new_pass) . "\r\n";
    $message .= site_url('wp-login.php', 'login') . "\r\n";
    
    if (  !wp_mail($user->user_email, sprintf(__('[%s] Your new password'), get_option('blogname')), $message) )
    die('<p>' . __('The e-mail could not be sent.') . "<br />\n" . __('Possible reason: your host may have disabled the mail() function...') . '</p>');
    
    wp_password_change_notification($user);
    
    return true;
    }
    
    function register_new_user($user_login, $user_email) {
    
    $errors = new WP_Error();
    
    $user_login = sanitize_user( $user_login );
    $user_email = apply_filters( 'user_registration_email', $user_email );
    
    // Check the username
    if ( $user_login == '' )
    $errors->add('empty_username', __('<strong>ERROR</strong>: Please enter a username.'));
    elseif ( !validate_username( $user_login ) ) {
    $errors->add('invalid_username', __('<strong>ERROR</strong>: This username is invalid.  Please enter a valid username.'));
    $user_login = '';
    } elseif ( username_exists( $user_login ) )
    $errors->add('username_exists', __('<strong>ERROR</strong>: This username is already registered, please choose another one.'));
    
    // Check the e-mail address
    if ($user_email == '') {
    $errors->add('empty_email', __('<strong>ERROR</strong>: Please type your e-mail address.'));
    } elseif ( !is_email( $user_email ) ) {
    $errors->add('invalid_email', __('<strong>ERROR</strong>: The email address isn’t correct.'));
    $user_email = '';
    } elseif ( email_exists( $user_email ) )
    $errors->add('email_exists', __('<strong>ERROR</strong>: This email is already registered, please choose another one.'));
    
    do_action('register_post', $user_login, $user_email, $errors);
    
    $errors = apply_filters( 'registration_errors', $errors );
    
    if ( $errors->get_error_code() )
    return $errors;
    
    $user_pass = wp_generate_password();
    $user_id = wp_create_user( $user_login, $user_pass, $user_email );
    if ( !$user_id ) {
    $this->errors->add('registerfail', sprintf(__('<strong>ERROR</strong>: Couldn’t register you... please contact the <a href="mailto:%s">webmaster</a> !'), get_option('admin_email')));
    return $this->errors;
    
    }
    
    wp_new_user_notification($user_id, $user_pass);
    
    return $user_id;
    
    }
    
    }
    }
    
    ?>

    It can then be used in a plugin with a better example like this…

    add_action('get_sidebar', 'Learners_Users_Login');
    
    function Learners_Users_Login(){
    
    //require_once(admin_url"learners-users-login.php");
    require_once(ABSPATH.'/wp-includes/class.wp-user-login.php');
    $dl_Learners_Login = new WP_Users_Login();
    add_action('get_header',create_function('', 'global $dl_Learners_Login; $dl_Learners_Login->login_scripts();'));	
    
    $settings = array(
    'display'	=> '',
    'cache'	=> 'cache',
    'backtoblog' => 'hidden',
    
    'logout_redirect'=>site_url('/','login_post').'?loggedout=true',
    
    'login_action' =>site_url('/','login_post'),
    'login_redirect' =>site_url('/'),
    'login_url' =>site_url('/','login'),	
    
    'register_action'=> site_url('/','login_post').'?action=register', 'login_post',
    'register_redirect' => ( !get_option('users_can_register') ) ? site_url().'?registration=disabled' : site_url().'?checkemail=registered',
    'register_url' =>site_url('/','login').'?action=register', 'login',											
    
    'lostpassword_action'=>site_url('/','login_post').'?action=lostpassword',
    'lostpassword_redirect'=>site_url('/','').'?checkemail=confirm',
    'lostpassword_url' =>site_url('/','login').'?action=lostpassword',
    
    'resetpassword_redirect_newpass'=>site_url('/','').'?checkemail=newpass',
    'resetpassword_redirect_invalidkey'=>site_url('/','').'?action=lostpassword&amp;error=invalidkey'
    
    );	
    
    $dl_Learners_Login->log_settings($settings);
    $dl_Learners_Login->log_run();
    
    if(is_user_logged_in() &amp;&amp; current_user_can('write_learners_tests')){
    ?>
    
    <a href="<?php echo wp_logout_url(site_url('/')) ?>" style='background:#000;color:#fff;' title="<?php _e('Log Out') ?>"><?php _e('Log Out'); ?></a></p>
    
    <?php
    
    }else{
    
    $dl_Learners_Login->errors->add('permission', __('You do not have permisson to log in to this site.'),'message');
    wp_nonce_url( site_url("wp-login.php?action=logout&amp;redirect_to='.site_url('/').'", 'login'), 'log-out' );
    
    }
    
    $how = array(
    'message_item_before' =>'<li>',
    'message_item_after' =>'</li>',
    'error_item_before' =>'<li>',
    'error_item_after' =>'</li>',
    'message_block_start' =>'<ul>',
    'message_block_end' =>'</ul>',
    'error_block_start' =>'<ul>',
    'error_block_end' =>'</ul>',
    
    );
    
    $dl_Learners_Login->print_errors_custom($how);
    $dl_Learners_Login->login_form();
    $dl_Learners_Login->register_form();
    $dl_Learners_Login->password_form();
    
    }

    It would be real nice to have better control in plugins to work with users customization….

    i believe i have now probably abused this post. anyway…hope that somebody out there can second this idea…

Viewing 4 replies - 1 through 4 (of 4 total)
  • The topic ‘class WP_User_Login ?’ is closed to new replies.
Skip to toolbar