Skip to content

Commit 66b725b

Browse files
authored
Merge pull request #293 from WPUserManager/Required-fields-that-are-conditionally-shown/hidden-shouldn't-required-data-unless-shown
Required fields that are conditionally shown/hidden shouldn't required data unless shown
2 parents 8a92102 + 7856da3 commit 66b725b

File tree

5 files changed

+86
-3
lines changed

5 files changed

+86
-3
lines changed

assets/js/src/wp-user-manager.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,13 @@ jQuery( function( $ ) {
180180
this.validateFields = function(){
181181
form.find('fieldset[data-condition]').each(function(){
182182
var rules = $(this).data('condition');
183-
$(this).toggle( self.validateRules(rules) );
183+
var validRule = self.validateRules(rules);
184+
$(this).toggle( validRule );
185+
if ( $(this).find('.field').hasClass('required-field') ) {
186+
$( this ).find( "input" ).prop( "required", validRule );
187+
$( this ).find( "select" ).prop( "required", validRule );
188+
$( this ).find( "textarea" ).prop( "required", validRule );
189+
}
184190
});
185191
}
186192

assets/js/wp-user-manager.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,13 @@ jQuery( function( $ ) {
183183
this.validateFields = function(){
184184
form.find('fieldset[data-condition]').each(function(){
185185
var rules = $(this).data('condition');
186-
$(this).toggle( self.validateRules(rules) );
186+
var validRule = self.validateRules(rules);
187+
$(this).toggle( validRule );
188+
if ( $(this).find('.field').hasClass('required-field') ) {
189+
$( this ).find( "input" ).prop( "required", validRule );
190+
$( this ).find( "select" ).prop( "required", validRule );
191+
$( this ).find( "textarea" ).prop( "required", validRule );
192+
}
187193
});
188194
}
189195

assets/js/wp-user-manager.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

includes/abstracts/abstract-wpum-form.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -298,6 +298,10 @@ protected function str_len( $str ) {
298298
protected function validate_fields( $values ) {
299299
foreach ( $this->fields as $group_key => $group_fields ) {
300300
foreach ( $group_fields as $key => $field ) {
301+
// Skip validation if field conditional logic not met.
302+
if ( apply_filters( 'wpum_form_skip_field_validation', false, $key, $values[ $group_key ], $group_fields ) ) {
303+
continue;
304+
}
301305
if ( $field['required'] && empty( $values[ $group_key ][ $key ] ) ) {
302306
return new WP_Error( 'validation-error', sprintf( __( '%s is a required field', 'wp-user-manager' ), $field['label'] ) );
303307
}

includes/actions.php

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -603,3 +603,70 @@ function wpum_field_conditional_logic_rules( $data ) {
603603
add_action( 'wpum_after_account_form', 'wpum_field_conditional_logic_rules', 1 );
604604
add_action( 'wpum_after_custom_account_form', 'wpum_field_conditional_logic_rules', 1 );
605605

606+
function wpum_conditional_fields_maybe_skip_validation( $skip, $field_key, $values, $fields ) {
607+
$form_data = (object) array();
608+
$form_data->fields = $fields;
609+
610+
$rulesets = apply_filters( 'wpum_field_conditional_logic_rules', array(), $form_data );
611+
$field_rules = $rulesets[ $field_key ];
612+
613+
if ( ! $field_rules ) {
614+
return false;
615+
}
616+
617+
foreach ( $field_rules as $rules ) {
618+
foreach ( $rules as $rule ) {
619+
$valid_rule = apply_filters( "wpum_conditional_field_validate_rule_{$rule['condition']}", true, $rule, $values );
620+
if ( ! $valid_rule ) {
621+
return true;
622+
}
623+
}
624+
}
625+
626+
return false;
627+
}
628+
629+
add_filter( 'wpum_form_skip_field_validation', 'wpum_conditional_fields_maybe_skip_validation', 10, 4 );
630+
631+
function wpum_validate_rule_value_not_equals( $valid, $rule, $values ) {
632+
return $values[ $rule['field'] ] !== $rule['value'] ? true : false;
633+
}
634+
635+
add_filter( 'wpum_conditional_field_validate_rule_value_not_equals', 'wpum_validate_rule_value_not_equals', 10, 3 );
636+
637+
function wpum_validate_rule_value_equals( $valid, $rule, $values ) {
638+
return $values[ $rule['field'] ] === $rule['value'] ? true : false;
639+
}
640+
641+
add_filter( 'wpum_conditional_field_validate_rule_value_equals', 'wpum_validate_rule_value_equals', 10, 3 );
642+
643+
function wpum_validate_rule_value_contains( $valid, $rule, $values ) {
644+
return strpos( $values[ $rule['field'] ], $rule['value'] );
645+
}
646+
647+
add_filter( 'wpum_conditional_field_validate_rule_value_contains', 'wpum_validate_rule_value_contains', 10, 3 );
648+
649+
function wpum_validate_rule_has_value( $valid, $rule, $values ) {
650+
return $values[ $rule['field'] ] !== '';
651+
}
652+
653+
add_filter( 'wpum_conditional_field_validate_rule_has_value', 'wpum_validate_rule_has_value', 10, 3 );
654+
655+
function wpum_validate_rule_has_no_value( $valid, $rule, $values ) {
656+
return $values[ $rule['field'] ] === '';
657+
}
658+
659+
add_filter( 'wpum_conditional_field_validate_rule_has_no_value', 'wpum_validate_rule_has_no_value', 10, 3 );
660+
661+
function wpum_validate_rule_value_greater( $valid, $rule, $values ) {
662+
return $values[ $rule['field'] ] > $rule['value'];
663+
}
664+
665+
add_filter( 'wpum_conditional_field_validate_rule_value_greater', 'wpum_validate_rule_value_greater', 10, 3 );
666+
667+
function wpum_validate_rule_value_less( $valid, $rule, $values ) {
668+
return $values[ $rule['field'] ] < $rule['value'];
669+
}
670+
671+
add_filter( 'wpum_conditional_field_validate_rule_value_less', 'wpum_validate_rule_value_less', 10, 3 );
672+

0 commit comments

Comments
 (0)