db->iterate_data(
$data['elements'],
function ( $element ) {
if ( isset( $element['widgetType'] ) && 'uael-registration-form' === $element['widgetType'] ) {
if ( ! empty( $element['settings']['select_role'] ) ) {
$element['settings']['select_role'] = 'default';
}
}
return $element;
}
);
}
return $data;
}
);
}
}
/**
* Show extra phone field on user profile page.
*
* @since 1.30.0
* @param object $user WP_User object.
* @access public
*/
public static function show_user_extra_field( $user ) {
$phone = get_user_meta( $user->ID, 'phone', true );
if ( empty( $phone ) ) {
return;
}
?>
user_login );
$message = self::$email_content['message'];
$find = array( '/\[field=password\]/', '/\[field=username\]/', '/\[field=email\]/', '/\[field=first_name\]/', '/\[field=last_name\]/' );
$replacement = array( self::$email_content['pass'], self::$email_content['user_login'], self::$email_content['user_email'], self::$email_content['first_name'], self::$email_content['last_name'] );
if ( isset( self::$email_content['pass'] ) ) {
$message = preg_replace( $find, $replacement, $message );
}
$wp_new_user_notification_email['message'] = $message;
$wp_new_user_notification_email['headers'] = self::$email_content['headers'];
}
return $wp_new_user_notification_email;
}
/**
* Get Form Data via AJAX call.
*
* @since 1.18.0
* @access public
*/
public function get_form_data() {
check_ajax_referer( 'uael_register_user', 'nonce' );
$data = array();
$error = array();
$response = array();
$allow_register = get_option( 'users_can_register' );
$is_widget_active = UAEL_Helper::is_widget_active( 'RegistrationForm' );
if ( isset( $_POST['data'] ) && $allow_register && true === $is_widget_active ) {
$data = array_map( 'sanitize_text_field', $_POST['data'] );
if ( isset( $data['is_recaptcha_enabled'] ) ) {
if ( 'yes' === sanitize_text_field( $data['is_recaptcha_enabled'] ) ) {
$recaptcha_token = sanitize_text_field( $data['recaptcha_token'] );
if ( empty( $recaptcha_token ) ) {
$error['recaptcha'] = __( 'The Captcha field cannot be blank. Please enter a value.', 'uael' );
}
$recaptcha_errors = array(
'missing-input-secret' => __( 'The secret parameter is missing.', 'uael' ),
'invalid-input-secret' => __( 'The secret parameter is invalid or malformed.', 'uael' ),
'missing-input-response' => __( 'The response parameter is missing.', 'uael' ),
'invalid-input-response' => __( 'The response parameter is invalid or malformed.', 'uael' ),
);
$recaptcha_response = $recaptcha_token;
$integration_option = UAEL_Helper::get_integrations_options();
$recaptcha_secret = $integration_option['recaptcha_v3_secretkey'];
$client_ip = UAEL_Helper::get_client_ip();
$recaptcha_score = $integration_option['recaptcha_v3_score'];
if ( 0 > $recaptcha_score || 1 < $recaptcha_score ) {
$recaptcha_score = 0.5;
}
$request = array(
'body' => array(
'secret' => $recaptcha_secret,
'response' => $recaptcha_response,
'remoteip' => $client_ip,
),
);
$response = wp_remote_post( 'https://www.google.com/recaptcha/api/siteverify', $request );
$response_code = wp_remote_retrieve_response_code( $response );
if ( 200 !== (int) $response_code ) {
/* translators: %d admin link */
$error['recaptcha'] = sprintf( __( 'Can not connect to the reCAPTCHA server (%d).', 'uael' ), $response_code );
} else {
$body = wp_remote_retrieve_body( $response );
$result = json_decode( $body, true );
$action = ( ( isset( $result['action'] ) && 'Form' === $result['action'] ) && ( $result['score'] > $recaptcha_score ) );
if ( ! $result['success'] ) {
if ( ! $action ) {
$message = __( 'Invalid Form - reCAPTCHA validation failed', 'uael' );
if ( isset( $result['error-codes'] ) ) {
$result_errors = array_flip( $result['error-codes'] );
foreach ( $recaptcha_errors as $error_key => $error_desc ) {
if ( isset( $result_errors[ $error_key ] ) ) {
$message = $recaptcha_errors[ $error_key ];
break;
}
}
}
$error['recaptcha'] = $message;
}
}
}
}
}
$post_id = $data['page_id'];
$widget_id = $data['widget_id'];
$elementor = \Elementor\Plugin::$instance;
$meta = $elementor->documents->get( $post_id )->get_elements_data();
$widget_data = $this->find_element_recursive( $meta, $widget_id );
$widget = $elementor->elements_manager->create_element_instance( $widget_data );
$settings = $widget->get_settings();
if ( 'both' === $data['send_email'] && 'custom' === $settings['email_template'] ) {
self::$email_content['subject'] = $settings['email_subject'];
self::$email_content['message'] = $settings['email_content'];
self::$email_content['headers'] = 'Content-Type: text/' . $settings['email_content_type'] . '; charset=UTF-8' . "\r\n";
}
self::$email_content['template_type'] = $settings['email_template'];
$user_role = ( 'default' !== $settings['select_role'] && ! empty( $settings['select_role'] ) ) ? $settings['select_role'] : get_option( 'default_role' );
/* Checking Email address. */
if ( isset( $data['email'] ) && ! is_email( $data['email'] ) ) {
$error['email'] = __( 'The email address is incorrect.', 'uael' );
} elseif ( email_exists( $data['email'] ) ) {
$error['email'] = __( 'An account is already registered with your email address. Please choose another one.', 'uael' );
}
/* Checking User name. */
if ( isset( $data['user_name'] ) && ! empty( $data['user_name'] ) && ! validate_username( $data['user_name'] ) ) {
$error['user_name'] = __( 'This username is invalid because it uses illegal characters. Please enter a valid username.', 'uael' );
} elseif ( isset( $data['user_name'] ) && ( mb_strlen( $data['user_name'] ) > 60 ) && validate_username( $data['user_name'] ) ) {
$error['user_name'] = __( 'Username may not be longer than 60 characters.', 'uael' );
} elseif ( isset( $data['user_name'] ) && username_exists( $data['user_name'] ) ) {
$error['user_name'] = __( 'This username is already registered. Please choose another one.', 'uael' );
} elseif ( isset( $data['user_name'] ) && ! empty( $data['user_name'] ) ) {
/** This Filters the list of blacklisted usernames. */
$illegal_logins = (array) apply_filters( 'uael_illegal_user_logins', array() );
if ( in_array( strtolower( $data['user_name'] ), array_map( 'strtolower', $illegal_logins ), true ) ) {
$error['user_login'] = __( 'Sorry, that username is not allowed.', 'uael' );
}
}
/* Get username from e-mail address */
if ( ! isset( $data['user_name'] ) || empty( $data['user_name'] ) ) {
$email_username = $this->uael_create_username( $data['email'], '' );
$data['user_name'] = sanitize_user( $email_username );
}
// Handle password creation.
$password_generated = false;
$user_pass = '';
if ( ! isset( $data['password'] ) && empty( $data['password'] ) ) {
$user_pass = wp_generate_password();
$password_generated = true;
} else {
/* Checking User Password. */
if ( false !== strpos( wp_unslash( $data['password'] ), '\\' ) ) {
$error['password'] = __( 'Password may not contain the character "\\"', 'uael' );
} else {
$user_pass = $data['password'];
}
}
$user_login = ( isset( $data['user_name'] ) && ! empty( $data['user_name'] ) ) ? sanitize_user( $data['user_name'], true ) : '';
$user_email = ( isset( $data['email'] ) && ! empty( $data['email'] ) ) ? sanitize_text_field( wp_unslash( $data['email'] ) ) : '';
$first_name = ( isset( $data['first_name'] ) && ! empty( $data['first_name'] ) ) ? sanitize_text_field( wp_unslash( $data['first_name'] ) ) : '';
$last_name = ( isset( $data['last_name'] ) && ! empty( $data['last_name'] ) ) ? sanitize_text_field( wp_unslash( $data['last_name'] ) ) : '';
$phone = ( isset( $data['phone'] ) && ! empty( $data['phone'] ) ) ? sanitize_text_field( wp_unslash( $data['phone'] ) ) : '';
if ( ! empty( $error ) ) {
// If there are items in our errors array, return those errors.
$response['success'] = false;
$response['error'] = $error;
} else {
self::$email_content['user_login'] = $user_login;
self::$email_content['user_email'] = $user_email;
self::$email_content['first_name'] = $first_name;
self::$email_content['last_name'] = $last_name;
$user_args = apply_filters(
'uael_register_insert_user_args',
array(
'user_login' => isset( $user_login ) ? $user_login : '',
'user_pass' => isset( $user_pass ) ? $user_pass : '',
'user_email' => isset( $user_email ) ? $user_email : '',
'first_name' => isset( $first_name ) ? $first_name : '',
'last_name' => isset( $last_name ) ? $last_name : '',
'user_registered' => gmdate( 'Y-m-d H:i:s' ),
'role' => isset( $user_role ) ? $user_role : '',
'phone' => isset( $phone ) ? $phone : '',
),
$data
);
$phone_val = $user_args['phone'];
if ( 'administrator' === $user_args['role'] || 'editor' === $user_args['role'] ) {
$user_args['role'] = get_option( 'default_role' );
}
unset( $user_args['phone'] );
$result = wp_insert_user( $user_args );
if ( ! is_wp_error( $result ) ) {
update_user_meta( $result, 'phone', $phone_val );
}
if ( ! is_wp_error( $result ) ) {
// show a message of success and provide a true success variable.
$response['success'] = true;
$response['message'] = __( 'successfully registered', 'uael' );
$notify = $data['send_email'];
/* Login user after registration and redirect to home page if not currently logged in */
if ( ! is_user_logged_in() && 'yes' === $data['auto_login'] ) {
$creds = array();
$creds['user_login'] = $user_login;
$creds['user_password'] = $user_pass;
$creds['remember'] = true;
$login_user = wp_signon( $creds, false );
}
if ( $result ) {
// Send email to the user even if the send email option is disabled.
self::$email_content['pass'] = $user_pass;
}
/**
* Fires after a new user has been created.
*
* @since 1.18.0
*
* @param int $user_id ID of the newly created user.
* @param string $notify Type of notification that should happen. See wp_send_new_user_notifications()
* for more information on possible values.
*/
do_action( 'edit_user_created_user', $result, $notify );
} else {
$response['error'] = wp_send_json_error();
}
}
wp_send_json( $response );
} else {
die;
}
}
/**
* Get Widget Setting data.
*
* @since 1.18.0
* @access public
* @param array $elements Element array.
* @param string $form_id Element ID.
* @return Boolean True/False.
*/
public function find_element_recursive( $elements, $form_id ) {
foreach ( $elements as $element ) {
if ( $form_id === $element['id'] ) {
return $element;
}
if ( ! empty( $element['elements'] ) ) {
$element = $this->find_element_recursive( $element['elements'], $form_id );
if ( $element ) {
return $element;
}
}
}
return false;
}
/**
* Create a unique username for a new customer.
*
* @since 1.18.0
* @access public
* @param string $email New customer email address.
* @param string $suffix Append string to username to make it unique.
* @return string Generated username.
*/
public function uael_create_username( $email, $suffix ) {
$username_parts = array();
// If there are no parts, e.g. name had unicode chars, or was not provided, fallback to email.
if ( empty( $username_parts ) ) {
$email_parts = explode( '@', $email );
$email_username = $email_parts[0];
// Exclude common prefixes.
if ( in_array(
$email_username,
array(
'sales',
'hello',
'mail',
'contact',
'info',
),
true
) ) {
// Get the domain part.
$email_username = $email_parts[1];
}
$username_parts[] = sanitize_user( $email_username, true );
}
$username = strtolower( implode( '', $username_parts ) );
if ( $suffix ) {
$username .= $suffix;
}
if ( username_exists( $username ) ) {
// Generate something unique to append to the username in case of a conflict with another user.
$suffix = '-' . zeroise( wp_rand( 0, 9999 ), 4 );
return $this->uael_create_username( $email, $suffix );
}
return $username;
}
}