Make WordPress Core

Ticket #1626: wp_check_nicename2.diff

File wp_check_nicename2.diff, 3.5 KB (added by charleshooper, 18 years ago)

Adds user_nicename checks to WP, with caching

  • wp-login.php

     
    212212                require_once( ABSPATH . WPINC . '/registration.php');
    213213
    214214                $user_login = sanitize_user( $_POST['user_login'] );
     215                $user_nicename = sanitize_title( $user_login );
    215216                $user_email = apply_filters( 'user_registration_email', $_POST['user_email'] );
    216217
    217218                // Check the username
     
    220221                elseif ( !validate_username( $user_login ) ) {
    221222                        $errors['user_login'] = __('<strong>ERROR</strong>: This username is invalid.  Please enter a valid username.');
    222223                        $user_login = '';
    223                 } elseif ( username_exists( $user_login ) )
     224                } elseif ( username_exists( $user_login ) || nicename_exists( $user_nicename ) ) {
    224225                        $errors['user_login'] = __('<strong>ERROR</strong>: This username is already registered, please choose another one.');
     226                }
    225227
    226228                // Check the e-mail address
    227229                if ($user_email == '') {
  • wp-includes/pluggable.php

     
    149149
    150150        wp_cache_add($user->ID, $user, 'users');
    151151        wp_cache_add($user->user_login, $user->ID, 'userlogins');
     152        wp_cache_add($user->user_nicename, $user->ID, 'usernicenames');
    152153        return $user;
    153154
    154155}
    155156endif;
    156157
     158if ( !function_exists('get_userdatabynicename') ) :
     159function get_userdatabynicename($user_nicename) {
     160        global $wpdb;
     161        $user_nicename = sanitize_title( $user_nicename );
     162
     163        if ( empty( $user_nicename ) )
     164                return false;
     165
     166        $user_id = wp_cache_get($user_nicename, 'usernicenames');
     167        $userdata = wp_cache_get($user_id, 'users');
     168
     169        if ( $userdata )
     170                return $userdata;
     171
     172        if ( !$user = $wpdb->get_row("SELECT * FROM $wpdb->users WHERE user_nicename = '$user_nicename'") )
     173                return false;
     174
     175        $wpdb->hide_errors();
     176        $metavalues = $wpdb->get_results("SELECT meta_key, meta_value FROM $wpdb->usermeta WHERE user_id = '$user->ID'");
     177        $wpdb->show_errors();
     178
     179        if ($metavalues) {
     180                foreach ( $metavalues as $meta ) {
     181                        $value = maybe_unserialize($meta->meta_value);
     182                        $user->{$meta->meta_key} = $value;
     183
     184                        // We need to set user_level from meta, not row
     185                        if ( $wpdb->prefix . 'user_level' == $meta->meta_key )
     186                                $user->user_level = $meta->meta_value;
     187                }
     188        }
     189
     190        // For backwards compat.
     191        if ( isset($user->first_name) )
     192                $user->user_firstname = $user->first_name;
     193        if ( isset($user->last_name) )
     194                $user->user_lastname = $user->last_name;
     195        if ( isset($user->description) )
     196                $user->user_description = $user->description;
     197
     198        wp_cache_add($user->ID, $user, 'users');
     199        wp_cache_add($user->user_login, $user->ID, 'userlogins');
     200        wp_cache_add($user->user_nicename, $user->ID, 'usernicenames');
     201        return $user;
     202
     203}
     204endif;
     205
    157206if ( !function_exists('wp_mail') ) :
    158207function wp_mail($to, $subject, $message, $headers = '') {
    159208        if( $headers == '' ) {
  • wp-includes/registration.php

     
    1111}
    1212
    1313
     14function nicename_exists( $nicename ) {
     15        global $wpdb;
     16        $nicename = sanitize_title( $nicename );
     17        $user = get_userdatabynicename( $nicename );
     18        if ( $user )
     19                return $user->ID;
     20
     21        return null;
     22}
     23
     24
    1425function email_exists( $email ) {
    1526        global $wpdb;
    1627        $email = addslashes( $email );
     
    181192        return wp_create_user($username, $password, $email);
    182193}
    183194
    184 ?>
    185  No newline at end of file
     195?>