From d57c5405331728081a3c51f555df6f9d8997d43f Mon Sep 17 00:00:00 2001 From: Robin H. Johnson Date: Sun, 3 Oct 2010 18:52:34 -0700 Subject: [PATCH 1/2] Creation of users with specific ID. - wp_insert_user: new user_preferred_id field - wp_create_user: new $preferred_user_id argument - wpmu_create_user: new $preferred_user_id argument - Document wpmu_create_user function. --- wp-admin/includes/upgrade.php | 4 ++-- wp-admin/ms-edit.php | 4 ++-- wp-includes/deprecated.php | 2 +- wp-includes/ms-functions.php | 20 +++++++++++++++++--- wp-includes/registration.php | 19 +++++++++++++++---- wp-login.php | 2 +- 6 files changed, 38 insertions(+), 13 deletions(-) diff --git a/wp-admin/includes/upgrade.php b/wp-admin/includes/upgrade.php index 7ae2384..7129601 100644 --- a/wp-admin/includes/upgrade.php +++ b/wp-admin/includes/upgrade.php @@ -66,13 +66,13 @@ function wp_install( $blog_title, $user_name, $user_email, $public, $deprecated if ( !$user_id && empty($user_password) ) { $user_password = wp_generate_password(); $message = __('Note that password carefully! It is a random password that was generated just for you.'); - $user_id = wp_create_user($user_name, $user_password, $user_email); + $user_id = wp_create_user($user_name, $user_password, $user_email, -1); update_user_option($user_id, 'default_password_nag', true, true); $email_password = true; } else if ( !$user_id ) { // Password has been provided $message = ''.__('Your chosen password.').''; - $user_id = wp_create_user($user_name, $user_password, $user_email); + $user_id = wp_create_user($user_name, $user_password, $user_email, -1); } else { $message = __('User already exists. Password inherited.'); } diff --git a/wp-admin/ms-edit.php b/wp-admin/ms-edit.php index c58c25c..5f2ad8d 100644 --- a/wp-admin/ms-edit.php +++ b/wp-admin/ms-edit.php @@ -178,7 +178,7 @@ switch ( $_GET['action'] ) { $user_id = email_exists($email); if ( !$user_id ) { // Create a new user with a random password $password = wp_generate_password(); - $user_id = wpmu_create_user( $domain, $password, $email ); + $user_id = wpmu_create_user( $domain, $password, $email, -1 ); if ( false == $user_id ) wp_die( __( 'There was an error creating the user.' ) ); else @@ -614,7 +614,7 @@ switch ( $_GET['action'] ) { wp_die( __( 'Missing email.' ) ); $password = wp_generate_password(); - $user_id = wpmu_create_user( esc_html( strtolower( $user['username'] ) ), $password, esc_html( $user['email'] ) ); + $user_id = wpmu_create_user( esc_html( strtolower( $user['username'] ) ), $password, esc_html( $user['email'] ), -1 ); if ( false == $user_id ) wp_die( __( 'Duplicated username or email address.' ) ); diff --git a/wp-includes/deprecated.php b/wp-includes/deprecated.php index c32a288..2443cee 100644 --- a/wp-includes/deprecated.php +++ b/wp-includes/deprecated.php @@ -1233,7 +1233,7 @@ function comments_rss() { */ function create_user($username, $password, $email) { _deprecated_function( __FUNCTION__, '2.0', 'wp_create_user()' ); - return wp_create_user($username, $password, $email); + return wp_create_user($username, $password, $email, -1); } /** diff --git a/wp-includes/ms-functions.php b/wp-includes/ms-functions.php index 2b54862..28dddc9 100644 --- a/wp-includes/ms-functions.php +++ b/wp-includes/ms-functions.php @@ -697,7 +697,7 @@ function wpmu_activate_signup($key) { $user_id = username_exists($user_login); if ( ! $user_id ) - $user_id = wpmu_create_user($user_login, $password, $user_email); + $user_id = wpmu_create_user($user_login, $password, $user_email, -1); else $user_already_exists = true; @@ -745,10 +745,24 @@ function wpmu_activate_signup($key) { return array('blog_id' => $blog_id, 'user_id' => $user_id, 'password' => $password, 'title' => $signup->title, 'meta' => $meta); } -function wpmu_create_user( $user_name, $password, $email) { +/** + * A simple way of inserting a non-privileged multi-site user into the database + * + * Creates a new user with just the username, password, and email. For a more + * detail creation of a user, use wp_insert_user() to specify more infomation. + * + * @since 3.0.0 + * + * @param string $username The user's username. + * @param string $password The user's password. + * @param string $email The user's email (optional). + * @param int $preferred_user_id Preferred ID for new user (optional). + * @return int The new user's ID. + */ +function wpmu_create_user( $user_name, $password, $email, $preferred_user_id = -1) { $user_name = preg_replace( '/\s+/', '', sanitize_user( $user_name, true ) ); - $user_id = wp_create_user( $user_name, $password, $email ); + $user_id = wp_create_user( $user_name, $password, $email, $preferred_user_id ); if ( is_wp_error($user_id) ) return false; diff --git a/wp-includes/registration.php b/wp-includes/registration.php index 63f70e2..1aa05c9 100644 --- a/wp-includes/registration.php +++ b/wp-includes/registration.php @@ -67,6 +67,9 @@ function validate_username( $username ) { * by the field name. An example using 'description' would have the filter * called, 'pre_user_description' that can be hooked into. * + * If you use the 'user_preferred_id' field, you MUST ensure that your + * auto-increment sequence will not collide with it. + * * The $userdata array can contain the following fields: * 'ID' - An integer that will be used for updating an existing user. * 'user_pass' - A string that contains the plain text password for the user. @@ -90,6 +93,7 @@ function validate_username( $username ) { * 'jabber' - User's Jabber account. * 'aim' - User's AOL IM account. * 'yim' - User's Yahoo IM account. + * 'user_preferred_id' - During user creation only, ID to create user with * * @since 2.0.0 * @uses $wpdb WordPress database layer. @@ -198,7 +202,12 @@ function wp_insert_user($userdata) { $wpdb->update( $wpdb->users, $data, compact( 'ID' ) ); $user_id = (int) $ID; } else { - $wpdb->insert( $wpdb->users, $data + compact( 'user_login' ) ); + $tmpdata = $data + compact( 'user_login' ); + if(!empty($user_preferred_id) && is_numeric($user_preferred_id) && $user_preferred_id > 0) { + $tmpdata += array('ID' => $user_preferred_id); + } + $wpdb->insert( $wpdb->users, $tmpdata ); + unset($tmpdata); $user_id = (int) $wpdb->insert_id; } @@ -301,14 +310,16 @@ function wp_update_user($userdata) { * @param string $username The user's username. * @param string $password The user's password. * @param string $email The user's email (optional). - * @return int The new user's ID. + * @param int $preferred_user_id Preferred ID for new user (optional). + * @return int The new user's ID. False on failure. */ -function wp_create_user($username, $password, $email = '') { +function wp_create_user($username, $password, $email = '', $preferred_user_id = -1) { $user_login = esc_sql( $username ); $user_email = esc_sql( $email ); $user_pass = $password; + $user_preferred_id = $preferred_user_id; - $userdata = compact('user_login', 'user_email', 'user_pass'); + $userdata = compact('user_login', 'user_email', 'user_pass', 'user_preferred_id'); return wp_insert_user($userdata); } diff --git a/wp-login.php b/wp-login.php index c97edd9..94ab55d 100644 --- a/wp-login.php +++ b/wp-login.php @@ -305,7 +305,7 @@ function register_new_user( $user_login, $user_email ) { return $errors; $user_pass = wp_generate_password(); - $user_id = wp_create_user( $sanitized_user_login, $user_pass, $user_email ); + $user_id = wp_create_user( $sanitized_user_login, $user_pass, $user_email, -1); if ( ! $user_id ) { $errors->add( 'registerfail', sprintf( __( 'ERROR: Couldn’t register you... please contact the webmaster !' ), get_option( 'admin_email' ) ) ); return $errors; -- 1.7.3