2006-06-08 02:22:16 +00:00
< ? php
2008-06-11 17:25:55 +00:00
function wp_signon ( $credentials = '' , $secure_cookie = '' ) {
2008-01-22 19:35:19 +00:00
if ( empty ( $credentials ) ) {
if ( ! empty ( $_POST [ 'log' ]) )
$credentials [ 'user_login' ] = $_POST [ 'log' ];
if ( ! empty ( $_POST [ 'pwd' ]) )
$credentials [ 'user_password' ] = $_POST [ 'pwd' ];
if ( ! empty ( $_POST [ 'rememberme' ]) )
$credentials [ 'remember' ] = $_POST [ 'rememberme' ];
}
if ( ! empty ( $credentials [ 'user_login' ]) )
$credentials [ 'user_login' ] = sanitize_user ( $credentials [ 'user_login' ]);
if ( ! empty ( $credentials [ 'user_password' ]) )
$credentials [ 'user_password' ] = trim ( $credentials [ 'user_password' ]);
if ( ! empty ( $credentials [ 'remember' ]) )
$credentials [ 'remember' ] = true ;
else
$credentials [ 'remember' ] = false ;
2008-04-16 04:49:19 +00:00
do_action_ref_array ( 'wp_authenticate' , array ( & $credentials [ 'user_login' ], & $credentials [ 'user_password' ]));
2008-06-11 17:25:55 +00:00
if ( '' === $secure_cookie )
$secure_cookie = is_ssl () ? true : false ;
2008-01-22 19:35:19 +00:00
// If no credential info provided, check cookie.
if ( empty ( $credentials [ 'user_login' ]) && empty ( $credentials [ 'user_password' ]) ) {
$user = wp_validate_auth_cookie ();
2008-02-05 06:47:27 +00:00
if ( $user )
2008-01-22 19:35:19 +00:00
return new WP_User ( $user );
2008-06-11 17:25:55 +00:00
if ( $secure_cookie )
$auth_cookie = SECURE_AUTH_COOKIE ;
else
$auth_cookie = AUTH_COOKIE ;
if ( ! empty ( $_COOKIE [ $auth_cookie ]) )
2008-03-12 22:21:14 +00:00
return new WP_Error ( 'expired_session' , __ ( 'Please log in again.' ));
2008-01-22 19:35:19 +00:00
// If the cookie is not set, be silent.
return new WP_Error ();
}
if ( empty ( $credentials [ 'user_login' ]) || empty ( $credentials [ 'user_password' ]) ) {
$error = new WP_Error ();
if ( empty ( $credentials [ 'user_login' ]) )
$error -> add ( 'empty_username' , __ ( '<strong>ERROR</strong>: The username field is empty.' ));
if ( empty ( $credentials [ 'user_password' ]) )
$error -> add ( 'empty_password' , __ ( '<strong>ERROR</strong>: The password field is empty.' ));
return $error ;
}
$user = wp_authenticate ( $credentials [ 'user_login' ], $credentials [ 'user_password' ]);
if ( is_wp_error ( $user ) )
return $user ;
2008-06-11 17:25:55 +00:00
wp_set_auth_cookie ( $user -> ID , $credentials [ 'remember' ], $secure_cookie );
2008-01-22 19:35:19 +00:00
do_action ( 'wp_login' , $credentials [ 'user_login' ]);
return $user ;
}
2006-06-08 02:22:16 +00:00
function get_profile ( $field , $user = false ) {
global $wpdb ;
if ( ! $user )
$user = $wpdb -> escape ( $_COOKIE [ USER_COOKIE ]);
2008-04-14 16:13:25 +00:00
return $wpdb -> get_var ( $wpdb -> prepare ( " SELECT $field FROM $wpdb->users WHERE user_login = %s " , $user ) );
2006-06-08 02:22:16 +00:00
}
function get_usernumposts ( $userid ) {
global $wpdb ;
2007-03-14 07:40:56 +00:00
$userid = ( int ) $userid ;
2008-04-14 16:13:25 +00:00
return $wpdb -> get_var ( $wpdb -> prepare ( " SELECT COUNT(*) FROM $wpdb->posts WHERE post_author = %d AND post_type = 'post' AND " , $userid ) . get_private_posts_cap_sql ( 'post' ));
2006-06-08 02:22:16 +00:00
}
// TODO: xmlrpc only. Maybe move to xmlrpc.php.
function user_pass_ok ( $user_login , $user_pass ) {
2008-01-22 19:35:19 +00:00
$user = wp_authenticate ( $user_login , $user_pass );
if ( is_wp_error ( $user ) )
return false ;
return true ;
2006-06-08 02:22:16 +00:00
}
//
// User option functions
//
function get_user_option ( $option , $user = 0 ) {
global $wpdb ;
2008-02-18 20:16:02 +00:00
$option = preg_replace ( '|[^a-z0-9_]|i' , '' , $option );
2006-06-08 02:22:16 +00:00
if ( empty ( $user ) )
$user = wp_get_current_user ();
else
$user = get_userdata ( $user );
if ( isset ( $user -> { $wpdb -> prefix . $option } ) ) // Blog specific
2008-03-11 21:37:23 +00:00
$result = $user -> { $wpdb -> prefix . $option };
2006-06-08 02:22:16 +00:00
elseif ( isset ( $user -> { $option } ) ) // User specific and cross-blog
2008-03-11 21:37:23 +00:00
$result = $user -> { $option };
2006-06-08 02:22:16 +00:00
else // Blog global
2008-03-11 21:37:23 +00:00
$result = get_option ( $option );
return apply_filters ( " get_user_option_ { $option } " , $result , $option , $user );
2006-06-08 02:22:16 +00:00
}
function update_user_option ( $user_id , $option_name , $newvalue , $global = false ) {
global $wpdb ;
if ( ! $global )
$option_name = $wpdb -> prefix . $option_name ;
return update_usermeta ( $user_id , $option_name , $newvalue );
}
2007-02-01 01:19:36 +00:00
// Get users with capabilities for the current blog.
// For setups that use the multi-blog feature.
function get_users_of_blog ( $id = '' ) {
global $wpdb , $blog_id ;
if ( empty ( $id ) )
2007-03-23 00:59:21 +00:00
$id = ( int ) $blog_id ;
2007-02-02 07:43:59 +00:00
$users = $wpdb -> get_results ( " SELECT user_id, user_login, display_name, user_email, meta_value FROM $wpdb->users , $wpdb->usermeta WHERE " . $wpdb -> users . " .ID = " . $wpdb -> usermeta . " .user_id AND meta_key = ' " . $wpdb -> prefix . " capabilities' ORDER BY { $wpdb -> usermeta } .user_id " );
2007-02-01 01:19:36 +00:00
return $users ;
}
2006-06-08 02:22:16 +00:00
//
// User meta functions
//
function delete_usermeta ( $user_id , $meta_key , $meta_value = '' ) {
global $wpdb ;
if ( ! is_numeric ( $user_id ) )
return false ;
$meta_key = preg_replace ( '|[^a-z0-9_]|i' , '' , $meta_key );
if ( is_array ( $meta_value ) || is_object ( $meta_value ) )
$meta_value = serialize ( $meta_value );
$meta_value = trim ( $meta_value );
if ( ! empty ( $meta_value ) )
2008-04-14 16:13:25 +00:00
$wpdb -> query ( $wpdb -> prepare ( " DELETE FROM $wpdb->usermeta WHERE user_id = %d AND meta_key = %s AND meta_value = %s " , $userid , $meta_key , $meta_value ) );
2006-06-08 02:22:16 +00:00
else
2008-04-14 16:13:25 +00:00
$wpdb -> query ( $wpdb -> prepare ( " DELETE FROM $wpdb->usermeta WHERE user_id = %d AND meta_key = %s " , $user_id , $meta_key ) );
2006-06-08 02:22:16 +00:00
wp_cache_delete ( $user_id , 'users' );
return true ;
}
function get_usermeta ( $user_id , $meta_key = '' ) {
global $wpdb ;
$user_id = ( int ) $user_id ;
2007-08-04 03:58:42 +00:00
if ( ! $user_id )
return false ;
2006-06-08 02:22:16 +00:00
if ( ! empty ( $meta_key ) ) {
2006-12-01 22:44:50 +00:00
$meta_key = preg_replace ( '|[^a-z0-9_]|i' , '' , $meta_key );
2008-04-18 19:00:07 +00:00
$user = wp_cache_get ( $user_id , 'users' );
// Check the cached user object
if ( false !== $user && isset ( $user -> $meta_key ) )
$metas = array ( $user -> $meta_key );
else
$metas = $wpdb -> get_col ( $wpdb -> prepare ( " SELECT meta_value FROM $wpdb->usermeta WHERE user_id = %d AND meta_key = %s " , $user_id , $meta_key ) );
2006-06-08 02:22:16 +00:00
} else {
2008-04-18 19:00:07 +00:00
$metas = $wpdb -> get_col ( $wpdb -> prepare ( " SELECT meta_value FROM $wpdb->usermeta WHERE user_id = %d " , $user_id ) );
2006-06-08 02:22:16 +00:00
}
2008-04-18 20:06:46 +00:00
2006-06-08 02:22:16 +00:00
if ( empty ( $metas ) ) {
if ( empty ( $meta_key ) )
return array ();
else
return '' ;
}
2008-04-18 19:00:07 +00:00
$metas = array_map ( 'maybe_unserialize' , $metas );
2006-06-08 02:22:16 +00:00
2008-04-18 19:00:07 +00:00
if ( count ( $metas ) == 1 )
return $metas [ 0 ];
2006-06-08 02:22:16 +00:00
else
2008-04-18 19:00:07 +00:00
return $metas ;
2006-06-08 02:22:16 +00:00
}
function update_usermeta ( $user_id , $meta_key , $meta_value ) {
global $wpdb ;
if ( ! is_numeric ( $user_id ) )
return false ;
$meta_key = preg_replace ( '|[^a-z0-9_]|i' , '' , $meta_key );
2006-10-12 23:54:36 +00:00
// FIXME: usermeta data is assumed to be already escaped
2006-10-14 05:35:50 +00:00
if ( is_string ( $meta_value ) )
$meta_value = stripslashes ( $meta_value );
2006-10-13 00:23:25 +00:00
$meta_value = maybe_serialize ( $meta_value );
2006-06-08 02:22:16 +00:00
if ( empty ( $meta_value )) {
return delete_usermeta ( $user_id , $meta_key );
}
2008-04-16 18:23:48 +00:00
$cur = $wpdb -> get_row ( $wpdb -> prepare ( " SELECT * FROM $wpdb->usermeta WHERE user_id = %d AND meta_key = %s " , $user_id , $meta_key ) );
2006-06-08 02:22:16 +00:00
if ( ! $cur ) {
2008-04-16 18:23:48 +00:00
$wpdb -> query ( $wpdb -> prepare ( " INSERT INTO $wpdb->usermeta ( user_id, meta_key, meta_value )
2006-06-08 02:22:16 +00:00
VALUES
2008-04-16 18:23:48 +00:00
( % d , % s , % s ) " , $user_id , $meta_key , $meta_value ) );
2006-06-08 02:22:16 +00:00
} else if ( $cur -> meta_value != $meta_value ) {
2008-04-14 16:13:25 +00:00
$wpdb -> query ( $wpdb -> prepare ( " UPDATE $wpdb->usermeta SET meta_value = %s WHERE user_id = %d AND meta_key = %s " , $meta_value , $user_id , $meta_key ) );
2006-06-08 02:22:16 +00:00
} else {
return false ;
}
wp_cache_delete ( $user_id , 'users' );
return true ;
}
//
// Private helper functions
//
// Setup global user vars. Used by set_current_user() for back compat.
function setup_userdata ( $user_id = '' ) {
global $user_login , $userdata , $user_level , $user_ID , $user_email , $user_url , $user_pass_md5 , $user_identity ;
if ( '' == $user_id )
$user = wp_get_current_user ();
2006-11-19 07:56:05 +00:00
else
2006-06-08 02:22:16 +00:00
$user = new WP_User ( $user_id );
if ( 0 == $user -> ID )
return ;
$userdata = $user -> data ;
$user_login = $user -> user_login ;
2008-02-02 18:42:09 +00:00
$user_level = ( int ) isset ( $user -> user_level ) ? $user -> user_level : 0 ;
2007-03-23 00:59:21 +00:00
$user_ID = ( int ) $user -> ID ;
2006-06-08 02:22:16 +00:00
$user_email = $user -> user_email ;
$user_url = $user -> user_url ;
$user_pass_md5 = md5 ( $user -> user_pass );
$user_identity = $user -> display_name ;
}
2007-05-29 04:28:10 +00:00
function wp_dropdown_users ( $args = '' ) {
global $wpdb ;
$defaults = array (
'show_option_all' => '' , 'show_option_none' => '' ,
'orderby' => 'display_name' , 'order' => 'ASC' ,
'include' => '' , 'exclude' => '' ,
'show' => 'display_name' , 'echo' => 1 ,
'selected' => 0 , 'name' => 'user' , 'class' => ''
);
2007-06-14 02:25:30 +00:00
2007-05-29 04:28:10 +00:00
$defaults [ 'selected' ] = is_author () ? get_query_var ( 'author' ) : 0 ;
2007-06-14 02:25:30 +00:00
2007-05-29 04:28:10 +00:00
$r = wp_parse_args ( $args , $defaults );
2007-06-14 22:45:40 +00:00
extract ( $r , EXTR_SKIP );
2007-05-29 04:28:10 +00:00
$query = " SELECT * FROM $wpdb->users " ;
$query_where = array ();
if ( is_array ( $include ) )
$include = join ( ',' , $include );
$include = preg_replace ( '/[^0-9,]/' , '' , $include ); // (int)
if ( $include )
$query_where [] = " ID IN ( $include ) " ;
if ( is_array ( $exclude ) )
$exclude = join ( ',' , $exclude );
$exclude = preg_replace ( '/[^0-9,]/' , '' , $exclude ); // (int)
if ( $exclude )
$query_where [] = " ID NOT IN ( $exclude ) " ;
if ( $query_where )
$query .= " WHERE " . join ( ' AND' , $query_where );
$query .= " ORDER BY $orderby $order " ;
$users = $wpdb -> get_results ( $query );
$output = '' ;
if ( ! empty ( $users ) ) {
$output = " <select name=' $name ' id=' $name ' class=' $class '> \n " ;
if ( $show_option_all )
$output .= " \t <option value='0'> $show_option_all </option> \n " ;
if ( $show_option_none )
$output .= " \t <option value='-1'> $show_option_none </option> \n " ;
2008-08-06 20:31:54 +00:00
foreach ( ( array ) $users as $user ) {
2007-05-29 04:28:10 +00:00
$user -> ID = ( int ) $user -> ID ;
$_selected = $user -> ID == $selected ? " selected='selected' " : '' ;
$output .= " \t <option value=' $user->ID ' $_selected > " . wp_specialchars ( $user -> $show ) . " </option> \n " ;
}
$output .= " </select> " ;
}
$output = apply_filters ( 'wp_dropdown_users' , $output );
if ( $echo )
echo $output ;
return $output ;
}
2007-11-27 22:14:53 +00:00
function _fill_user ( & $user ) {
global $wpdb ;
2007-12-16 21:38:24 +00:00
$show = $wpdb -> hide_errors ();
2007-11-27 22:14:53 +00:00
$metavalues = $wpdb -> get_results ( $wpdb -> prepare ( " SELECT meta_key, meta_value FROM $wpdb->usermeta WHERE user_id = %d " , $user -> ID ));
2007-12-16 21:38:24 +00:00
$wpdb -> show_errors ( $show );
2007-11-27 22:14:53 +00:00
if ( $metavalues ) {
2008-08-06 20:31:54 +00:00
foreach ( ( array ) $metavalues as $meta ) {
2007-11-27 22:14:53 +00:00
$value = maybe_unserialize ( $meta -> meta_value );
$user -> { $meta -> meta_key } = $value ;
}
}
$level = $wpdb -> prefix . 'user_level' ;
if ( isset ( $user -> { $level } ) )
$user -> user_level = $user -> { $level };
// For backwards compat.
if ( isset ( $user -> first_name ) )
$user -> user_firstname = $user -> first_name ;
if ( isset ( $user -> last_name ) )
$user -> user_lastname = $user -> last_name ;
if ( isset ( $user -> description ) )
$user -> user_description = $user -> description ;
wp_cache_add ( $user -> ID , $user , 'users' );
wp_cache_add ( $user -> user_login , $user -> ID , 'userlogins' );
wp_cache_add ( $user -> user_email , $user -> ID , 'useremail' );
}
2007-02-02 07:43:59 +00:00
?>