wp/wp-includes/user.php
author ymh <ymh.work@gmail.com>
Wed, 06 Nov 2013 03:21:17 +0000
changeset 0 d970ebf37754
child 5 5e2f62d02dcd
permissions -rw-r--r--
first import
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
<?php
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
 * WordPress User API
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
 * @package WordPress
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
 * Authenticate user with remember capability.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
 * The credentials is an array that has 'user_login', 'user_password', and
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
 * 'remember' indices. If the credentials is not given, then the log in form
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
 * will be assumed and used if set.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
 * The various authentication cookies will be set by this function and will be
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
 * set for a longer period depending on if the 'remember' credential is set to
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
 * true.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
 * @since 2.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
 * @param array $credentials Optional. User info in order to sign on.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
 * @param bool $secure_cookie Optional. Whether to use secure cookie.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
 * @return object Either WP_Error on failure, or WP_User on success.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
function wp_signon( $credentials = '', $secure_cookie = '' ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
	if ( empty($credentials) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
		if ( ! empty($_POST['log']) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
			$credentials['user_login'] = $_POST['log'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
		if ( ! empty($_POST['pwd']) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
			$credentials['user_password'] = $_POST['pwd'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
		if ( ! empty($_POST['rememberme']) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
			$credentials['remember'] = $_POST['rememberme'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
	if ( !empty($credentials['remember']) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
		$credentials['remember'] = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
	else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
		$credentials['remember'] = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
	// TODO do we deprecate the wp_authentication action?
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
	do_action_ref_array('wp_authenticate', array(&$credentials['user_login'], &$credentials['user_password']));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
	if ( '' === $secure_cookie )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
		$secure_cookie = is_ssl();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
	$secure_cookie = apply_filters('secure_signon_cookie', $secure_cookie, $credentials);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
	global $auth_secure_cookie; // XXX ugly hack to pass this to wp_authenticate_cookie
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
	$auth_secure_cookie = $secure_cookie;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
	add_filter('authenticate', 'wp_authenticate_cookie', 30, 3);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
	$user = wp_authenticate($credentials['user_login'], $credentials['user_password']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
	if ( is_wp_error($user) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
		if ( $user->get_error_codes() == array('empty_username', 'empty_password') ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
			$user = new WP_Error('', '');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
		return $user;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
	wp_set_auth_cookie($user->ID, $credentials['remember'], $secure_cookie);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
	do_action('wp_login', $user->user_login, $user);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
	return $user;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
 * Authenticate the user using the username and password.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
add_filter('authenticate', 'wp_authenticate_username_password', 20, 3);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
function wp_authenticate_username_password($user, $username, $password) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
	if ( is_a($user, 'WP_User') ) { return $user; }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
	if ( empty($username) || empty($password) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
		if ( is_wp_error( $user ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
			return $user;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
		$error = new WP_Error();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
		if ( empty($username) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
			$error->add('empty_username', __('<strong>ERROR</strong>: The username field is empty.'));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
		if ( empty($password) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
			$error->add('empty_password', __('<strong>ERROR</strong>: The password field is empty.'));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
		return $error;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
	$user = get_user_by('login', $username);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
	if ( !$user )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
		return new WP_Error( 'invalid_username', sprintf( __( '<strong>ERROR</strong>: Invalid username. <a href="%s" title="Password Lost and Found">Lost your password</a>?' ), wp_lostpassword_url() ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
	$user = apply_filters('wp_authenticate_user', $user, $password);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
	if ( is_wp_error($user) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
		return $user;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
	if ( !wp_check_password($password, $user->user_pass, $user->ID) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
		return new WP_Error( 'incorrect_password', sprintf( __( '<strong>ERROR</strong>: The password you entered for the username <strong>%1$s</strong> is incorrect. <a href="%2$s" title="Password Lost and Found">Lost your password</a>?' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
		$username, wp_lostpassword_url() ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
	return $user;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
 * Authenticate the user using the WordPress auth cookie.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
function wp_authenticate_cookie($user, $username, $password) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
	if ( is_a($user, 'WP_User') ) { return $user; }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
	if ( empty($username) && empty($password) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
		$user_id = wp_validate_auth_cookie();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
		if ( $user_id )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
			return new WP_User($user_id);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
		global $auth_secure_cookie;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
		if ( $auth_secure_cookie )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
			$auth_cookie = SECURE_AUTH_COOKIE;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
			$auth_cookie = AUTH_COOKIE;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
		if ( !empty($_COOKIE[$auth_cookie]) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
			return new WP_Error('expired_session', __('Please log in again.'));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
		// If the cookie is not set, be silent.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
	return $user;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
 * For multisite blogs, check if the authenticated user has been marked as a
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
 * spammer, or if the user's primary blog has been marked as spam.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
 * @since 3.7.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
function wp_authenticate_spam_check( $user ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
	if ( $user && is_a( $user, 'WP_User' ) && is_multisite() ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
		$spammed = apply_filters( 'check_is_user_spammed', is_user_spammy(), $user );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
		if ( $spammed )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
			return new WP_Error( 'spammer_account', __( '<strong>ERROR</strong>: Your account has been marked as a spammer.' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
	return $user;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
 * Number of posts user has written.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
 * @since 3.0.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
 * @uses $wpdb WordPress database object for queries.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
 * @param int $userid User ID.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
 * @return int Amount of posts user has written.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
function count_user_posts($userid) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   159
	global $wpdb;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   161
	$where = get_posts_by_author_sql('post', true, $userid);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
	$count = $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->posts $where" );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   164
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   165
	return apply_filters('get_usernumposts', $count, $userid);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
 * Number of posts written by a list of users.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
 * @since 3.0.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
 * @param array $users Array of user IDs.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
 * @param string $post_type Optional. Post type to check. Defaults to post.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
 * @param bool $public_only Optional. Only return counts for public posts.  Defaults to false.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
 * @return array Amount of posts each user has written.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
function count_many_users_posts( $users, $post_type = 'post', $public_only = false ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
	global $wpdb;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
	$count = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   182
	if ( empty( $users ) || ! is_array( $users ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   183
		return $count;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   185
	$userlist = implode( ',', array_map( 'absint', $users ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
	$where = get_posts_by_author_sql( $post_type, true, null, $public_only );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   187
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
	$result = $wpdb->get_results( "SELECT post_author, COUNT(*) FROM $wpdb->posts $where AND post_author IN ($userlist) GROUP BY post_author", ARRAY_N );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
	foreach ( $result as $row ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
		$count[ $row[0] ] = $row[1];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   191
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   192
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
	foreach ( $users as $id ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   194
		if ( ! isset( $count[ $id ] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
			$count[ $id ] = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   196
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   198
	return $count;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   199
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   200
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   201
//
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   202
// User option functions
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   203
//
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   204
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   205
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   206
 * Get the current user's ID
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   207
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   208
 * @since MU
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   209
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   210
 * @uses wp_get_current_user
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   211
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   212
 * @return int The current user's ID
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   213
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   214
function get_current_user_id() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   215
	if ( ! function_exists( 'wp_get_current_user' ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   216
		return 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   217
	$user = wp_get_current_user();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   218
	return ( isset( $user->ID ) ? (int) $user->ID : 0 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   219
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   220
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   221
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   222
 * Retrieve user option that can be either per Site or per Network.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   223
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   224
 * If the user ID is not given, then the current user will be used instead. If
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   225
 * the user ID is given, then the user data will be retrieved. The filter for
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   226
 * the result, will also pass the original option name and finally the user data
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   227
 * object as the third parameter.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   228
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   229
 * The option will first check for the per site name and then the per Network name.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   230
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   231
 * @since 2.0.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   232
 * @uses $wpdb WordPress database object for queries.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   233
 * @uses apply_filters() Calls 'get_user_option_$option' hook with result,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   234
 *		option parameter, and user data object.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   235
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   236
 * @param string $option User option name.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   237
 * @param int $user Optional. User ID.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   238
 * @param bool $deprecated Use get_option() to check for an option in the options table.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   239
 * @return mixed
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   240
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   241
function get_user_option( $option, $user = 0, $deprecated = '' ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   242
	global $wpdb;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   243
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   244
	if ( !empty( $deprecated ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   245
		_deprecated_argument( __FUNCTION__, '3.0' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   246
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   247
	if ( empty( $user ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   248
		$user = get_current_user_id();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   249
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   250
	if ( ! $user = get_userdata( $user ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   251
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   252
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   253
	$prefix = $wpdb->get_blog_prefix();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   254
	if ( $user->has_prop( $prefix . $option ) ) // Blog specific
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   255
		$result = $user->get( $prefix . $option );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   256
	elseif ( $user->has_prop( $option ) ) // User specific and cross-blog
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   257
		$result = $user->get( $option );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   258
	else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   259
		$result = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   260
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   261
	return apply_filters("get_user_option_{$option}", $result, $option, $user);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   262
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   263
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   264
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   265
 * Update user option with global blog capability.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   266
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   267
 * User options are just like user metadata except that they have support for
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   268
 * global blog options. If the 'global' parameter is false, which it is by default
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   269
 * it will prepend the WordPress table prefix to the option name.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   270
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   271
 * Deletes the user option if $newvalue is empty.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   272
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   273
 * @since 2.0.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   274
 * @uses $wpdb WordPress database object for queries
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   275
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   276
 * @param int $user_id User ID
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   277
 * @param string $option_name User option name.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   278
 * @param mixed $newvalue User option value.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   279
 * @param bool $global Optional. Whether option name is global or blog specific. Default false (blog specific).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   280
 * @return unknown
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   281
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   282
function update_user_option( $user_id, $option_name, $newvalue, $global = false ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   283
	global $wpdb;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   284
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   285
	if ( !$global )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   286
		$option_name = $wpdb->get_blog_prefix() . $option_name;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   287
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   288
	return update_user_meta( $user_id, $option_name, $newvalue );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   289
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   290
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   291
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   292
 * Delete user option with global blog capability.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   293
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   294
 * User options are just like user metadata except that they have support for
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   295
 * global blog options. If the 'global' parameter is false, which it is by default
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   296
 * it will prepend the WordPress table prefix to the option name.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   297
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   298
 * @since 3.0.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   299
 * @uses $wpdb WordPress database object for queries
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   300
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   301
 * @param int $user_id User ID
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   302
 * @param string $option_name User option name.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   303
 * @param bool $global Optional. Whether option name is global or blog specific. Default false (blog specific).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   304
 * @return unknown
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   305
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   306
function delete_user_option( $user_id, $option_name, $global = false ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   307
	global $wpdb;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   308
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   309
	if ( !$global )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   310
		$option_name = $wpdb->get_blog_prefix() . $option_name;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   311
	return delete_user_meta( $user_id, $option_name );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   312
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   313
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   314
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   315
 * WordPress User Query class.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   316
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   317
 * @since 3.1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   318
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   319
class WP_User_Query {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   320
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   321
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   322
	 * Query vars, after parsing
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   323
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   324
	 * @since 3.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   325
	 * @access public
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   326
	 * @var array
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   327
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   328
	var $query_vars = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   329
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   330
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   331
	 * List of found user ids
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   332
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   333
	 * @since 3.1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   334
	 * @access private
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   335
	 * @var array
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   336
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   337
	var $results;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   338
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   339
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   340
	 * Total number of found users for the current query
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   341
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   342
	 * @since 3.1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   343
	 * @access private
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   344
	 * @var int
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   345
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   346
	var $total_users = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   347
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   348
	// SQL clauses
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   349
	var $query_fields;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   350
	var $query_from;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   351
	var $query_where;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   352
	var $query_orderby;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   353
	var $query_limit;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   354
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   355
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   356
	 * PHP5 constructor
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   357
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   358
	 * @since 3.1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   359
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   360
	 * @param string|array $args The query variables
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   361
	 * @return WP_User_Query
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   362
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   363
	function __construct( $query = null ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   364
		if ( !empty( $query ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   365
			$this->query_vars = wp_parse_args( $query, array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   366
				'blog_id' => $GLOBALS['blog_id'],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   367
				'role' => '',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   368
				'meta_key' => '',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   369
				'meta_value' => '',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   370
				'meta_compare' => '',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   371
				'include' => array(),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   372
				'exclude' => array(),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   373
				'search' => '',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   374
				'search_columns' => array(),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   375
				'orderby' => 'login',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   376
				'order' => 'ASC',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   377
				'offset' => '',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   378
				'number' => '',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   379
				'count_total' => true,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   380
				'fields' => 'all',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   381
				'who' => ''
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   382
			) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   383
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   384
			$this->prepare_query();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   385
			$this->query();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   386
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   387
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   388
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   389
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   390
	 * Prepare the query variables
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   391
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   392
	 * @since 3.1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   393
	 * @access private
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   394
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   395
	function prepare_query() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   396
		global $wpdb;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   397
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   398
		$qv =& $this->query_vars;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   399
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   400
		if ( is_array( $qv['fields'] ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   401
			$qv['fields'] = array_unique( $qv['fields'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   402
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   403
			$this->query_fields = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   404
			foreach ( $qv['fields'] as $field ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   405
				$field = 'ID' === $field ? 'ID' : sanitize_key( $field );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   406
				$this->query_fields[] = "$wpdb->users.$field";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   407
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   408
			$this->query_fields = implode( ',', $this->query_fields );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   409
		} elseif ( 'all' == $qv['fields'] ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   410
			$this->query_fields = "$wpdb->users.*";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   411
		} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   412
			$this->query_fields = "$wpdb->users.ID";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   413
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   414
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   415
		if ( isset( $qv['count_total'] ) && $qv['count_total'] )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   416
			$this->query_fields = 'SQL_CALC_FOUND_ROWS ' . $this->query_fields;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   417
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   418
		$this->query_from = "FROM $wpdb->users";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   419
		$this->query_where = "WHERE 1=1";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   420
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   421
		// sorting
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   422
		if ( isset( $qv['orderby'] ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   423
			if ( in_array( $qv['orderby'], array('nicename', 'email', 'url', 'registered') ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   424
				$orderby = 'user_' . $qv['orderby'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   425
			} elseif ( in_array( $qv['orderby'], array('user_nicename', 'user_email', 'user_url', 'user_registered') ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   426
				$orderby = $qv['orderby'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   427
			} elseif ( 'name' == $qv['orderby'] || 'display_name' == $qv['orderby'] ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   428
				$orderby = 'display_name';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   429
			} elseif ( 'post_count' == $qv['orderby'] ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   430
				// todo: avoid the JOIN
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   431
				$where = get_posts_by_author_sql('post');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   432
				$this->query_from .= " LEFT OUTER JOIN (
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   433
					SELECT post_author, COUNT(*) as post_count
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   434
					FROM $wpdb->posts
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   435
					$where
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   436
					GROUP BY post_author
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   437
				) p ON ({$wpdb->users}.ID = p.post_author)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   438
				";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   439
				$orderby = 'post_count';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   440
			} elseif ( 'ID' == $qv['orderby'] || 'id' == $qv['orderby'] ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   441
				$orderby = 'ID';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   442
			} elseif ( 'meta_value' == $qv['orderby'] ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   443
				$orderby = "$wpdb->usermeta.meta_value";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   444
			} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   445
				$orderby = 'user_login';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   446
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   447
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   448
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   449
		if ( empty( $orderby ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   450
			$orderby = 'user_login';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   451
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   452
		$qv['order'] = isset( $qv['order'] ) ? strtoupper( $qv['order'] ) : '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   453
		if ( 'ASC' == $qv['order'] )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   454
			$order = 'ASC';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   455
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   456
			$order = 'DESC';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   457
		$this->query_orderby = "ORDER BY $orderby $order";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   458
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   459
		// limit
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   460
		if ( isset( $qv['number'] ) && $qv['number'] ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   461
			if ( $qv['offset'] )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   462
				$this->query_limit = $wpdb->prepare("LIMIT %d, %d", $qv['offset'], $qv['number']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   463
			else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   464
				$this->query_limit = $wpdb->prepare("LIMIT %d", $qv['number']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   465
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   466
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   467
		$search = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   468
		if ( isset( $qv['search'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   469
			$search = trim( $qv['search'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   470
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   471
		if ( $search ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   472
			$leading_wild = ( ltrim($search, '*') != $search );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   473
			$trailing_wild = ( rtrim($search, '*') != $search );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   474
			if ( $leading_wild && $trailing_wild )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   475
				$wild = 'both';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   476
			elseif ( $leading_wild )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   477
				$wild = 'leading';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   478
			elseif ( $trailing_wild )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   479
				$wild = 'trailing';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   480
			else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   481
				$wild = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   482
			if ( $wild )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   483
				$search = trim($search, '*');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   484
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   485
			$search_columns = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   486
			if ( $qv['search_columns'] )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   487
				$search_columns = array_intersect( $qv['search_columns'], array( 'ID', 'user_login', 'user_email', 'user_url', 'user_nicename' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   488
			if ( ! $search_columns ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   489
				if ( false !== strpos( $search, '@') )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   490
					$search_columns = array('user_email');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   491
				elseif ( is_numeric($search) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   492
					$search_columns = array('user_login', 'ID');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   493
				elseif ( preg_match('|^https?://|', $search) && ! ( is_multisite() && wp_is_large_network( 'users' ) ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   494
					$search_columns = array('user_url');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   495
				else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   496
					$search_columns = array('user_login', 'user_nicename');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   497
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   498
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   499
			$search_columns = apply_filters( 'user_search_columns', $search_columns, $search, $this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   500
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   501
			$this->query_where .= $this->get_search_sql( $search, $search_columns, $wild );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   502
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   503
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   504
		$blog_id = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   505
		if ( isset( $qv['blog_id'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   506
			$blog_id = absint( $qv['blog_id'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   507
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   508
		if ( isset( $qv['who'] ) && 'authors' == $qv['who'] && $blog_id ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   509
			$qv['meta_key'] = $wpdb->get_blog_prefix( $blog_id ) . 'user_level';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   510
			$qv['meta_value'] = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   511
			$qv['meta_compare'] = '!=';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   512
			$qv['blog_id'] = $blog_id = 0; // Prevent extra meta query
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   513
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   514
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   515
		$role = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   516
		if ( isset( $qv['role'] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   517
			$role = trim( $qv['role'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   518
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   519
		if ( $blog_id && ( $role || is_multisite() ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   520
			$cap_meta_query = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   521
			$cap_meta_query['key'] = $wpdb->get_blog_prefix( $blog_id ) . 'capabilities';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   522
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   523
			if ( $role ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   524
				$cap_meta_query['value'] = '"' . $role . '"';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   525
				$cap_meta_query['compare'] = 'like';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   526
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   527
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   528
			$qv['meta_query'][] = $cap_meta_query;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   529
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   530
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   531
		$meta_query = new WP_Meta_Query();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   532
		$meta_query->parse_query_vars( $qv );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   533
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   534
		if ( !empty( $meta_query->queries ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   535
			$clauses = $meta_query->get_sql( 'user', $wpdb->users, 'ID', $this );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   536
			$this->query_from .= $clauses['join'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   537
			$this->query_where .= $clauses['where'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   538
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   539
			if ( 'OR' == $meta_query->relation )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   540
				$this->query_fields = 'DISTINCT ' . $this->query_fields;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   541
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   542
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   543
		if ( ! empty( $qv['include'] ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   544
			$ids = implode( ',', wp_parse_id_list( $qv['include'] ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   545
			$this->query_where .= " AND $wpdb->users.ID IN ($ids)";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   546
		} elseif ( ! empty( $qv['exclude'] ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   547
			$ids = implode( ',', wp_parse_id_list( $qv['exclude'] ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   548
			$this->query_where .= " AND $wpdb->users.ID NOT IN ($ids)";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   549
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   550
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   551
		do_action_ref_array( 'pre_user_query', array( &$this ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   552
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   553
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   554
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   555
	 * Execute the query, with the current variables
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   556
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   557
	 * @since 3.1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   558
	 * @access private
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   559
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   560
	function query() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   561
		global $wpdb;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   562
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   563
		$qv =& $this->query_vars;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   564
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   565
		if ( is_array( $qv['fields'] ) || 'all' == $qv['fields'] ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   566
			$this->results = $wpdb->get_results("SELECT $this->query_fields $this->query_from $this->query_where $this->query_orderby $this->query_limit");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   567
		} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   568
			$this->results = $wpdb->get_col("SELECT $this->query_fields $this->query_from $this->query_where $this->query_orderby $this->query_limit");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   569
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   570
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   571
		if ( isset( $qv['count_total'] ) && $qv['count_total'] )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   572
			$this->total_users = $wpdb->get_var( apply_filters( 'found_users_query', 'SELECT FOUND_ROWS()' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   573
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   574
		if ( !$this->results )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   575
			return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   576
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   577
		if ( 'all_with_meta' == $qv['fields'] ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   578
			cache_users( $this->results );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   579
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   580
			$r = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   581
			foreach ( $this->results as $userid )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   582
				$r[ $userid ] = new WP_User( $userid, '', $qv['blog_id'] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   583
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   584
			$this->results = $r;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   585
		} elseif ( 'all' == $qv['fields'] ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   586
			foreach ( $this->results as $key => $user ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   587
				$this->results[ $key ] = new WP_User( $user );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   588
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   589
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   590
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   591
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   592
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   593
	 * Retrieve query variable.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   594
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   595
	 * @since 3.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   596
	 * @access public
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   597
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   598
	 * @param string $query_var Query variable key.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   599
	 * @return mixed
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   600
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   601
	function get( $query_var ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   602
		if ( isset( $this->query_vars[$query_var] ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   603
			return $this->query_vars[$query_var];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   604
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   605
		return null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   606
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   607
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   608
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   609
	 * Set query variable.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   610
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   611
	 * @since 3.5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   612
	 * @access public
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   613
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   614
	 * @param string $query_var Query variable key.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   615
	 * @param mixed $value Query variable value.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   616
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   617
	function set( $query_var, $value ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   618
		$this->query_vars[$query_var] = $value;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   619
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   620
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   621
	/*
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   622
	 * Used internally to generate an SQL string for searching across multiple columns
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   623
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   624
	 * @access protected
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   625
	 * @since 3.1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   626
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   627
	 * @param string $string
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   628
	 * @param array $cols
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   629
	 * @param bool $wild Whether to allow wildcard searches. Default is false for Network Admin, true for
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   630
	 *  single site. Single site allows leading and trailing wildcards, Network Admin only trailing.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   631
	 * @return string
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   632
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   633
	function get_search_sql( $string, $cols, $wild = false ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   634
		$string = esc_sql( $string );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   635
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   636
		$searches = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   637
		$leading_wild = ( 'leading' == $wild || 'both' == $wild ) ? '%' : '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   638
		$trailing_wild = ( 'trailing' == $wild || 'both' == $wild ) ? '%' : '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   639
		foreach ( $cols as $col ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   640
			if ( 'ID' == $col )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   641
				$searches[] = "$col = '$string'";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   642
			else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   643
				$searches[] = "$col LIKE '$leading_wild" . like_escape($string) . "$trailing_wild'";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   644
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   645
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   646
		return ' AND (' . implode(' OR ', $searches) . ')';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   647
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   648
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   649
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   650
	 * Return the list of users
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   651
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   652
	 * @since 3.1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   653
	 * @access public
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   654
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   655
	 * @return array
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   656
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   657
	function get_results() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   658
		return $this->results;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   659
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   660
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   661
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   662
	 * Return the total number of users for the current query
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   663
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   664
	 * @since 3.1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   665
	 * @access public
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   666
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   667
	 * @return array
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   668
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   669
	function get_total() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   670
		return $this->total_users;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   671
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   672
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   673
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   674
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   675
 * Retrieve list of users matching criteria.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   676
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   677
 * @since 3.1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   678
 * @uses $wpdb
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   679
 * @uses WP_User_Query See for default arguments and information.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   680
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   681
 * @param array $args Optional.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   682
 * @return array List of users.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   683
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   684
function get_users( $args = array() ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   685
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   686
	$args = wp_parse_args( $args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   687
	$args['count_total'] = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   688
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   689
	$user_search = new WP_User_Query($args);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   690
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   691
	return (array) $user_search->get_results();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   692
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   693
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   694
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   695
 * Get the blogs a user belongs to.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   696
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   697
 * @since 3.0.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   698
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   699
 * @param int $user_id User ID
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   700
 * @param bool $all Whether to retrieve all blogs, or only blogs that are not marked as deleted, archived, or spam.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   701
 * @return array A list of the user's blogs. An empty array if the user doesn't exist or belongs to no blogs.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   702
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   703
function get_blogs_of_user( $user_id, $all = false ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   704
	global $wpdb;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   705
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   706
	$user_id = (int) $user_id;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   707
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   708
	// Logged out users can't have blogs
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   709
	if ( empty( $user_id ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   710
		return array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   711
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   712
	$keys = get_user_meta( $user_id );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   713
	if ( empty( $keys ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   714
		return array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   715
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   716
	if ( ! is_multisite() ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   717
		$blog_id = get_current_blog_id();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   718
		$blogs = array( $blog_id => new stdClass );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   719
		$blogs[ $blog_id ]->userblog_id = $blog_id;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   720
		$blogs[ $blog_id ]->blogname = get_option('blogname');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   721
		$blogs[ $blog_id ]->domain = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   722
		$blogs[ $blog_id ]->path = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   723
		$blogs[ $blog_id ]->site_id = 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   724
		$blogs[ $blog_id ]->siteurl = get_option('siteurl');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   725
		$blogs[ $blog_id ]->archived = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   726
		$blogs[ $blog_id ]->spam = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   727
		$blogs[ $blog_id ]->deleted = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   728
		return $blogs;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   729
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   730
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   731
	$blogs = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   732
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   733
	if ( isset( $keys[ $wpdb->base_prefix . 'capabilities' ] ) && defined( 'MULTISITE' ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   734
		$blog = get_blog_details( 1 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   735
		if ( $blog && isset( $blog->domain ) && ( $all || ( ! $blog->archived && ! $blog->spam && ! $blog->deleted ) ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   736
			$blogs[ 1 ] = (object) array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   737
				'userblog_id' => 1,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   738
				'blogname'    => $blog->blogname,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   739
				'domain'      => $blog->domain,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   740
				'path'        => $blog->path,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   741
				'site_id'     => $blog->site_id,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   742
				'siteurl'     => $blog->siteurl,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   743
				'archived'    => 0,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   744
				'spam'        => 0,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   745
				'deleted'     => 0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   746
			);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   747
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   748
		unset( $keys[ $wpdb->base_prefix . 'capabilities' ] );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   749
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   750
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   751
	$keys = array_keys( $keys );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   752
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   753
	foreach ( $keys as $key ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   754
		if ( 'capabilities' !== substr( $key, -12 ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   755
			continue;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   756
		if ( $wpdb->base_prefix && 0 !== strpos( $key, $wpdb->base_prefix ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   757
			continue;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   758
		$blog_id = str_replace( array( $wpdb->base_prefix, '_capabilities' ), '', $key );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   759
		if ( ! is_numeric( $blog_id ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   760
			continue;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   761
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   762
		$blog_id = (int) $blog_id;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   763
		$blog = get_blog_details( $blog_id );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   764
		if ( $blog && isset( $blog->domain ) && ( $all || ( ! $blog->archived && ! $blog->spam && ! $blog->deleted ) ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   765
			$blogs[ $blog_id ] = (object) array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   766
				'userblog_id' => $blog_id,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   767
				'blogname'    => $blog->blogname,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   768
				'domain'      => $blog->domain,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   769
				'path'        => $blog->path,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   770
				'site_id'     => $blog->site_id,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   771
				'siteurl'     => $blog->siteurl,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   772
				'archived'    => 0,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   773
				'spam'        => 0,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   774
				'deleted'     => 0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   775
			);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   776
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   777
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   778
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   779
	return apply_filters( 'get_blogs_of_user', $blogs, $user_id, $all );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   780
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   781
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   782
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   783
 * Find out whether a user is a member of a given blog.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   784
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   785
 * @since MU 1.1
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   786
 * @uses get_blogs_of_user()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   787
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   788
 * @param int $user_id Optional. The unique ID of the user. Defaults to the current user.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   789
 * @param int $blog_id Optional. ID of the blog to check. Defaults to the current site.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   790
 * @return bool
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   791
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   792
function is_user_member_of_blog( $user_id = 0, $blog_id = 0 ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   793
	$user_id = (int) $user_id;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   794
	$blog_id = (int) $blog_id;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   795
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   796
	if ( empty( $user_id ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   797
		$user_id = get_current_user_id();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   798
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   799
	if ( empty( $blog_id ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   800
		$blog_id = get_current_blog_id();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   801
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   802
	$blogs = get_blogs_of_user( $user_id );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   803
	return array_key_exists( $blog_id, $blogs );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   804
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   805
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   806
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   807
 * Add meta data field to a user.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   808
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   809
 * Post meta data is called "Custom Fields" on the Administration Screens.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   810
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   811
 * @since 3.0.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   812
 * @uses add_metadata()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   813
 * @link http://codex.wordpress.org/Function_Reference/add_user_meta
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   814
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   815
 * @param int $user_id Post ID.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   816
 * @param string $meta_key Metadata name.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   817
 * @param mixed $meta_value Metadata value.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   818
 * @param bool $unique Optional, default is false. Whether the same key should not be added.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   819
 * @return int|bool Meta ID on success, false on failure.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   820
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   821
function add_user_meta($user_id, $meta_key, $meta_value, $unique = false) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   822
	return add_metadata('user', $user_id, $meta_key, $meta_value, $unique);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   823
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   824
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   825
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   826
 * Remove metadata matching criteria from a user.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   827
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   828
 * You can match based on the key, or key and value. Removing based on key and
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   829
 * value, will keep from removing duplicate metadata with the same key. It also
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   830
 * allows removing all metadata matching key, if needed.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   831
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   832
 * @since 3.0.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   833
 * @uses delete_metadata()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   834
 * @link http://codex.wordpress.org/Function_Reference/delete_user_meta
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   835
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   836
 * @param int $user_id user ID
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   837
 * @param string $meta_key Metadata name.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   838
 * @param mixed $meta_value Optional. Metadata value.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   839
 * @return bool True on success, false on failure.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   840
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   841
function delete_user_meta($user_id, $meta_key, $meta_value = '') {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   842
	return delete_metadata('user', $user_id, $meta_key, $meta_value);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   843
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   844
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   845
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   846
 * Retrieve user meta field for a user.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   847
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   848
 * @since 3.0.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   849
 * @uses get_metadata()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   850
 * @link http://codex.wordpress.org/Function_Reference/get_user_meta
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   851
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   852
 * @param int $user_id Post ID.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   853
 * @param string $key Optional. The meta key to retrieve. By default, returns data for all keys.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   854
 * @param bool $single Whether to return a single value.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   855
 * @return mixed Will be an array if $single is false. Will be value of meta data field if $single
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   856
 *  is true.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   857
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   858
function get_user_meta($user_id, $key = '', $single = false) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   859
	return get_metadata('user', $user_id, $key, $single);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   860
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   861
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   862
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   863
 * Update user meta field based on user ID.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   864
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   865
 * Use the $prev_value parameter to differentiate between meta fields with the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   866
 * same key and user ID.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   867
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   868
 * If the meta field for the user does not exist, it will be added.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   869
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   870
 * @since 3.0.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   871
 * @uses update_metadata
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   872
 * @link http://codex.wordpress.org/Function_Reference/update_user_meta
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   873
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   874
 * @param int $user_id Post ID.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   875
 * @param string $meta_key Metadata key.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   876
 * @param mixed $meta_value Metadata value.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   877
 * @param mixed $prev_value Optional. Previous value to check before removing.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   878
 * @return bool True on success, false on failure.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   879
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   880
function update_user_meta($user_id, $meta_key, $meta_value, $prev_value = '') {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   881
	return update_metadata('user', $user_id, $meta_key, $meta_value, $prev_value);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   882
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   883
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   884
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   885
 * Count number of users who have each of the user roles.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   886
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   887
 * Assumes there are neither duplicated nor orphaned capabilities meta_values.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   888
 * Assumes role names are unique phrases. Same assumption made by WP_User_Query::prepare_query()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   889
 * Using $strategy = 'time' this is CPU-intensive and should handle around 10^7 users.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   890
 * Using $strategy = 'memory' this is memory-intensive and should handle around 10^5 users, but see WP Bug #12257.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   891
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   892
 * @since 3.0.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   893
 * @param string $strategy 'time' or 'memory'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   894
 * @return array Includes a grand total and an array of counts indexed by role strings.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   895
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   896
function count_users($strategy = 'time') {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   897
	global $wpdb, $wp_roles;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   898
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   899
	// Initialize
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   900
	$id = get_current_blog_id();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   901
	$blog_prefix = $wpdb->get_blog_prefix($id);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   902
	$result = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   903
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   904
	if ( 'time' == $strategy ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   905
		global $wp_roles;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   906
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   907
		if ( ! isset( $wp_roles ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   908
			$wp_roles = new WP_Roles();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   909
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   910
		$avail_roles = $wp_roles->get_names();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   911
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   912
		// Build a CPU-intensive query that will return concise information.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   913
		$select_count = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   914
		foreach ( $avail_roles as $this_role => $name ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   915
			$select_count[] = "COUNT(NULLIF(`meta_value` LIKE '%\"" . like_escape( $this_role ) . "\"%', false))";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   916
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   917
		$select_count = implode(', ', $select_count);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   918
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   919
		// Add the meta_value index to the selection list, then run the query.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   920
		$row = $wpdb->get_row( "SELECT $select_count, COUNT(*) FROM $wpdb->usermeta WHERE meta_key = '{$blog_prefix}capabilities'", ARRAY_N );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   921
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   922
		// Run the previous loop again to associate results with role names.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   923
		$col = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   924
		$role_counts = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   925
		foreach ( $avail_roles as $this_role => $name ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   926
			$count = (int) $row[$col++];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   927
			if ($count > 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   928
				$role_counts[$this_role] = $count;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   929
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   930
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   931
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   932
		// Get the meta_value index from the end of the result set.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   933
		$total_users = (int) $row[$col];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   934
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   935
		$result['total_users'] = $total_users;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   936
		$result['avail_roles'] =& $role_counts;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   937
	} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   938
		$avail_roles = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   939
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   940
		$users_of_blog = $wpdb->get_col( "SELECT meta_value FROM $wpdb->usermeta WHERE meta_key = '{$blog_prefix}capabilities'" );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   941
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   942
		foreach ( $users_of_blog as $caps_meta ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   943
			$b_roles = maybe_unserialize($caps_meta);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   944
			if ( ! is_array( $b_roles ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   945
				continue;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   946
			foreach ( $b_roles as $b_role => $val ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   947
				if ( isset($avail_roles[$b_role]) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   948
					$avail_roles[$b_role]++;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   949
				} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   950
					$avail_roles[$b_role] = 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   951
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   952
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   953
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   954
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   955
		$result['total_users'] = count( $users_of_blog );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   956
		$result['avail_roles'] =& $avail_roles;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   957
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   958
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   959
	return $result;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   960
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   961
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   962
//
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   963
// Private helper functions
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   964
//
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   965
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   966
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   967
 * Set up global user vars.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   968
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   969
 * Used by wp_set_current_user() for back compat. Might be deprecated in the future.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   970
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   971
 * @since 2.0.4
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   972
 * @global string $userdata User description.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   973
 * @global string $user_login The user username for logging in
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   974
 * @global int $user_level The level of the user
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   975
 * @global int $user_ID The ID of the user
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   976
 * @global string $user_email The email address of the user
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   977
 * @global string $user_url The url in the user's profile
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   978
 * @global string $user_identity The display name of the user
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   979
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   980
 * @param int $for_user_id Optional. User ID to set up global data.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   981
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   982
function setup_userdata($for_user_id = '') {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   983
	global $user_login, $userdata, $user_level, $user_ID, $user_email, $user_url, $user_identity;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   984
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   985
	if ( '' == $for_user_id )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   986
		$for_user_id = get_current_user_id();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   987
	$user = get_userdata( $for_user_id );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   988
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   989
	if ( ! $user ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   990
		$user_ID = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   991
		$user_level = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   992
		$userdata = null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   993
		$user_login = $user_email = $user_url = $user_identity = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   994
		return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   995
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   996
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   997
	$user_ID    = (int) $user->ID;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   998
	$user_level = (int) $user->user_level;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   999
	$userdata   = $user;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1000
	$user_login = $user->user_login;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1001
	$user_email = $user->user_email;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1002
	$user_url   = $user->user_url;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1003
	$user_identity = $user->display_name;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1004
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1005
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1006
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1007
 * Create dropdown HTML content of users.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1008
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1009
 * The content can either be displayed, which it is by default or retrieved by
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1010
 * setting the 'echo' argument. The 'include' and 'exclude' arguments do not
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1011
 * need to be used; all users will be displayed in that case. Only one can be
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1012
 * used, either 'include' or 'exclude', but not both.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1013
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1014
 * The available arguments are as follows:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1015
 * <ol>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1016
 * <li>show_option_all - Text to show all and whether HTML option exists.</li>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1017
 * <li>show_option_none - Text for show none and whether HTML option exists.</li>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1018
 * <li>hide_if_only_one_author - Don't create the dropdown if there is only one user.</li>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1019
 * <li>orderby - SQL order by clause for what order the users appear. Default is 'display_name'.</li>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1020
 * <li>order - Default is 'ASC'. Can also be 'DESC'.</li>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1021
 * <li>include - User IDs to include.</li>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1022
 * <li>exclude - User IDs to exclude.</li>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1023
 * <li>multi - Default is 'false'. Whether to skip the ID attribute on the 'select' element. A 'true' value is overridden when id argument is set.</li>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1024
 * <li>show - Default is 'display_name'. User table column to display. If the selected item is empty then the user_login will be displayed in parentheses</li>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1025
 * <li>echo - Default is '1'. Whether to display or retrieve content.</li>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1026
 * <li>selected - Which User ID is selected.</li>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1027
 * <li>include_selected - Always include the selected user ID in the dropdown. Default is false.</li>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1028
 * <li>name - Default is 'user'. Name attribute of select element.</li>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1029
 * <li>id - Default is the value of the 'name' parameter. ID attribute of select element.</li>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1030
 * <li>class - Class attribute of select element.</li>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1031
 * <li>blog_id - ID of blog (Multisite only). Defaults to ID of current blog.</li>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1032
 * <li>who - Which users to query. Currently only 'authors' is supported. Default is all users.</li>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1033
 * </ol>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1034
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1035
 * @since 2.3.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1036
 * @uses $wpdb WordPress database object for queries
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1037
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1038
 * @param string|array $args Optional. Override defaults.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1039
 * @return string|null Null on display. String of HTML content on retrieve.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1040
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1041
function wp_dropdown_users( $args = '' ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1042
	$defaults = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1043
		'show_option_all' => '', 'show_option_none' => '', 'hide_if_only_one_author' => '',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1044
		'orderby' => 'display_name', 'order' => 'ASC',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1045
		'include' => '', 'exclude' => '', 'multi' => 0,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1046
		'show' => 'display_name', 'echo' => 1,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1047
		'selected' => 0, 'name' => 'user', 'class' => '', 'id' => '',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1048
		'blog_id' => $GLOBALS['blog_id'], 'who' => '', 'include_selected' => false
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1049
	);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1050
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1051
	$defaults['selected'] = is_author() ? get_query_var( 'author' ) : 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1052
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1053
	$r = wp_parse_args( $args, $defaults );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1054
	extract( $r, EXTR_SKIP );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1055
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1056
	$query_args = wp_array_slice_assoc( $r, array( 'blog_id', 'include', 'exclude', 'orderby', 'order', 'who' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1057
	$query_args['fields'] = array( 'ID', 'user_login', $show );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1058
	$users = get_users( $query_args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1059
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1060
	$output = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1061
	if ( !empty($users) && ( empty($hide_if_only_one_author) || count($users) > 1 ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1062
		$name = esc_attr( $name );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1063
		if ( $multi && ! $id )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1064
			$id = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1065
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1066
			$id = $id ? " id='" . esc_attr( $id ) . "'" : " id='$name'";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1067
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1068
		$output = "<select name='{$name}'{$id} class='$class'>\n";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1069
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1070
		if ( $show_option_all )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1071
			$output .= "\t<option value='0'>$show_option_all</option>\n";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1072
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1073
		if ( $show_option_none ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1074
			$_selected = selected( -1, $selected, false );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1075
			$output .= "\t<option value='-1'$_selected>$show_option_none</option>\n";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1076
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1077
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1078
		$found_selected = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1079
		foreach ( (array) $users as $user ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1080
			$user->ID = (int) $user->ID;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1081
			$_selected = selected( $user->ID, $selected, false );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1082
			if ( $_selected )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1083
				$found_selected = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1084
			$display = !empty($user->$show) ? $user->$show : '('. $user->user_login . ')';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1085
			$output .= "\t<option value='$user->ID'$_selected>" . esc_html($display) . "</option>\n";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1086
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1087
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1088
		if ( $include_selected && ! $found_selected && ( $selected > 0 ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1089
			$user = get_userdata( $selected );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1090
			$_selected = selected( $user->ID, $selected, false );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1091
			$display = !empty($user->$show) ? $user->$show : '('. $user->user_login . ')';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1092
			$output .= "\t<option value='$user->ID'$_selected>" . esc_html($display) . "</option>\n";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1093
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1094
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1095
		$output .= "</select>";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1096
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1097
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1098
	$output = apply_filters('wp_dropdown_users', $output);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1099
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1100
	if ( $echo )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1101
		echo $output;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1102
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1103
	return $output;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1104
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1105
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1106
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1107
 * Sanitize user field based on context.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1108
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1109
 * Possible context values are:  'raw', 'edit', 'db', 'display', 'attribute' and 'js'. The
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1110
 * 'display' context is used by default. 'attribute' and 'js' contexts are treated like 'display'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1111
 * when calling filters.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1112
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1113
 * @since 2.3.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1114
 * @uses apply_filters() Calls 'edit_$field' passing $value and $user_id if $context == 'edit'.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1115
 *  $field is prefixed with 'user_' if it isn't already.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1116
 * @uses apply_filters() Calls 'pre_$field' passing $value if $context == 'db'. $field is prefixed with
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1117
 *  'user_' if it isn't already.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1118
 * @uses apply_filters() Calls '$field' passing $value, $user_id and $context if $context == anything
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1119
 *  other than 'raw', 'edit' and 'db'. $field is prefixed with 'user_' if it isn't already.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1120
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1121
 * @param string $field The user Object field name.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1122
 * @param mixed $value The user Object value.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1123
 * @param int $user_id user ID.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1124
 * @param string $context How to sanitize user fields. Looks for 'raw', 'edit', 'db', 'display',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1125
 *               'attribute' and 'js'.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1126
 * @return mixed Sanitized value.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1127
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1128
function sanitize_user_field($field, $value, $user_id, $context) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1129
	$int_fields = array('ID');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1130
	if ( in_array($field, $int_fields) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1131
		$value = (int) $value;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1132
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1133
	if ( 'raw' == $context )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1134
		return $value;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1135
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1136
	if ( !is_string($value) && !is_numeric($value) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1137
		return $value;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1138
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1139
	$prefixed = false !== strpos( $field, 'user_' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1140
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1141
	if ( 'edit' == $context ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1142
		if ( $prefixed ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1143
			$value = apply_filters("edit_{$field}", $value, $user_id);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1144
		} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1145
			$value = apply_filters("edit_user_{$field}", $value, $user_id);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1146
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1147
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1148
		if ( 'description' == $field )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1149
			$value = esc_html( $value ); // textarea_escaped?
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1150
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1151
			$value = esc_attr($value);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1152
	} else if ( 'db' == $context ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1153
		if ( $prefixed ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1154
			$value = apply_filters("pre_{$field}", $value);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1155
		} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1156
			$value = apply_filters("pre_user_{$field}", $value);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1157
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1158
	} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1159
		// Use display filters by default.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1160
		if ( $prefixed )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1161
			$value = apply_filters($field, $value, $user_id, $context);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1162
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1163
			$value = apply_filters("user_{$field}", $value, $user_id, $context);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1164
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1165
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1166
	if ( 'user_url' == $field )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1167
		$value = esc_url($value);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1168
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1169
	if ( 'attribute' == $context )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1170
		$value = esc_attr($value);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1171
	else if ( 'js' == $context )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1172
		$value = esc_js($value);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1173
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1174
	return $value;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1175
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1176
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1177
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1178
 * Update all user caches
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1179
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1180
 * @since 3.0.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1181
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1182
 * @param object $user User object to be cached
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1183
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1184
function update_user_caches($user) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1185
	wp_cache_add($user->ID, $user, 'users');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1186
	wp_cache_add($user->user_login, $user->ID, 'userlogins');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1187
	wp_cache_add($user->user_email, $user->ID, 'useremail');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1188
	wp_cache_add($user->user_nicename, $user->ID, 'userslugs');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1189
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1190
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1191
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1192
 * Clean all user caches
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1193
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1194
 * @since 3.0.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1195
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1196
 * @param WP_User|int $user User object or ID to be cleaned from the cache
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1197
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1198
function clean_user_cache( $user ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1199
	if ( is_numeric( $user ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1200
		$user = new WP_User( $user );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1201
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1202
	if ( ! $user->exists() )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1203
		return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1204
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1205
	wp_cache_delete( $user->ID, 'users' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1206
	wp_cache_delete( $user->user_login, 'userlogins' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1207
	wp_cache_delete( $user->user_email, 'useremail' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1208
	wp_cache_delete( $user->user_nicename, 'userslugs' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1209
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1210
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1211
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1212
 * Checks whether the given username exists.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1213
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1214
 * @since 2.0.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1215
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1216
 * @param string $username Username.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1217
 * @return null|int The user's ID on success, and null on failure.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1218
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1219
function username_exists( $username ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1220
	if ( $user = get_user_by('login', $username ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1221
		return $user->ID;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1222
	} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1223
		return null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1224
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1225
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1226
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1227
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1228
 * Checks whether the given email exists.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1229
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1230
 * @since 2.1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1231
 * @uses $wpdb
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1232
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1233
 * @param string $email Email.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1234
 * @return bool|int The user's ID on success, and false on failure.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1235
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1236
function email_exists( $email ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1237
	if ( $user = get_user_by('email', $email) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1238
		return $user->ID;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1239
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1240
	return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1241
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1242
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1243
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1244
 * Checks whether an username is valid.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1245
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1246
 * @since 2.0.1
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1247
 * @uses apply_filters() Calls 'validate_username' hook on $valid check and $username as parameters
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1248
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1249
 * @param string $username Username.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1250
 * @return bool Whether username given is valid
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1251
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1252
function validate_username( $username ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1253
	$sanitized = sanitize_user( $username, true );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1254
	$valid = ( $sanitized == $username );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1255
	return apply_filters( 'validate_username', $valid, $username );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1256
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1257
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1258
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1259
 * Insert an user into the database.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1260
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1261
 * Can update a current user or insert a new user based on whether the user's ID
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1262
 * is present.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1263
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1264
 * Can be used to update the user's info (see below), set the user's role, and
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1265
 * set the user's preference on whether they want the rich editor on.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1266
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1267
 * Most of the $userdata array fields have filters associated with the values.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1268
 * The exceptions are 'rich_editing', 'role', 'jabber', 'aim', 'yim',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1269
 * 'user_registered', and 'ID'. The filters have the prefix 'pre_user_' followed
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1270
 * by the field name. An example using 'description' would have the filter
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1271
 * called, 'pre_user_description' that can be hooked into.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1272
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1273
 * The $userdata array can contain the following fields:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1274
 * 'ID' - An integer that will be used for updating an existing user.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1275
 * 'user_pass' - A string that contains the plain text password for the user.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1276
 * 'user_login' - A string that contains the user's username for logging in.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1277
 * 'user_nicename' - A string that contains a URL-friendly name for the user.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1278
 *		The default is the user's username.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1279
 * 'user_url' - A string containing the user's URL for the user's web site.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1280
 * 'user_email' - A string containing the user's email address.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1281
 * 'display_name' - A string that will be shown on the site. Defaults to user's
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1282
 *		username. It is likely that you will want to change this, for appearance.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1283
 * 'nickname' - The user's nickname, defaults to the user's username.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1284
 * 'first_name' - The user's first name.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1285
 * 'last_name' - The user's last name.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1286
 * 'description' - A string containing content about the user.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1287
 * 'rich_editing' - A string for whether to enable the rich editor. False
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1288
 *		if not empty.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1289
 * 'user_registered' - The date the user registered. Format is 'Y-m-d H:i:s'.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1290
 * 'role' - A string used to set the user's role.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1291
 * 'jabber' - User's Jabber account.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1292
 * 'aim' - User's AOL IM account.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1293
 * 'yim' - User's Yahoo IM account.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1294
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1295
 * @since 2.0.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1296
 * @uses $wpdb WordPress database layer.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1297
 * @uses apply_filters() Calls filters for most of the $userdata fields with the prefix 'pre_user'. See note above.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1298
 * @uses do_action() Calls 'profile_update' hook when updating giving the user's ID
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1299
 * @uses do_action() Calls 'user_register' hook when creating a new user giving the user's ID
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1300
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1301
 * @param mixed $userdata An array of user data or a user object of type stdClass or WP_User.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1302
 * @return int|WP_Error The newly created user's ID or a WP_Error object if the user could not be created.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1303
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1304
function wp_insert_user( $userdata ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1305
	global $wpdb;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1306
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1307
	if ( is_a( $userdata, 'stdClass' ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1308
		$userdata = get_object_vars( $userdata );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1309
	elseif ( is_a( $userdata, 'WP_User' ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1310
		$userdata = $userdata->to_array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1311
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1312
	extract( $userdata, EXTR_SKIP );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1313
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1314
	// Are we updating or creating?
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1315
	if ( !empty($ID) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1316
		$ID = (int) $ID;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1317
		$update = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1318
		$old_user_data = WP_User::get_data_by( 'id', $ID );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1319
	} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1320
		$update = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1321
		// Hash the password
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1322
		$user_pass = wp_hash_password($user_pass);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1323
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1324
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1325
	$user_login = sanitize_user($user_login, true);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1326
	$user_login = apply_filters('pre_user_login', $user_login);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1327
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1328
	//Remove any non-printable chars from the login string to see if we have ended up with an empty username
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1329
	$user_login = trim($user_login);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1330
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1331
	if ( empty($user_login) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1332
		return new WP_Error('empty_user_login', __('Cannot create a user with an empty login name.') );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1333
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1334
	if ( !$update && username_exists( $user_login ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1335
		return new WP_Error( 'existing_user_login', __( 'Sorry, that username already exists!' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1336
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1337
	if ( empty($user_nicename) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1338
		$user_nicename = sanitize_title( $user_login );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1339
	$user_nicename = apply_filters('pre_user_nicename', $user_nicename);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1340
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1341
	if ( empty($user_url) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1342
		$user_url = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1343
	$user_url = apply_filters('pre_user_url', $user_url);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1344
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1345
	if ( empty($user_email) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1346
		$user_email = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1347
	$user_email = apply_filters('pre_user_email', $user_email);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1348
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1349
	if ( !$update && ! defined( 'WP_IMPORTING' ) && email_exists($user_email) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1350
		return new WP_Error( 'existing_user_email', __( 'Sorry, that email address is already used!' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1351
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1352
	if ( empty($nickname) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1353
		$nickname = $user_login;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1354
	$nickname = apply_filters('pre_user_nickname', $nickname);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1355
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1356
	if ( empty($first_name) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1357
		$first_name = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1358
	$first_name = apply_filters('pre_user_first_name', $first_name);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1359
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1360
	if ( empty($last_name) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1361
		$last_name = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1362
	$last_name = apply_filters('pre_user_last_name', $last_name);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1363
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1364
	if ( empty( $display_name ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1365
		if ( $update )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1366
			$display_name = $user_login;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1367
		elseif ( $first_name && $last_name )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1368
			/* translators: 1: first name, 2: last name */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1369
			$display_name = sprintf( _x( '%1$s %2$s', 'Display name based on first name and last name' ), $first_name, $last_name );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1370
		elseif ( $first_name )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1371
			$display_name = $first_name;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1372
		elseif ( $last_name )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1373
			$display_name = $last_name;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1374
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1375
			$display_name = $user_login;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1376
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1377
	$display_name = apply_filters( 'pre_user_display_name', $display_name );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1378
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1379
	if ( empty($description) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1380
		$description = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1381
	$description = apply_filters('pre_user_description', $description);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1382
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1383
	if ( empty($rich_editing) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1384
		$rich_editing = 'true';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1385
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1386
	if ( empty($comment_shortcuts) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1387
		$comment_shortcuts = 'false';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1388
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1389
	if ( empty($admin_color) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1390
		$admin_color = 'fresh';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1391
	$admin_color = preg_replace('|[^a-z0-9 _.\-@]|i', '', $admin_color);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1392
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1393
	if ( empty($use_ssl) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1394
		$use_ssl = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1395
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1396
	if ( empty($user_registered) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1397
		$user_registered = gmdate('Y-m-d H:i:s');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1398
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1399
	if ( empty($show_admin_bar_front) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1400
		$show_admin_bar_front = 'true';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1401
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1402
	$user_nicename_check = $wpdb->get_var( $wpdb->prepare("SELECT ID FROM $wpdb->users WHERE user_nicename = %s AND user_login != %s LIMIT 1" , $user_nicename, $user_login));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1403
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1404
	if ( $user_nicename_check ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1405
		$suffix = 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1406
		while ($user_nicename_check) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1407
			$alt_user_nicename = $user_nicename . "-$suffix";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1408
			$user_nicename_check = $wpdb->get_var( $wpdb->prepare("SELECT ID FROM $wpdb->users WHERE user_nicename = %s AND user_login != %s LIMIT 1" , $alt_user_nicename, $user_login));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1409
			$suffix++;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1410
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1411
		$user_nicename = $alt_user_nicename;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1412
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1413
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1414
	$data = compact( 'user_pass', 'user_email', 'user_url', 'user_nicename', 'display_name', 'user_registered' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1415
	$data = wp_unslash( $data );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1416
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1417
	if ( $update ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1418
		$wpdb->update( $wpdb->users, $data, compact( 'ID' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1419
		$user_id = (int) $ID;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1420
	} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1421
		$wpdb->insert( $wpdb->users, $data + compact( 'user_login' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1422
		$user_id = (int) $wpdb->insert_id;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1423
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1424
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1425
	$user = new WP_User( $user_id );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1426
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1427
	foreach ( _get_additional_user_keys( $user ) as $key ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1428
		if ( isset( $$key ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1429
			update_user_meta( $user_id, $key, $$key );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1430
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1431
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1432
	if ( isset($role) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1433
		$user->set_role($role);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1434
	elseif ( !$update )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1435
		$user->set_role(get_option('default_role'));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1436
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1437
	wp_cache_delete($user_id, 'users');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1438
	wp_cache_delete($user_login, 'userlogins');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1439
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1440
	if ( $update )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1441
		do_action('profile_update', $user_id, $old_user_data);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1442
	else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1443
		do_action('user_register', $user_id);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1444
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1445
	return $user_id;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1446
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1447
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1448
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1449
 * Update an user in the database.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1450
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1451
 * It is possible to update a user's password by specifying the 'user_pass'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1452
 * value in the $userdata parameter array.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1453
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1454
 * If current user's password is being updated, then the cookies will be
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1455
 * cleared.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1456
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1457
 * @since 2.0.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1458
 * @see wp_insert_user() For what fields can be set in $userdata
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1459
 * @uses wp_insert_user() Used to update existing user or add new one if user doesn't exist already
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1460
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1461
 * @param mixed $userdata An array of user data or a user object of type stdClass or WP_User.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1462
 * @return int|WP_Error The updated user's ID or a WP_Error object if the user could not be updated.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1463
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1464
function wp_update_user($userdata) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1465
	if ( is_a( $userdata, 'stdClass' ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1466
		$userdata = get_object_vars( $userdata );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1467
	elseif ( is_a( $userdata, 'WP_User' ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1468
		$userdata = $userdata->to_array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1469
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1470
	$ID = (int) $userdata['ID'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1471
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1472
	// First, get all of the original fields
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1473
	$user_obj = get_userdata( $ID );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1474
	if ( ! $user_obj )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1475
		return new WP_Error( 'invalid_user_id', __( 'Invalid user ID.' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1476
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1477
	$user = $user_obj->to_array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1478
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1479
	// Add additional custom fields
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1480
	foreach ( _get_additional_user_keys( $user_obj ) as $key ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1481
		$user[ $key ] = get_user_meta( $ID, $key, true );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1482
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1483
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1484
	// Escape data pulled from DB.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1485
	$user = add_magic_quotes( $user );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1486
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1487
	// If password is changing, hash it now.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1488
	if ( ! empty($userdata['user_pass']) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1489
		$plaintext_pass = $userdata['user_pass'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1490
		$userdata['user_pass'] = wp_hash_password($userdata['user_pass']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1491
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1492
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1493
	wp_cache_delete($user[ 'user_email' ], 'useremail');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1494
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1495
	// Merge old and new fields with new fields overwriting old ones.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1496
	$userdata = array_merge($user, $userdata);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1497
	$user_id = wp_insert_user($userdata);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1498
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1499
	// Update the cookies if the password changed.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1500
	$current_user = wp_get_current_user();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1501
	if ( $current_user->ID == $ID ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1502
		if ( isset($plaintext_pass) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1503
			wp_clear_auth_cookie();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1504
			wp_set_auth_cookie($ID);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1505
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1506
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1507
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1508
	return $user_id;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1509
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1510
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1511
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1512
 * A simpler way of inserting an user into the database.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1513
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1514
 * Creates a new user with just the username, password, and email. For more
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1515
 * complex user creation use wp_insert_user() to specify more information.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1516
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1517
 * @since 2.0.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1518
 * @see wp_insert_user() More complete way to create a new user
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1519
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1520
 * @param string $username The user's username.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1521
 * @param string $password The user's password.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1522
 * @param string $email The user's email (optional).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1523
 * @return int The new user's ID.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1524
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1525
function wp_create_user($username, $password, $email = '') {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1526
	$user_login = wp_slash( $username );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1527
	$user_email = wp_slash( $email    );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1528
	$user_pass = $password;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1529
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1530
	$userdata = compact('user_login', 'user_email', 'user_pass');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1531
	return wp_insert_user($userdata);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1532
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1533
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1534
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1535
 * Return a list of meta keys that wp_insert_user() is supposed to set.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1536
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1537
 * @since 3.3.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1538
 * @access private
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1539
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1540
 * @param object $user WP_User instance.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1541
 * @return array
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1542
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1543
function _get_additional_user_keys( $user ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1544
	$keys = array( 'first_name', 'last_name', 'nickname', 'description', 'rich_editing', 'comment_shortcuts', 'admin_color', 'use_ssl', 'show_admin_bar_front' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1545
	return array_merge( $keys, array_keys( wp_get_user_contact_methods( $user ) ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1546
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1547
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1548
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1549
 * Set up the user contact methods.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1550
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1551
 * Default contact methods were removed in 3.6. A filter dictates contact methods.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1552
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1553
 * @since 3.7.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1554
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1555
 * @param WP_User $user Optional. WP_User object.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1556
 * @return array Array of contact methods and their labels.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1557
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1558
function wp_get_user_contact_methods( $user = null ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1559
	$methods = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1560
	if ( get_site_option( 'initial_db_version' ) < 23588 ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1561
		$methods = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1562
			'aim'    => __( 'AIM' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1563
			'yim'    => __( 'Yahoo IM' ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1564
			'jabber' => __( 'Jabber / Google Talk' )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1565
		);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1566
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1567
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1568
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1569
	 * Filter the user contact methods.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1570
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1571
	 * @since 2.9.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1572
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1573
	 * @param array   $methods Array of contact methods and their labels.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1574
 	 * @param WP_User $user    Optional. WP_User object.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1575
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1576
	return apply_filters( 'user_contactmethods', $methods, $user );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1577
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1578
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1579
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1580
 * The old private function for setting up user contact methods.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1581
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1582
 * @since 2.9.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1583
 * @access private
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1584
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1585
function _wp_get_user_contactmethods( $user = null ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1586
	return wp_get_user_contact_methods( $user );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1587
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1588
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1589
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1590
 * Retrieves a user row based on password reset key and login
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1591
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1592
 * A key is considered 'expired' if it exactly matches the value of the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1593
 * user_activation_key field, rather than being matched after going through the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1594
 * hashing process. This field is now hashed; old values are no longer accepted
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1595
 * but have a different WP_Error code so good user feedback can be provided.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1596
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1597
 * @uses $wpdb WordPress Database object
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1598
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1599
 * @param string $key       Hash to validate sending user's password.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1600
 * @param string $login     The user login.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1601
 * @return WP_User|WP_Error WP_User object on success, WP_Error object for invalid or expired keys.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1602
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1603
function check_password_reset_key($key, $login) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1604
	global $wpdb, $wp_hasher;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1605
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1606
	$key = preg_replace('/[^a-z0-9]/i', '', $key);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1607
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1608
	if ( empty( $key ) || !is_string( $key ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1609
		return new WP_Error('invalid_key', __('Invalid key'));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1610
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1611
	if ( empty($login) || !is_string($login) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1612
		return new WP_Error('invalid_key', __('Invalid key'));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1613
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1614
	$row = $wpdb->get_row( $wpdb->prepare( "SELECT ID, user_activation_key FROM $wpdb->users WHERE user_login = %s", $login ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1615
	if ( ! $row )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1616
		return new WP_Error('invalid_key', __('Invalid key'));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1617
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1618
	if ( empty( $wp_hasher ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1619
		require_once ABSPATH . 'wp-includes/class-phpass.php';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1620
		$wp_hasher = new PasswordHash( 8, true );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1621
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1622
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1623
	if ( $wp_hasher->CheckPassword( $key, $row->user_activation_key ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1624
		return get_userdata( $row->ID );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1625
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1626
	if ( $key === $row->user_activation_key ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1627
		$return = new WP_Error( 'expired_key', __( 'Invalid key' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1628
		$user_id = $row->ID;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1629
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1630
		/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1631
		 * Filter the return value of check_password_reset_key() when an
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1632
		 * old-style key is used (plain-text key was stored in the database).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1633
		 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1634
		 * @since 3.7.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1635
		 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1636
		 * @param WP_Error $return  A WP_Error object denoting an expired key.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1637
		 *                          Return a WP_User object to validate the key.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1638
		 * @param int      $user_id The matched user ID.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1639
		 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1640
		return apply_filters( 'password_reset_key_expired', $return, $user_id );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1641
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1642
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1643
	return new WP_Error( 'invalid_key', __( 'Invalid key' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1644
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1645
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1646
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1647
 * Handles resetting the user's password.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1648
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1649
 * @param object $user The user
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1650
 * @param string $new_pass New password for the user in plaintext
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1651
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1652
function reset_password( $user, $new_pass ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1653
	do_action( 'password_reset', $user, $new_pass );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1654
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1655
	wp_set_password( $new_pass, $user->ID );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1656
	update_user_option( $user->ID, 'default_password_nag', false, true );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1657
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1658
	wp_password_change_notification( $user );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1659
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1660
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1661
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1662
 * Handles registering a new user.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1663
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1664
 * @param string $user_login User's username for logging in
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1665
 * @param string $user_email User's email address to send password and add
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1666
 * @return int|WP_Error Either user's ID or error on failure.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1667
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1668
function register_new_user( $user_login, $user_email ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1669
	$errors = new WP_Error();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1670
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1671
	$sanitized_user_login = sanitize_user( $user_login );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1672
	$user_email = apply_filters( 'user_registration_email', $user_email );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1673
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1674
	// Check the username
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1675
	if ( $sanitized_user_login == '' ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1676
		$errors->add( 'empty_username', __( '<strong>ERROR</strong>: Please enter a username.' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1677
	} elseif ( ! validate_username( $user_login ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1678
		$errors->add( 'invalid_username', __( '<strong>ERROR</strong>: This username is invalid because it uses illegal characters. Please enter a valid username.' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1679
		$sanitized_user_login = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1680
	} elseif ( username_exists( $sanitized_user_login ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1681
		$errors->add( 'username_exists', __( '<strong>ERROR</strong>: This username is already registered. Please choose another one.' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1682
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1683
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1684
	// Check the e-mail address
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1685
	if ( $user_email == '' ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1686
		$errors->add( 'empty_email', __( '<strong>ERROR</strong>: Please type your e-mail address.' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1687
	} elseif ( ! is_email( $user_email ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1688
		$errors->add( 'invalid_email', __( '<strong>ERROR</strong>: The email address isn&#8217;t correct.' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1689
		$user_email = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1690
	} elseif ( email_exists( $user_email ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1691
		$errors->add( 'email_exists', __( '<strong>ERROR</strong>: This email is already registered, please choose another one.' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1692
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1693
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1694
	do_action( 'register_post', $sanitized_user_login, $user_email, $errors );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1695
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1696
	$errors = apply_filters( 'registration_errors', $errors, $sanitized_user_login, $user_email );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1697
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1698
	if ( $errors->get_error_code() )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1699
		return $errors;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1700
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1701
	$user_pass = wp_generate_password( 12, false );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1702
	$user_id = wp_create_user( $sanitized_user_login, $user_pass, $user_email );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1703
	if ( ! $user_id || is_wp_error( $user_id ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1704
		$errors->add( 'registerfail', sprintf( __( '<strong>ERROR</strong>: Couldn&#8217;t register you&hellip; please contact the <a href="mailto:%s">webmaster</a> !' ), get_option( 'admin_email' ) ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1705
		return $errors;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1706
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1707
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1708
	update_user_option( $user_id, 'default_password_nag', true, true ); //Set up the Password change nag.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1709
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1710
	wp_new_user_notification( $user_id, $user_pass );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1711
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1712
	return $user_id;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1713
}