Automattic\WooCommerce\Internal\StockNotifications\Frontend
SignupService::signup
Signup.
Method of the class: SignupService{}
Hooks from the method
Returns
SignupResult|\WP_Error. The signup result.
Usage
$SignupService = new SignupService(); $SignupService->signup( $product_id, $user_id, $user_email, $posted_attributes );
- $product_id(int) (required)
- The product ID.
- $user_id(int) (required)
- The user ID.
- $user_email(string) (required)
- The user email.
- $posted_attributes(array)
- The posted attributes (Optional).
Default: array()
SignupService::signup() SignupService::signup code WC 10.3.6
public function signup( int $product_id, int $user_id, string $user_email, array $posted_attributes = array() ) {
// Sanity checks.
if ( ! Config::allows_signups() ) {
return new \WP_Error( self::ERROR_FAILED );
}
if ( empty( $user_email ) && empty( $user_id ) ) {
return new \WP_Error( self::ERROR_INVALID_REQUEST );
}
$product = wc_get_product( $product_id );
if ( ! $product ) {
return new \WP_Error( self::ERROR_INVALID_PRODUCT );
}
if ( ! $this->eligibility_service->is_product_eligible( $product ) ) {
return new \WP_Error( self::ERROR_INVALID_PRODUCT );
}
if ( $this->eligibility_service->is_stock_status_eligible( $product->get_stock_status() ) ) {
return new \WP_Error( self::ERROR_INVALID_REQUEST );
}
if ( ! $this->eligibility_service->product_allows_signups( $product ) ) {
return new \WP_Error( self::ERROR_INVALID_PRODUCT );
}
$notification = $this->is_already_signed_up( $product_id, $user_id, $user_email, $posted_attributes );
if ( $notification instanceof Notification ) {
if ( NotificationStatus::ACTIVE === $notification->get_status() ) {
return new SignupResult( self::SIGNUP_ALREADY_JOINED, $notification );
}
if ( NotificationStatus::PENDING === $notification->get_status() ) {
if ( Config::requires_double_opt_in() ) {
return new SignupResult( self::SIGNUP_ALREADY_JOINED_DOUBLE_OPT_IN, $notification );
}
// If the notification is pending and double opt-in is not required, skip and activate the notification.
$notification->set_status( NotificationStatus::ACTIVE );
$notification->save();
/**
* Action: woocommerce_customer_stock_notifications_signup
*
* @since 10.2.0
*
* @param Notification $notification The notification.
*/
do_action( 'woocommerce_customer_stock_notifications_signup', $notification );
return new SignupResult( self::SIGNUP_SUCCESS, $notification );
}
}
$account_created = null;
if ( empty( $user_id ) && Config::creates_account_on_signup() ) {
$account_created = $this->create_customer( $user_email );
$user_id = $account_created ? $account_created : $user_id;
}
$notification = new Notification();
$notification->set_status( NotificationStatus::ACTIVE );
$notification->set_product_id( $product_id );
$notification->set_user_id( $user_id );
$notification->set_user_email( $user_email );
if ( ! empty( $posted_attributes ) ) {
$notification->update_meta_data( 'posted_attributes', $posted_attributes );
}
if ( Config::requires_double_opt_in() ) {
$notification->set_status( NotificationStatus::PENDING );
}
$saved = $notification->save();
if ( ! $saved ) {
return new \WP_Error( self::ERROR_FAILED );
}
/**
* Action: woocommerce_customer_stock_notifications_signup
*
* @since 10.2.0
*
* @param Notification $notification The notification.
*/
do_action( 'woocommerce_customer_stock_notifications_signup', $notification );
$signup_code = self::SIGNUP_SUCCESS;
if ( Config::requires_double_opt_in() ) {
$signup_code = $account_created
? self::SIGNUP_SUCCESS_ACCOUNT_CREATED_DOUBLE_OPT_IN
: self::SIGNUP_SUCCESS_DOUBLE_OPT_IN;
} elseif ( $account_created ) {
$signup_code = self::SIGNUP_SUCCESS_ACCOUNT_CREATED;
}
return new SignupResult( $signup_code, $notification );
}