| |
| <?php
|
|
|
|
|
|
|
|
|
|
|
| defined( 'ABSPATH' ) || exit;
|
|
|
|
|
| add_filter( 'wcv_signup_form_config', function( $config ) {
|
| $config = is_array( $config ) ? $config : array();
|
|
|
| $has_core_username = array_key_exists( 'username', $config );
|
| $has_custom_username = array_key_exists( 'wcv_cf_username', $config );
|
|
|
|
|
| if ( $has_core_username && $has_custom_username ) {
|
| unset( $config['username'] );
|
| $has_core_username = false;
|
| }
|
|
|
|
|
| if ( ! $has_core_username && ! $has_custom_username ) {
|
| $config['wcv_cf_username'] = array(
|
| 'type' => 'text',
|
| 'label' => __( 'Username', 'wc-vendors-signup' ),
|
| 'required' => true,
|
| 'deletable' => false,
|
| 'editable' => true,
|
| 'order' => 1,
|
| 'enabled' => true,
|
| 'placeholder' => __( 'Choose a username', 'wc-vendors-signup' ),
|
| 'is_default' => false,
|
| 'show_on_checkout' => false,
|
| );
|
| }
|
|
|
| return $config;
|
| }, 5 );
|
|
|
|
|
| function wcv_signup_get_username_field_key() {
|
| $config = apply_filters( 'wcv_signup_form_config', get_option( 'wcv_signup_form_config', array() ) );
|
|
|
|
|
| if ( isset( $config['wcv_cf_username'] ) && ! empty( $config['wcv_cf_username']['enabled'] ) ) {
|
| return 'wcv_cf_username';
|
| }
|
|
|
| if ( isset( $config['username'] ) && ! empty( $config['username']['enabled'] ) ) {
|
| return 'username';
|
| }
|
| return null;
|
| }
|
|
|
| add_filter( 'wcv_signup_validation_errors', function( $errors, $form_data ) {
|
| $username_key = wcv_signup_get_username_field_key();
|
| if ( ! $username_key ) {
|
| return $errors;
|
| }
|
|
|
|
|
| $config = apply_filters( 'wcv_signup_form_config', get_option( 'wcv_signup_form_config', array() ) );
|
| $field = $config[ $username_key ];
|
|
|
| $is_enabled = ! empty( $field['enabled'] );
|
| $is_required = ! empty( $field['required'] );
|
| $label = isset( $field['label'] ) ? (string) $field['label'] : __( 'Username', 'wc-vendors-signup' );
|
| $raw_value = isset( $form_data[ $username_key ] ) ? (string) $form_data[ $username_key ] : '';
|
| $value = sanitize_user( $raw_value, true );
|
|
|
| if ( ! $is_enabled ) {
|
| return $errors;
|
| }
|
|
|
| if ( $is_required && $value === '' ) {
|
| $errors[ $username_key ] = array(
|
| 'message' => __( 'Please enter a username.', 'wc-vendors-signup' ),
|
| 'label' => $label,
|
| );
|
| return $errors;
|
| }
|
|
|
|
|
| if ( $value !== '' ) {
|
| if ( strlen( $value ) < 3 ) {
|
| $errors[ $username_key ] = array(
|
| 'message' => __( 'Username must be at least 3 characters.', 'wc-vendors-signup' ),
|
| 'label' => $label,
|
| );
|
| return $errors;
|
| }
|
| if ( $value !== sanitize_user( $value, true ) ) {
|
| $errors[ $username_key ] = array(
|
| 'message' => __( 'Username contains invalid characters.', 'wc-vendors-signup' ),
|
| 'label' => $label,
|
| );
|
| return $errors;
|
| }
|
| if ( username_exists( $value ) ) {
|
| $errors[ $username_key ] = array(
|
| 'message' => __( 'This username is already taken.', 'wc-vendors-signup' ),
|
| 'label' => $label,
|
| );
|
| return $errors;
|
| }
|
| $GLOBALS['wcv_signup_requested_username'] = $value;
|
| }
|
|
|
| return $errors;
|
| }, 10, 2 );
|
|
|
|
|
| add_filter( 'pre_user_login', function( $user_login ) {
|
| $is_wcv_signup = ( isset( $_POST['action'] ) && 'wcv_process_registration' === $_POST['action'] )
|
| || isset( $_POST['wcv_registration_nonce'] )
|
| || isset( $_POST['nonce'] );
|
|
|
| if ( ! $is_wcv_signup ) {
|
| return $user_login;
|
| }
|
|
|
|
|
| $username_key = wcv_signup_get_username_field_key();
|
| if ( $username_key && isset( $_POST[ $username_key ] ) ) {
|
| $requested = sanitize_user( (string) $_POST[ $username_key ], true );
|
| if ( $requested && ! username_exists( $requested ) ) {
|
| return $requested;
|
| }
|
| }
|
|
|
|
|
| if ( ! empty( $GLOBALS['wcv_signup_requested_username'] ) ) {
|
| $requested = sanitize_user( (string) $GLOBALS['wcv_signup_requested_username'], true );
|
| if ( $requested && ! username_exists( $requested ) ) {
|
| return $requested;
|
| }
|
| }
|
|
|
| return $user_login;
|
| }, 10 );
|
| |
| |
Comments