/** * Activate a signup. * * Hook to 'wpmu_activate_user' or 'wpmu_activate_blog' for events * that should happen only when users or sites are self-created (since * those actions are not called when users and sites are created * by a Super Admin). * * @since MU * @uses wp_generate_password() * @uses wpmu_welcome_user_notification() * @uses add_user_to_blog() * @uses add_new_user_to_blog() * @uses wpmu_create_user() * @uses wpmu_create_blog() * @uses wpmu_welcome_notification() * * @param string $key The activation key provided to the user. * @return array An array containing information about the activated user and/or blog */ function wpmu_activate_signup($key) { global $wpdb, $current_site; $signup = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->signups} WHERE activation_key = %s", $key)); if (empty($signup)) { return new WP_Error('invalid_key', __('Invalid activation key.')); } if ($signup->active) { if (empty($signup->domain)) { return new WP_Error('already_active', __('The user is already active.'), $signup); } else { return new WP_Error('already_active', __('The site is already active.'), $signup); } } $meta = unserialize($signup->meta); $user_login = $wpdb->escape($signup->user_login); $user_email = $wpdb->escape($signup->user_email); $password = wp_generate_password(12, false); $user_id = username_exists($user_login); if (!$user_id) { $user_id = wpmu_create_user($user_login, $password, $user_email); } else { $user_already_exists = true; } if (!$user_id) { return new WP_Error('create_user', __('Could not create user'), $signup); } $now = current_time('mysql', true); if (empty($signup->domain)) { $wpdb->update($wpdb->signups, array('active' => 1, 'activated' => $now), array('activation_key' => $key)); if (isset($user_already_exists)) { return new WP_Error('user_already_exists', __('That username is already activated.'), $signup); } wpmu_welcome_user_notification($user_id, $password, $meta); add_new_user_to_blog($user_id, $user_email, $meta); do_action('wpmu_activate_user', $user_id, $password, $meta); return array('user_id' => $user_id, 'password' => $password, 'meta' => $meta); } $blog_id = wpmu_create_blog($signup->domain, $signup->path, $signup->title, $user_id, $meta, $wpdb->siteid); // TODO: What to do if we create a user but cannot create a blog? if (is_wp_error($blog_id)) { // If blog is taken, that means a previous attempt to activate this blog failed in between creating the blog and // setting the activation flag. Let's just set the active flag and instruct the user to reset their password. if ('blog_taken' == $blog_id->get_error_code()) { $blog_id->add_data($signup); $wpdb->update($wpdb->signups, array('active' => 1, 'activated' => $now), array('activation_key' => $key)); } return $blog_id; } $wpdb->update($wpdb->signups, array('active' => 1, 'activated' => $now), array('activation_key' => $key)); wpmu_welcome_notification($blog_id, $user_id, $password, $signup->title, $meta); do_action('wpmu_activate_blog', $blog_id, $user_id, $password, $signup->title, $meta); return array('blog_id' => $blog_id, 'user_id' => $user_id, 'password' => $password, 'title' => $signup->title, 'meta' => $meta); }
function activate_signup($key) { global $wpdb; $signup = $wpdb->get_row($wpdb->prepare("select * from {$wpdb->signups} where activation_key = %s", $key)); if (empty($signup)) { return new \WP_Error('invalid_key', __('Invalid activation key.', 'mtv')); } if ($signup->active) { return new \WP_Error('already_active', __('This account is already activated.', 'mtv'), $signup); } $user_meta = unserialize($signup->meta); $user_login = $wpdb->escape($signup->user_login); $user_email = $wpdb->escape($signup->user_email); $user_pass = $user_meta['user_pass']; $user_id = username_exists($user_login); if (!$user_id) { $user_id = wpmu_create_user($user_login, wp_generate_password(12, false), $user_email); } if (!$user_id) { return new \WP_Error('create_user', __('Could not create user', 'mtv'), $signup); } // Be sure to unset the user pass because // we don't want to store it as meta once // the user is activated unset($user_meta['user_pass']); foreach ($user_meta as $k => $v) { update_user_meta($user_id, $k, $v); } $wpdb->update($wpdb->users, array('user_pass' => $user_pass, 'user_activation_key' => ''), array('ID' => $user_id)); $wpdb->update($wpdb->signups, array('active' => 1, 'activated' => current_time('mysql', true), 'meta' => ''), array('activation_key' => $key)); add_new_user_to_blog($user_id, $user_email, ''); return array('user_id' => $user_id, 'password' => $password, 'meta' => $meta); }