BP_REST_Signup_Endpoint::create_item( WP_REST_Request $request )
Create signup.
Parameters Parameters
- $request
-
(WP_REST_Request) (Required) Full data about the request.
Return Return
(WP_REST_Response|WP_Error)
Source Source
File: bp-members/classes/class-bp-rest-signup-endpoint.php
public function create_item( $request ) { $request->set_param( 'context', 'edit' ); // Validate user signup. $signup_validation = bp_core_validate_user_signup( $request['user_login'], $request['user_email'] ); if ( is_wp_error( $signup_validation['errors'] ) && $signup_validation['errors']->get_error_messages() ) { // Return the first error. return new WP_Error( 'bp_rest_signup_validation_failed', $signup_validation['errors']->get_error_message(), array( 'status' => 500, ) ); } // Use the validated login and email. $user_login = $signup_validation['user_name']; $user_email = $signup_validation['user_email']; // Init the signup meta. $meta = array(); // Init Some Multisite specific variables. $domain = ''; $path = ''; $site_title = ''; $site_name = ''; if ( is_multisite() ) { $user_login = preg_replace( '/\s+/', '', sanitize_user( $user_login, true ) ); $user_email = sanitize_email( $user_email ); $wp_key_suffix = $user_email; if ( $this->is_blog_signup_allowed() ) { $site_title = $request->get_param( 'site_title' ); $site_name = $request->get_param( 'site_name' ); if ( $site_title && $site_name ) { // Validate the blog signup. $blog_signup_validation = bp_core_validate_blog_signup( $site_name, $site_title ); if ( is_wp_error( $blog_signup_validation['errors'] ) && $blog_signup_validation['errors']->get_error_messages() ) { // Return the first error. return new WP_Error( 'bp_rest_blog_signup_validation_failed', $blog_signup_validation['errors']->get_error_message(), array( 'status' => 500, ) ); } $domain = $blog_signup_validation['domain']; $wp_key_suffix = $domain; $path = $blog_signup_validation['path']; $site_title = $blog_signup_validation['blog_title']; $site_public = (bool) $request->get_param( 'site_public' ); $meta = array( 'lang_id' => 1, 'public' => $site_public ? 1 : 0, ); $site_language = $request->get_param( 'site_language' ); $languages = $this->get_available_languages(); if ( in_array( $site_language, $languages, true ) ) { $language = wp_unslash( sanitize_text_field( $site_language ) ); if ( $language ) { $meta['WPLANG'] = $language; } } } } } $password = $request->get_param( 'password' ); $check_password = $this->check_user_password( $password ); if ( is_wp_error( $check_password ) ) { return $check_password; } // Hash and store the password. $meta['password'] = wp_hash_password( $password ); $user_name = $request->get_param( 'user_name' ); if ( $user_name ) { $meta['field_1'] = $user_name; $meta['profile_field_ids'] = 1; } if ( is_multisite() ) { // On Multisite, use the WordPress way to generate the activation key. $activation_key = substr( md5( time() . wp_rand() . $wp_key_suffix ), 0, 16 ); if ( $site_title && $site_name ) { /** This filter is documented in wp-includes/ms-functions.php */ $meta = apply_filters( 'signup_site_meta', $meta, $domain, $path, $site_title, $user_login, $user_email, $activation_key ); } else { /** This filter is documented in wp-includes/ms-functions.php */ $meta = apply_filters( 'signup_user_meta', $meta, $user_login, $user_email, $activation_key ); } } else { $activation_key = wp_generate_password( 32, false ); } /** * Allow plugins to add their signup meta specific to the BP REST API. * * @since 6.0.0 * * @param array $meta The signup meta. * @param WP_REST_Request $request The request sent to the API. */ $meta = apply_filters( 'bp_rest_signup_create_item_meta', $meta, $request ); $signup_args = array( 'user_login' => $user_login, 'user_email' => $user_email, 'activation_key' => $activation_key, 'domain' => $domain, 'path' => $path, 'title' => $site_title, 'meta' => $meta, ); // Add signup. $id = \BP_Signup::add( $signup_args ); if ( ! is_numeric( $id ) ) { return new WP_Error( 'bp_rest_signup_cannot_create', __( 'Cannot create new signup.', 'buddypress' ), array( 'status' => 500, ) ); } $signup = $this->get_signup_object( $id ); $signup_update = $this->update_additional_fields_for_object( $signup, $request ); if ( is_wp_error( $signup_update ) ) { return $signup_update; } if ( is_multisite() ) { if ( $site_title && $site_name ) { /** This action is documented in wp-includes/ms-functions.php */ do_action( 'after_signup_site', $signup->domain, $signup->path, $signup->title, $signup->user_login, $signup->user_email, $signup->activation_key, $signup->meta ); } else { /** This action is documented in wp-includes/ms-functions.php */ do_action( 'after_signup_user', $signup->user_login, $signup->user_email, $signup->activation_key, $signup->meta ); } } else { /** This filter is documented in bp-members/bp-members-functions.php */ if ( apply_filters( 'bp_core_signup_send_activation_key', true, false, $signup->user_email, $signup->activation_key, $signup->meta ) ) { $salutation = $signup->user_login; if ( isset( $signup->user_name ) && $signup->user_name ) { $salutation = $signup->user_name; } bp_core_signup_send_validation_email( false, $signup->user_email, $signup->activation_key, $salutation ); } } $retval = array( $this->prepare_response_for_collection( $this->prepare_item_for_response( $signup, $request ) ), ); $response = rest_ensure_response( $retval ); /** * Fires after a signup item is created via the REST API. * * @since 6.0.0 * * @param BP_Signup $signup The created signup. * @param WP_REST_Response $response The response data. * @param WP_REST_Request $request The request sent to the API. */ do_action( 'bp_rest_signup_create_item', $signup, $response, $request ); return $response; }
Expand full source code Collapse full source code View on Trac
Changelog Changelog
Version | Description |
---|---|
6.0.0 | Introduced. |