Files
ultimatemember/includes/core/um-actions-form.php
T
nikitasinelnikov bb948b59af - fixed validation URLs;
- code formatting;
2020-02-23 23:34:11 +02:00

818 lines
28 KiB
PHP

<?php if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
/**
* Error handling: blocked emails
*
* @param $args
*/
function um_submit_form_errors_hook__blockedemails( $args ) {
$emails = UM()->options()->get( 'blocked_emails' );
if ( ! $emails )
return;
$emails = array_map("rtrim", explode("\n", $emails));
if ( isset( $args['user_email'] ) && is_email( $args['user_email'] ) ) {
$domain = explode('@', $args['user_email'] );
$check_domain = str_replace($domain[0], '*', $args['user_email']);
if ( in_array( $args['user_email'], $emails ) )
exit( wp_redirect( esc_url( add_query_arg('err', 'blocked_email') ) ) );
if ( in_array( $check_domain, $emails ) )
exit( wp_redirect( esc_url( add_query_arg('err', 'blocked_domain') ) ) );
}
if ( isset( $args['username'] ) && is_email( $args['username'] ) ) {
$domain = explode('@', $args['username'] );
$check_domain = str_replace($domain[0], '*', $args['username']);
if ( in_array( $args['username'], $emails ) )
exit( wp_redirect( esc_url( add_query_arg('err', 'blocked_email') ) ) );
if ( in_array( $check_domain, $emails ) )
exit( wp_redirect( esc_url( add_query_arg('err', 'blocked_domain') ) ) );
}
}
add_action( 'um_submit_form_errors_hook__blockedemails', 'um_submit_form_errors_hook__blockedemails', 10 );
/**
* Error handling: blocked IPs
*
* @param $args
*/
function um_submit_form_errors_hook__blockedips($args){
$ips = UM()->options()->get('blocked_ips');
if ( !$ips )
return;
$ips = array_map("rtrim", explode("\n", $ips));
$user_ip = um_user_ip();
foreach($ips as $ip) {
$ip = str_replace('*','',$ip);
if ( !empty( $ip ) && strpos($user_ip, $ip) === 0) {
exit( wp_redirect( esc_url( add_query_arg('err', 'blocked_ip') ) ) );
}
}
}
add_action( 'um_submit_form_errors_hook__blockedips', 'um_submit_form_errors_hook__blockedips', 10 );
/**
* Error handling: blocked words during sign up
*
* @param $args
*/
function um_submit_form_errors_hook__blockedwords( $args ) {
$form_id = $args['form_id'];
$mode = $args['mode'];
$fields = unserialize( $args['custom_fields'] );
$words = UM()->options()->get('blocked_words');
if ( $words != '' ) {
$words = array_map("rtrim", explode("\n", $words));
if ( ! empty( $fields ) && is_array( $fields ) ) {
foreach ( $fields as $key => $array ) {
if ( isset($array['validate']) && in_array( $array['validate'], array('unique_username','unique_email','unique_username_or_email') ) ) {
if ( ! UM()->form()->has_error( $key ) && isset( $args[$key] ) && in_array( $args[$key], $words ) ) {
UM()->form()->add_error( $key, __('You are not allowed to use this word as your username.','ultimate-member') );
}
}
}
}
}
}
add_action( 'um_submit_form_errors_hook__blockedwords', 'um_submit_form_errors_hook__blockedwords', 10 );
/**
* Error handling
*
* @param $args
*/
function um_submit_form_errors_hook( $args ) {
$form_id = $args['form_id'];
$mode = $args['mode'];
$fields = unserialize( $args['custom_fields'] );
if ( $mode == 'register' ) {
/**
* UM hook
*
* @type action
* @title um_submit_form_errors_hook__registration
* @description Submit registration form validation
* @input_vars
* [{"var":"$args","type":"array","desc":"Form Arguments"}]
* @change_log
* ["Since: 2.0"]
* @usage add_action( 'um_submit_form_errors_hook__registration', 'function_name', 10, 1 );
* @example
* <?php
* add_action( 'um_submit_form_errors_hook__registration', 'my_submit_form_errors_registration', 10, 1 );
* function my_submit_form_errors_registration( $args ) {
* // your code here
* }
* ?>
*/
do_action( "um_submit_form_errors_hook__registration", $args );
}
/**
* UM hook
*
* @type action
* @title um_submit_form_errors_hook__blockedips
* @description Submit form validation
* @input_vars
* [{"var":"$args","type":"array","desc":"Form Arguments"}]
* @change_log
* ["Since: 2.0"]
* @usage add_action( 'um_submit_form_errors_hook__blockedips', 'function_name', 10, 1 );
* @example
* <?php
* add_action( 'um_submit_form_errors_hook__blockedips', 'my_submit_form_errors_hook__blockedips', 10, 1 );
* function my_submit_form_errors_hook__blockedips( $args ) {
* // your code here
* }
* ?>
*/
do_action( "um_submit_form_errors_hook__blockedips", $args );
/**
* UM hook
*
* @type action
* @title um_submit_form_errors_hook__blockedemails
* @description Submit form validation
* @input_vars
* [{"var":"$args","type":"array","desc":"Form Arguments"}]
* @change_log
* ["Since: 2.0"]
* @usage add_action( 'um_submit_form_errors_hook__blockedemails', 'function_name', 10, 1 );
* @example
* <?php
* add_action( 'um_submit_form_errors_hook__blockedemails', 'my_submit_form_errors_hook__blockedemails', 10, 1 );
* function my_submit_form_errors_hook__blockedemails( $args ) {
* // your code here
* }
* ?>
*/
do_action( "um_submit_form_errors_hook__blockedemails", $args );
if ( $mode == 'login' ) {
/**
* UM hook
*
* @type action
* @title um_submit_form_errors_hook_login
* @description Submit login form validation
* @input_vars
* [{"var":"$args","type":"array","desc":"Form Arguments"}]
* @change_log
* ["Since: 2.0"]
* @usage add_action( 'um_submit_form_errors_hook_login', 'function_name', 10, 1 );
* @example
* <?php
* add_action( 'um_submit_form_errors_hook_login', 'my_submit_form_errors_hook_login', 10, 1 );
* function my_submit_form_errors_hook_login( $args ) {
* // your code here
* }
* ?>
*/
do_action( 'um_submit_form_errors_hook_login', $args );
/**
* UM hook
*
* @type action
* @title um_submit_form_errors_hook_logincheck
* @description Submit login form validation
* @input_vars
* [{"var":"$args","type":"array","desc":"Form Arguments"}]
* @change_log
* ["Since: 2.0"]
* @usage add_action( 'um_submit_form_errors_hook_logincheck', 'function_name', 10, 1 );
* @example
* <?php
* add_action( 'um_submit_form_errors_hook_logincheck', 'my_submit_form_errors_hook_logincheck', 10, 1 );
* function my_submit_form_errors_hook_logincheck( $args ) {
* // your code here
* }
* ?>
*/
do_action( 'um_submit_form_errors_hook_logincheck', $args );
} else {
/**
* UM hook
*
* @type action
* @title um_submit_form_errors_hook_
* @description Submit form validation
* @input_vars
* [{"var":"$args","type":"array","desc":"Form Arguments"}]
* @change_log
* ["Since: 2.0"]
* @usage add_action( 'um_submit_form_errors_hook_', 'function_name', 10, 1 );
* @example
* <?php
* add_action( 'um_submit_form_errors_hook_', 'my_submit_form_errors_hook', 10, 1 );
* function my_submit_form_errors_hook( $args ) {
* // your code here
* }
* ?>
*/
do_action( 'um_submit_form_errors_hook_', $args );
/**
* UM hook
*
* @type action
* @title um_submit_form_errors_hook__blockedwords
* @description Submit form validation
* @input_vars
* [{"var":"$args","type":"array","desc":"Form Arguments"}]
* @change_log
* ["Since: 2.0"]
* @usage add_action( 'um_submit_form_errors_hook__blockedwords', 'function_name', 10, 1 );
* @example
* <?php
* add_action( 'um_submit_form_errors_hook__blockedwords', 'my_submit_form_errors_hook__blockedwords', 10, 1 );
* function my_submit_form_errors_hook__blockedwords( $args ) {
* // your code here
* }
* ?>
*/
do_action( "um_submit_form_errors_hook__blockedwords", $args );
}
}
add_action( 'um_submit_form_errors_hook', 'um_submit_form_errors_hook', 10 );
/**
* Error processing: Conditions
* @staticvar int $counter
* @param array $condition
* @param array $fields
* @param array $args
* @param boolean $reset
* @return boolean
* @throws Exception
*/
function um_check_conditions_on_submit( $condition, $fields, $args, $reset = false ) {
static $counter = 0;
if ( $reset ) {
$counter = 0;
}
$continue = false;
list( $visibility, $parent_key, $op, $parent_value ) = $condition;
if ( ! isset( $args[ $parent_key ] ) ) {
$continue = true;
return $continue;
}
if ( ! empty( $fields[ $parent_key ]['conditions'] ) ) {
foreach ( $fields[ $parent_key ]['conditions'] as $parent_condition ) {
if ( 64 > $counter++ ) {
$continue = um_check_conditions_on_submit( $parent_condition, $fields, $args );
} else {
throw new Exception( 'Endless recursion in the function ' . __FUNCTION__, 512 );
}
if ( ! empty( $continue ) ) {
return $continue;
}
}
}
$cond_value = ( $fields[ $parent_key ]['type'] == 'radio' ) ? $args[ $parent_key ][0] : $args[ $parent_key ];
if ( $visibility == 'hide' ) {
if ( $op == 'empty' ) {
if ( empty( $cond_value ) ) {
$continue = true;
}
} elseif ( $op == 'not empty' ) {
if ( ! empty( $cond_value ) ) {
$continue = true;
}
} elseif ( $op == 'equals to' ) {
if ( $cond_value == $parent_value ) {
$continue = true;
}
} elseif ( $op == 'not equals' ) {
if ( $cond_value != $parent_value ) {
$continue = true;
}
} elseif ( $op == 'greater than' ) {
if ( $cond_value > $parent_value ) {
$continue = true;
}
} elseif ( $op == 'less than' ) {
if ( $cond_value < $parent_value ) {
$continue = true;
}
} elseif ( $op == 'contains' ) {
if ( is_string( $cond_value ) && strstr( $cond_value, $parent_value ) ) {
$continue = true;
}
if( is_array( $cond_value ) && in_array( $parent_value, $cond_value ) ) {
$continue = true;
}
}
} elseif ( $visibility == 'show' ) {
if ( $op == 'empty' ) {
if ( ! empty( $cond_value ) ) {
$continue = true;
}
} elseif ( $op == 'not empty' ) {
if ( empty( $cond_value ) ) {
$continue = true;
}
} elseif ( $op == 'equals to' ) {
if ( $cond_value != $parent_value ) {
$continue = true;
}
} elseif ( $op == 'not equals' ) {
if ( $cond_value == $parent_value ) {
$continue = true;
}
} elseif ( $op == 'greater than' ) {
if ( $cond_value <= $parent_value ) {
$continue = true;
}
} elseif ( $op == 'less than' ) {
if ( $cond_value >= $parent_value ) {
$continue = true;
}
} elseif ( $op == 'contains' ) {
if ( is_string( $cond_value ) && ! strstr( $cond_value, $parent_value ) ) {
$continue = true;
}
if( is_array( $cond_value ) && !in_array( $parent_value, $cond_value ) ) {
$continue = true;
}
}
}
return $continue;
}
/**
* Error processing hook : standard
*
* @param $args
*/
function um_submit_form_errors_hook_( $args ) {
$form_id = $args['form_id'];
$mode = $args['mode'];
$fields = unserialize( $args['custom_fields'] );
$um_profile_photo = um_profile('profile_photo');
if ( get_post_meta( $form_id, '_um_profile_photo_required', true ) && ( empty( $args['profile_photo'] ) && empty( $um_profile_photo ) ) ) {
UM()->form()->add_error('profile_photo', __( 'Profile Photo is required.', 'ultimate-member' ) );
}
if ( ! empty( $fields ) ) {
foreach ( $fields as $key => $array ) {
if ( $mode == 'profile' ) {
$restricted_fields = UM()->fields()->get_restricted_fields_for_edit();
if ( is_array( $restricted_fields ) && in_array( $key, $restricted_fields ) ) {
continue;
}
}
if ( isset( $array['public'] ) && -2 == $array['public'] && ! empty( $array['roles'] ) && is_user_logged_in() ) {
$current_user_roles = um_user( 'roles' );
if ( empty( $current_user_roles ) || count( array_intersect( $current_user_roles, $array['roles'] ) ) <= 0 ) {
continue;
}
}
/**
* UM hook
*
* @type filter
* @title um_get_custom_field_array
* @description Extend custom field data on submit form error
* @input_vars
* [{"var":"$array","type":"array","desc":"Field data"},
* {"var":"$fields","type":"array","desc":"All fields"}]
* @change_log
* ["Since: 2.0"]
* @usage
* <?php add_filter( 'um_get_custom_field_array', 'function_name', 10, 2 ); ?>
* @example
* <?php
* add_filter( 'um_get_custom_field_array', 'my_get_custom_field_array', 10, 2 );
* function my_get_custom_field_array( $array, $fields ) {
* // your code here
* return $array;
* }
* ?>
*/
$array = apply_filters( 'um_get_custom_field_array', $array, $fields );
if ( ! empty( $array['conditions'] ) ) {
try {
foreach ( $array['conditions'] as $condition ) {
$continue = um_check_conditions_on_submit( $condition, $fields, $args, true );
if ( $continue === true ) {
continue 2;
}
}
} catch ( Exception $e ) {
UM()->form()->add_error( $key, sprintf( __( '%s - wrong conditions.', 'ultimate-member' ), $array['title'] ) );
$notice = '<div class="um-field-error">' . sprintf( __( '%s - wrong conditions.', 'ultimate-member' ), $array['title'] ) . '</div><!-- ' . $e->getMessage() . ' -->';
add_action( 'um_after_profile_fields', function() use ( $notice ) {
echo $notice;
}, 900 );
}
}
if ( isset( $array['type'] ) && $array['type'] == 'checkbox' && isset( $array['required'] ) && $array['required'] == 1 && ! isset( $args[ $key ] ) ) {
UM()->form()->add_error( $key, sprintf( __( '%s is required.', 'ultimate-member' ), $array['title'] ) );
}
if ( isset( $array['type'] ) && $array['type'] == 'radio' && isset( $array['required'] ) && $array['required'] == 1 && ! isset( $args[ $key ] ) && ! in_array( $key, array( 'role_radio', 'role_select' ) ) ) {
UM()->form()->add_error( $key, sprintf( __( '%s is required.', 'ultimate-member'), $array['title'] ) );
}
if ( isset( $array['type'] ) && $array['type'] == 'multiselect' && isset( $array['required'] ) && $array['required'] == 1 && ! isset( $args[ $key ] ) && ! in_array( $key, array( 'role_radio', 'role_select' ) ) ) {
UM()->form()->add_error( $key, sprintf( __( '%s is required.', 'ultimate-member' ), $array['title'] ) );
}
if ( $key == 'role_select' || $key == 'role_radio' ) {
if ( isset( $array['required'] ) && $array['required'] == 1 && ( ! isset( $args['role'] ) || empty( $args['role'] ) ) ) {
UM()->form()->add_error( 'role', __( 'Please specify account type.', 'ultimate-member' ) );
}
}
/**
* UM hook
*
* @type action
* @title um_add_error_on_form_submit_validation
* @description Submit form validation
* @input_vars
* [{"var":"$field","type":"array","desc":"Field Data"},
* {"var":"$key","type":"string","desc":"Field Key"},
* {"var":"$args","type":"array","desc":"Form Arguments"}]
* @change_log
* ["Since: 2.0"]
* @usage add_action( 'um_add_error_on_form_submit_validation', 'function_name', 10, 3 );
* @example
* <?php
* add_action( 'um_add_error_on_form_submit_validation', 'my_add_error_on_form_submit_validation', 10, 3 );
* function my_add_error_on_form_submit_validation( $field, $key, $args ) {
* // your code here
* }
* ?>
*/
do_action( 'um_add_error_on_form_submit_validation', $array, $key, $args );
if ( ! empty( $array['required'] ) ) {
if ( ! isset( $args[ $key ] ) || $args[ $key ] == '' || $args[ $key ] == 'empty_file' ) {
if ( empty( $array['label'] ) ) {
UM()->form()->add_error( $key, __( 'This field is required', 'ultimate-member' ) );
} else {
UM()->form()->add_error( $key, sprintf( __( '%s is required', 'ultimate-member' ), $array['label'] ) );
}
}
}
if ( isset( $args[ $key ] ) ) {
if ( isset( $array['max_words'] ) && $array['max_words'] > 0 ) {
if ( str_word_count( $args[ $key ], 0, "éèàôù" ) > $array['max_words'] ) {
UM()->form()->add_error( $key, sprintf( __( 'You are only allowed to enter a maximum of %s words', 'ultimate-member' ), $array['max_words'] ) );
}
}
if ( isset( $array['min_chars'] ) && $array['min_chars'] > 0 ) {
if ( $args[ $key ] && strlen( utf8_decode( $args[ $key ] ) ) < $array['min_chars'] ) {
UM()->form()->add_error( $key, sprintf( __( 'Your %s must contain at least %s characters', 'ultimate-member' ), $array['label'], $array['min_chars'] ) );
}
}
if ( isset( $array['max_chars'] ) && $array['max_chars'] > 0 ) {
if ( $args[ $key ] && strlen( utf8_decode( $args[ $key ] ) ) > $array['max_chars'] ) {
UM()->form()->add_error( $key, sprintf( __( 'Your %s must contain less than %s characters', 'ultimate-member' ), $array['label'], $array['max_chars'] ) );
}
}
$profile_show_html_bio = UM()->options()->get( 'profile_show_html_bio' );
if ( $profile_show_html_bio == 1 && $key !== 'description' ) {
if ( isset( $array['html'] ) && $array['html'] == 0 ) {
if ( wp_strip_all_tags( $args[ $key ] ) != trim( $args[ $key ] ) ) {
UM()->form()->add_error( $key, __( 'You can not use HTML tags here', 'ultimate-member' ) );
}
}
}
if ( isset( $array['force_good_pass'] ) && $array['force_good_pass'] == 1 ) {
if ( ! UM()->validation()->strong_pass( $args[ $key ] ) ) {
UM()->form()->add_error( $key, __('Your password must contain at least one lowercase letter, one capital letter and one number', 'ultimate-member' ) );
}
}
if ( isset( $array['force_confirm_pass'] ) && $array['force_confirm_pass'] == 1 ) {
if ( $args[ 'confirm_' . $key ] == '' && ! UM()->form()->has_error( $key ) ) {
UM()->form()->add_error( 'confirm_' . $key , __( 'Please confirm your password', 'ultimate-member' ) );
}
if ( $args[ 'confirm_' . $key ] != $args[$key] && !UM()->form()->has_error( $key ) ) {
UM()->form()->add_error( 'confirm_' . $key , __( 'Your passwords do not match', 'ultimate-member' ) );
}
}
if ( isset( $array['min_selections'] ) && $array['min_selections'] > 0 ) {
if ( ( ! isset( $args[ $key ] ) ) || ( isset( $args[ $key ] ) && is_array( $args[ $key ] ) && count( $args[ $key ] ) < $array['min_selections'] ) ) {
UM()->form()->add_error($key, sprintf( __( 'Please select at least %s choices', 'ultimate-member' ), $array['min_selections'] ) );
}
}
if ( isset( $array['max_selections'] ) && $array['max_selections'] > 0 ) {
if ( isset( $args[ $key ] ) && is_array( $args[ $key ] ) && count( $args[ $key ] ) > $array['max_selections'] ) {
UM()->form()->add_error( $key, sprintf( __( 'You can only select up to %s choices', 'ultimate-member' ), $array['max_selections'] ) );
}
}
if ( isset( $array['min'] ) && is_numeric( $args[ $key ] ) ) {
if ( isset( $args[ $key ] ) && $args[ $key ] < $array['min'] ) {
UM()->form()->add_error( $key, sprintf( __( 'Minimum number limit is %s', 'ultimate-member' ), $array['min'] ) );
}
}
if ( isset( $array['max'] ) && is_numeric( $args[ $key ] ) ) {
if ( isset( $args[ $key ] ) && $args[ $key ] > $array['max'] ) {
UM()->form()->add_error( $key, sprintf( __( 'Maximum number limit is %s', 'ultimate-member' ), $array['max'] ) );
}
}
if ( ! empty( $array['validate'] ) ) {
switch( $array['validate'] ) {
case 'custom':
$custom = $array['custom_validate'];
/**
* UM hook
*
* @type action
* @title um_custom_field_validation_{$custom}
* @description Submit form validation for custom field
* @input_vars
* [{"var":"$key","type":"string","desc":"Field Key"},
* {"var":"$field","type":"array","desc":"Field Data"},
* {"var":"$args","type":"array","desc":"Form Arguments"}]
* @change_log
* ["Since: 2.0"]
* @usage add_action( 'um_custom_field_validation_{$custom}', 'function_name', 10, 3 );
* @example
* <?php
* add_action( 'um_custom_field_validation_{$custom}', 'my_custom_field_validation', 10, 3 );
* function my_custom_field_validation( $key, $field, $args ) {
* // your code here
* }
* ?>
*/
do_action( "um_custom_field_validation_{$custom}", $key, $array, $args );
break;
case 'numeric':
if ( $args[ $key ] && ! is_numeric( $args[ $key ] ) ) {
UM()->form()->add_error( $key, __( 'Please enter numbers only in this field', 'ultimate-member' ) );
}
break;
case 'phone_number':
if ( ! UM()->validation()->is_phone_number( $args[ $key ] ) ) {
UM()->form()->add_error( $key, __( 'Please enter a valid phone number', 'ultimate-member' ) );
}
break;
case 'youtube_url':
if ( ! UM()->validation()->is_url( $args[ $key ], 'youtube.com' ) ) {
UM()->form()->add_error( $key, sprintf( __( 'Please enter a valid %s username or profile URL', 'ultimate-member' ), $array['label'] ) );
}
break;
case 'soundcloud_url':
if ( ! UM()->validation()->is_url( $args[ $key ], 'soundcloud.com' ) ) {
UM()->form()->add_error( $key, sprintf( __( 'Please enter a valid %s username or profile URL','ultimate-member'), $array['label'] ) );
}
break;
case 'facebook_url':
if ( ! UM()->validation()->is_url( $args[ $key ], 'facebook.com' ) ) {
UM()->form()->add_error( $key, sprintf( __( 'Please enter a valid %s username or profile URL', 'ultimate-member' ), $array['label'] ) );
}
break;
case 'twitter_url':
if ( ! UM()->validation()->is_url( $args[ $key ], 'twitter.com' ) ) {
UM()->form()->add_error( $key, sprintf( __( 'Please enter a valid %s username or profile URL', 'ultimate-member' ), $array['label'] ) );
}
break;
case 'instagram_url':
if ( ! UM()->validation()->is_url( $args[ $key ], 'instagram.com' ) ) {
UM()->form()->add_error( $key, sprintf( __( 'Please enter a valid %s profile URL', 'ultimate-member' ), $array['label'] ) );
}
break;
case 'google_url':
if ( ! UM()->validation()->is_url( $args[ $key ], 'plus.google.com' ) ) {
UM()->form()->add_error( $key, sprintf( __( 'Please enter a valid %s username or profile URL', 'ultimate-member' ), $array['label'] ) );
}
break;
case 'linkedin_url':
if ( ! UM()->validation()->is_url( $args[ $key ], 'linkedin.com' ) ) {
UM()->form()->add_error( $key, sprintf( __( 'Please enter a valid %s username or profile URL', 'ultimate-member' ), $array['label'] ) );
}
break;
case 'vk_url':
if ( ! UM()->validation()->is_url( $args[ $key ], 'vk.com' ) ) {
UM()->form()->add_error( $key, sprintf( __( 'Please enter a valid %s username or profile URL', 'ultimate-member' ), $array['label'] ) );
}
break;
case 'url':
if ( ! UM()->validation()->is_url( $args[ $key ] ) ) {
UM()->form()->add_error( $key, __( 'Please enter a valid URL', 'ultimate-member' ) );
}
break;
case 'skype':
if ( ! UM()->validation()->is_url( $args[ $key ], 'skype.com' ) ) {
UM()->form()->add_error( $key, sprintf( __( 'Please enter a valid %s username or profile URL', 'ultimate-member' ), $array['label'] ) );
}
break;
case 'unique_username':
if ( $args[ $key ] == '' ) {
UM()->form()->add_error( $key, __( 'You must provide a username', 'ultimate-member' ) );
} elseif ( $mode == 'register' && username_exists( sanitize_user( $args[ $key ] ) ) ) {
UM()->form()->add_error( $key, __( 'Your username is already taken', 'ultimate-member' ) );
} elseif ( is_email( $args[ $key ] ) ) {
UM()->form()->add_error( $key, __( 'Username cannot be an email', 'ultimate-member' ) );
} elseif ( ! UM()->validation()->safe_username( $args[ $key ] ) ) {
UM()->form()->add_error( $key, __( 'Your username contains invalid characters', 'ultimate-member' ) );
}
break;
case 'unique_username_or_email':
if ( $args[ $key ] == '' ) {
UM()->form()->add_error( $key, __( 'You must provide a username', 'ultimate-member' ) );
} elseif ( $mode == 'register' && username_exists( sanitize_user( $args[ $key ] ) ) ) {
UM()->form()->add_error( $key, __( 'Your username is already taken', 'ultimate-member' ) );
} elseif ( $mode == 'register' && email_exists( $args[ $key ] ) ) {
UM()->form()->add_error( $key, __( 'This email is already linked to an existing account', 'ultimate-member' ) );
} elseif ( ! UM()->validation()->safe_username( $args[ $key ] ) ) {
UM()->form()->add_error( $key, __( 'Your username contains invalid characters', 'ultimate-member' ) );
}
break;
case 'unique_email':
$args[ $key ] = trim( $args[ $key ] );
if ( in_array( $key, array( 'user_email' ) ) ) {
if ( ! isset( $args['user_id'] ) ){
$args['user_id'] = um_get_requested_user();
}
$email_exists = email_exists( $args[ $key ] );
if ( $args[ $key ] == '' && in_array( $key, array( 'user_email' ) ) ) {
UM()->form()->add_error( $key, __( 'You must provide your email', 'ultimate-member' ) );
} elseif ( in_array( $mode, array( 'register' ) ) && $email_exists ) {
UM()->form()->add_error( $key, __( 'This email is already linked to an existing account', 'ultimate-member' ) );
} elseif ( in_array( $mode, array( 'profile' ) ) && $email_exists && $email_exists != $args['user_id'] ) {
UM()->form()->add_error( $key, __( 'This email is already linked to an existing account', 'ultimate-member' ) );
} elseif ( !is_email( $args[ $key ] ) ) {
UM()->form()->add_error( $key, __( 'This is not a valid email', 'ultimate-member') );
} elseif ( ! UM()->validation()->safe_username( $args[ $key ] ) ) {
UM()->form()->add_error( $key, __( 'Your email contains invalid characters', 'ultimate-member' ) );
}
} else {
if ( $args[ $key ] != '' && ! is_email( $args[ $key ] ) ) {
UM()->form()->add_error( $key, __( 'This is not a valid email', 'ultimate-member' ) );
} elseif ( $args[ $key ] != '' && email_exists( $args[ $key ] ) ) {
UM()->form()->add_error( $key, __( 'This email is already linked to an existing account', 'ultimate-member' ) );
} elseif ( $args[ $key ] != '' ) {
$users = get_users( 'meta_value=' . $args[ $key ] );
foreach ( $users as $user ) {
if ( $user->ID != $args['user_id'] ) {
UM()->form()->add_error( $key, __( 'This email is already linked to an existing account', 'ultimate-member' ) );
}
}
}
}
break;
case 'is_email':
$args[ $key ] = trim( $args[ $key ] );
if ( $args[ $key ] != '' && ! is_email( $args[ $key ] ) ) {
UM()->form()->add_error( $key, __( 'This is not a valid email', 'ultimate-member' ) );
}
break;
case 'unique_value':
if ( $args[ $key ] != '' ) {
$args_unique_meta = array(
'meta_key' => $key,
'meta_value' => $args[ $key ],
'compare' => '=',
'exclude' => array( $args['user_id'] ),
);
$meta_key_exists = get_users( $args_unique_meta );
if ( $meta_key_exists ) {
UM()->form()->add_error( $key , __( 'You must provide a unique value', 'ultimate-member' ) );
}
}
break;
case 'alphabetic':
if ( $args[ $key ] != '' ) {
if ( ! preg_match( '/^\p{L}+$/u', str_replace( ' ', '', $args[ $key ] ) ) ) {
UM()->form()->add_error( $key, __( 'You must provide alphabetic letters', 'ultimate-member' ) );
}
}
break;
case 'lowercase':
if ( $args[ $key ] != '' ) {
if ( ! ctype_lower( str_replace(' ', '', $args[ $key ] ) ) ) {
UM()->form()->add_error( $key , __( 'You must provide lowercase letters.', 'ultimate-member' ) );
}
}
break;
}
}
}
if ( isset( $args['description'] ) ) {
$max_chars = UM()->options()->get( 'profile_bio_maxchars' );
$profile_show_bio = UM()->options()->get( 'profile_show_bio' );
if ( $profile_show_bio ) {
if ( strlen( utf8_decode( str_replace( array( "\r\n", "\n", "\r\t", "\t" ), ' ', $args['description'] ) ) ) > $max_chars && $max_chars ) {
UM()->form()->add_error( 'description', sprintf( __( 'Your user description must contain less than %s characters', 'ultimate-member' ), $max_chars ) );
}
}
}
} // end if ( isset in args array )
}
}
add_action( 'um_submit_form_errors_hook_', 'um_submit_form_errors_hook_', 10 );