bp_core_activate_signup( string $key )
Activate a signup, as identified by an activation key.
Description
Parameters
- $key
-
(Required) Activation key.
Return
(int|bool) User ID on success, false on failure.
Source
File: bp-members/bp-members-functions.php
function bp_core_activate_signup( $key ) {
global $wpdb;
$user = false;
// Multisite installs have their own activation routine.
if ( is_multisite() ) {
$user = wpmu_activate_signup( $key );
// If there were errors, add a message and redirect.
if ( ! empty( $user->errors ) ) {
return $user;
}
$user_id = $user['user_id'];
} else {
$signups = BP_Signup::get( array(
'activation_key' => $key,
) );
if ( empty( $signups['signups'] ) ) {
return new WP_Error( 'invalid_key', __( 'Invalid activation key.', 'buddyboss' ) );
}
$signup = $signups['signups'][0];
if ( $signup->active ) {
if ( empty( $signup->domain ) ) {
return new WP_Error( 'already_active', __( 'The user is already active.', 'buddyboss' ), $signup );
} else {
return new WP_Error( 'already_active', __( 'The site is already active.', 'buddyboss' ), $signup );
}
}
// Password is hashed again in wp_insert_user.
$password = wp_generate_password( 12, false );
$user_id = username_exists( $signup->user_login );
// Create the user. This should only be necessary if BP_SIGNUPS_SKIP_USER_CREATION is true.
if ( ! $user_id ) {
$user_id = wp_create_user( $signup->user_login, $password, $signup->user_email );
// Otherwise, update the existing user's status.
} elseif ( $key === bp_get_user_meta( $user_id, 'activation_key', true ) || $key === wp_hash( $user_id ) ) {
// Change the user's status so they become active.
if ( ! $wpdb->query( $wpdb->prepare( "UPDATE {$wpdb->users} SET user_status = 0 WHERE ID = %d", $user_id ) ) ) {
return new WP_Error( 'invalid_key', __( 'Invalid activation key.', 'buddyboss' ) );
}
bp_delete_user_meta( $user_id, 'activation_key' );
$user_already_created = true;
} else {
$user_already_exists = true;
}
if ( ! $user_id ) {
return new WP_Error( 'create_user', __( 'Could not create user', 'buddyboss' ), $signup );
}
// Fetch the signup so we have the data later on.
$signups = BP_Signup::get( array(
'activation_key' => $key,
) );
$signup = isset( $signups['signups'] ) && ! empty( $signups['signups'][0] ) ? $signups['signups'][0] : false;
// Activate the signup.
BP_Signup::validate( $key );
if ( isset( $user_already_exists ) ) {
return new WP_Error( 'user_already_exists', __( 'That username is already activated.', 'buddyboss' ), $signup );
}
// Set up data to pass to the legacy filter.
$user = array(
'user_id' => $user_id,
'password' => $signup->meta['password'],
'meta' => $signup->meta,
);
/**
* Maybe notify the site admin of a new user registration.
*
* @since BuddyPress 1.2.2
*
* @param bool $notification Whether to send the notification or not.
*/
if ( apply_filters( 'bp_core_send_user_registration_admin_notification', true ) ) {
wp_new_user_notification( $user_id );
}
if ( isset( $user_already_created ) ) {
/**
* Fires if the user has already been created.
*
* @since BuddyPress 1.2.2
*
* @param int $user_id ID of the user being checked.
* @param string $key Activation key.
* @param array $user Array of user data.
*/
do_action( 'bp_core_activated_user', $user_id, $key, $user );
return $user_id;
}
}
// Set any profile data.
if ( bp_is_active( 'xprofile' ) ) {
if ( ! empty( $user['meta']['profile_field_ids'] ) ) {
$profile_field_ids = explode( ',', $user['meta']['profile_field_ids'] );
foreach( (array) $profile_field_ids as $field_id ) {
$current_field = isset( $user['meta']["field_{$field_id}"] ) ? $user['meta']["field_{$field_id}"] : false;
if ( !empty( $current_field ) ) {
xprofile_set_field_data( $field_id, $user_id, $current_field );
}
/*
* Save the visibility level.
*
* Use the field's default visibility if not present, and 'public' if a
* default visibility is not defined.
*/
$key = "field_{$field_id}_visibility";
if ( isset( $user['meta'][ $key ] ) ) {
$visibility_level = $user['meta'][ $key ];
} else {
$vfield = xprofile_get_field( $field_id );
$visibility_level = isset( $vfield->default_visibility ) ? $vfield->default_visibility : 'public';
}
xprofile_set_field_visibility_level( $field_id, $user_id, $visibility_level );
}
}
}
// Replace the password automatically generated by WordPress by the one the user chose.
if ( ! empty( $user['meta']['password'] ) ) {
$wpdb->query( $wpdb->prepare( "UPDATE {$wpdb->users} SET user_pass = %s WHERE ID = %d", $user['meta']['password'], $user_id ) );
/**
* Make sure to clean the user's cache as we've
* directly edited the password without using
* wp_update_user().
*
* If we can't use wp_update_user() that's because
* we already hashed the password at the signup step.
*/
$uc = wp_cache_get( $user_id, 'users' );
if ( ! empty( $uc->ID ) ) {
clean_user_cache( $uc->ID );
}
}
/**
* Fires at the end of the user activation process.
*
* @since BuddyPress 1.2.2
*
* @param int $user_id ID of the user being checked.
* @param string $key Activation key.
* @param array $user Array of user data.
*/
do_action( 'bp_core_activated_user', $user_id, $key, $user );
return $user_id;
}
Changelog
| Version | Description |
|---|---|
| BuddyPress 1.2.2 | Introduced. |
Questions?
We're always happy to help with code or other questions you might have! Search our developer docs, contact support, or connect with our sales team.