Changeset 105

Show
Ignore:
Timestamp:
08/06/08 22:04:17 (4 months ago)
Author:
mdawaffe
Message:

WP_Users::get_user(): return WP_Error when multiple rows match single user request

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/includes/class.wp-users.php

    r102 r105  
    164164        function get_user( $user_id = 0, $args = null ) { 
    165165                $defaults = array( 'output' => OBJECT, 'by' => false ); 
    166                 extract( wp_parse_args( $args, $defaults ), EXTR_SKIP ); 
     166                $args = wp_parse_args( $args, $defaults ); 
     167                extract( $args, EXTR_SKIP ); 
    167168 
    168169                if ( is_array( $user_id ) ) { 
     
    187188                                        return $user; 
    188189                                } 
    189                                 $sql = "SELECT * FROM {$this->db->users} WHERE ID = %d"
     190                                $sql_field = 'ID'
    190191                        } elseif ( 'email' == $by ) { 
    191192                                if ( !$this->is_email( $user_id ) ) 
     
    197198                                        return $this->get_user( $ID, $args ); 
    198199                                } 
    199                                 $sql = "SELECT * FROM {$this->db->users} WHERE user_email = %s"
     200                                $sql_field = 'user_email'
    200201                        } elseif ( 'nicename' == $by ) { // No cache? 
    201202                                $user_id = $this->sanitize_nicename( $user_id ); 
    202                                 $sql = "SELECT * FROM {$this->db->users} WHERE user_nicename = %s"
     203                                $sql_field = 'user_nicename'
    203204                        } else { 
    204205                                $user_id = $this->sanitize_user( $user_id ); 
     
    207208                                elseif ( $ID ) 
    208209                                        return $this->get_user( $ID, $args ); 
    209                                 $sql = "SELECT * FROM {$this->db->users} WHERE user_login = %s"
     210                                $sql_field = 'user_login'
    210211                        } 
    211212 
     
    213214                                return false; 
    214215 
     216                        $sql = "SELECT * FROM {$this->db->users} WHERE $sql_field = %s"; // ID is already (int)ed 
    215217                        $user = $this->db->get_row( $this->db->prepare( $sql, $user_id ) ); 
     218 
     219                        if ( 1 < $this->db->num_rows ) { 
     220                                if ( 'user_email' == $sql_field ) 
     221                                        $err = __( 'Multiple email matches.  Log in with your username.' ); 
     222                                else 
     223                                        $err = sprintf( __( 'Multiple %s matches' ), $sql_field ); 
     224                                return new WP_Error( $sql_field, $err, $args + array( 'user_id' => $user_id, 'unique' => false ) ); 
     225                        } 
    216226 
    217227                        if ( $user ) {