Skip to:
Content

  • Home
  • Activity
  • Members
  • reference
WB Remedy

Code Reference

  • Home
  • Activity
  • Members
  • reference
Filter by type:
Search
Browse: Home / reference / Classes / BP_REST_Signup_Endpoint / BP_REST_Signup_Endpoint::create_item()

BP_REST_Signup_Endpoint::create_item( WP_REST_Request $request )

Create signup.

Contents

  • Parameters
  • Return
    • Source
  • Related
    • Uses
  • Changelog
  • User Contributed Notes

Parameters #Parameters

$request

(WP_REST_Request) (Required) Full data about the request.


Top ↑

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


Top ↑

Related #Related

Top ↑

Uses #Uses

Uses
Uses Description
bp-members/classes/class-bp-signup.php: BP_Signup::add()

Add a signup.

bp-members/classes/class-bp-rest-signup-endpoint.php: BP_REST_Signup_Endpoint::is_blog_signup_allowed()

Is it possible to signup with a blog?

bp-members/classes/class-bp-rest-signup-endpoint.php: BP_REST_Signup_Endpoint::get_available_languages()

Get site’s available locales.

bp-members/classes/class-bp-rest-signup-endpoint.php: BP_REST_Signup_Endpoint::check_user_password()

Check a user password for the REST API.

bp-members/classes/class-bp-rest-signup-endpoint.php: BP_REST_Signup_Endpoint::get_signup_object()

Get signup object.

bp-members/classes/class-bp-rest-signup-endpoint.php: BP_REST_Signup_Endpoint::prepare_item_for_response()

Prepares signup to return as an object.

bp-members/classes/class-bp-rest-signup-endpoint.php: bp_rest_signup_create_item_meta

Allow plugins to add their signup meta specific to the BP REST API.

bp-members/classes/class-bp-rest-signup-endpoint.php: bp_rest_signup_create_item

Fires after a signup item is created via the REST API.

bp-members/bp-members-functions.php: bp_core_signup_send_validation_email()

Send activation email to a newly registered user.

bp-members/bp-members-functions.php: bp_core_validate_user_signup()

Validate a user name and email address when creating a new user.

bp-members/bp-members-functions.php: bp_core_validate_blog_signup()

Validate blog URL and title provided at signup.

bp-members/bp-members-functions.php: bp_core_signup_send_activation_key

Filters if BuddyPress should send an activation key for a new signup.

Show 7 more uses Hide more uses

Top ↑

Changelog #Changelog

Changelog
Version Description
6.0.0 Introduced.

Top ↑

User Contributed Notes #User Contributed Notes

You must log in before being able to contribute a note or feedback.


See also: WordPress.org • bbPress.org • BuddyPress.org • Matt • Blog RSS

Follow BuddyPress on Twitter • GPL • Contact Us • Privacy • Terms of Service

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.