Fixed conditional form fields

This commit is contained in:
champsupertramp
2015-11-25 14:19:51 +08:00
parent f6a8f26d83
commit b26d81d466
4 changed files with 82 additions and 12 deletions
+39 -12
View File
@@ -4,7 +4,8 @@ var live_value;
function um_conditional(){
jQuery('.um-field.um-is-conditional').each(function(){
//console.log('-----');
var found = 0;
for (var i = 0; i < 5; i++) {
var action0 = jQuery(this).data('cond-'+i+'-action');
@@ -12,73 +13,91 @@ function um_conditional(){
var operator0 = jQuery(this).data('cond-'+i+'-operator');
var value0 = jQuery(this).data('cond-'+i+'-value');
if ( action0 == 'show' && field0 == live_field ) {
if ( action0 == 'show' && field0 == live_field && typeof value0 !== 'undefined' ) {
//console.log( 'show',i,'conditional='+value0, 'option='+live_value );
if ( operator0 == 'empty' ) {
if ( !live_value || live_value == '' ) {
if ( !live_value || live_value == '' || found > 0 ) {
jQuery(this).fadeIn();
found++;
} else {
jQuery(this).hide();
}
}
if ( operator0 == 'not empty' ) {
if ( live_value && live_value != '' ) {
if ( live_value && live_value != '' || found > 0 ) {
jQuery(this).fadeIn();
found++;
} else {
jQuery(this).hide();
}
}
if ( operator0 == 'equals to' ) {
if ( value0 == live_value ) {
if ( value0 == live_value || found > 0 ) {
jQuery(this).fadeIn();
found++;
} else {
jQuery(this).hide();
}
}
if ( operator0 == 'not equals' ) {
if ( jQuery.isNumeric( value0 ) && parseInt( live_value ) != parseInt( value0 ) && live_value ) {
if ( jQuery.isNumeric( value0 ) && parseInt( live_value ) != parseInt( value0 ) && live_value || found > 0 ) {
jQuery(this).fadeIn();
} else if ( !jQuery.isNumeric( value0 ) && value0 != live_value ) {
found++;
} else if ( !jQuery.isNumeric( value0 ) && value0 != live_value || found > 0 ) {
jQuery(this).fadeIn();
found++;
} else {
jQuery(this).hide();
}
}
if ( operator0 == 'greater than' ) {
if ( jQuery.isNumeric( value0 ) && parseInt( live_value ) > parseInt( value0 ) ) {
if ( jQuery.isNumeric( value0 ) && parseInt( live_value ) > parseInt( value0 ) || found > 0) {
jQuery(this).fadeIn();
found++;
} else {
jQuery(this).hide();
}
}
if ( operator0 == 'less than' ) {
if ( jQuery.isNumeric( value0 ) && parseInt( live_value ) < parseInt( value0 ) && live_value ) {
if ( jQuery.isNumeric( value0 ) && parseInt( live_value ) < parseInt( value0 ) && live_value || found > 0) {
jQuery(this).fadeIn();
found++;
} else {
jQuery(this).hide();
}
}
if ( operator0 == 'contains' ) {
if ( live_value && live_value.indexOf( value0 ) >= 0 ) {
if ( live_value && live_value.indexOf( value0 ) >= 0 || found > 0 ) {
jQuery(this).fadeIn();
found++;
} else {
jQuery(this).hide();
}
}
}
if ( action0 == 'hide' && field0 == live_field ) {
if ( action0 == 'hide' && field0 == live_field && typeof value0 !== 'undefined' ) {
if ( operator0 == 'empty' ) {
if ( !live_value || live_value == '' ) {
jQuery(this).hide();
found++;
} else {
jQuery(this).fadeIn();
}
@@ -87,6 +106,7 @@ function um_conditional(){
if ( operator0 == 'not empty' ) {
if ( live_value && live_value != '' ) {
jQuery(this).hide();
found++;
} else {
jQuery(this).fadeIn();
}
@@ -95,6 +115,7 @@ function um_conditional(){
if ( operator0 == 'equals to' ) {
if ( value0 == live_value ) {
jQuery(this).hide();
found++;
} else {
jQuery(this).fadeIn();
}
@@ -103,8 +124,10 @@ function um_conditional(){
if ( operator0 == 'not equals' ) {
if ( jQuery.isNumeric( value0 ) && parseInt( live_value ) != parseInt( value0 ) && live_value ) {
jQuery(this).hide();
found++;
} else if ( !jQuery.isNumeric( value0 ) && value0 != live_value ) {
jQuery(this).hide();
found++;
} else {
jQuery(this).fadeIn();
}
@@ -113,6 +136,7 @@ function um_conditional(){
if ( operator0 == 'greater than' ) {
if ( jQuery.isNumeric( value0 ) && parseInt( live_value ) > parseInt( value0 ) ) {
jQuery(this).hide();
found++;
} else {
jQuery(this).fadeIn();
}
@@ -121,6 +145,7 @@ function um_conditional(){
if ( operator0 == 'less than' ) {
if ( jQuery.isNumeric( value0 ) && parseInt( live_value ) < parseInt( value0 ) && live_value ) {
jQuery(this).hide();
found++;
} else {
jQuery(this).fadeIn();
}
@@ -129,11 +154,13 @@ function um_conditional(){
if ( operator0 == 'contains' ) {
if ( live_value && live_value.indexOf( value0 ) >= 0 ) {
jQuery(this).hide();
found++;
} else {
jQuery(this).fadeIn();
}
}
//console.log( 'hide',i,value0, live_value );
}
}
+2
View File
@@ -155,6 +155,8 @@
foreach( $fields as $key => $array ) {
$array = apply_filters('um_get_custom_field_array', $array, $fields );
if ( isset( $array['type'] ) && $array['type'] == 'checkbox' && isset( $array['required'] ) && $array['required'] == 1 && !isset( $args[$key] ) ) {
$ultimatemember->form->add_error($key, sprintf(__('%s is required.','ultimatemember'), $array['title'] ) );
}
+1
View File
@@ -581,6 +581,7 @@ class UM_Fields {
if ( isset( $array['conditions'] ) && is_array( $array['conditions'] ) && !$this->viewing ) {
$array['conditional'] = '';
foreach( $array['conditions'] as $cond_id => $cond ) {
$array['conditional'] .= ' data-cond-'.$cond_id.'-action="'. $cond[0] . '" data-cond-'.$cond_id.'-field="'. $cond[1] . '" data-cond-'.$cond_id.'-operator="'. $cond[2] . '" data-cond-'.$cond_id.'-value="'. $cond[3] . '"';
}
+40
View File
@@ -261,4 +261,44 @@
return $array;
}
/***
*** @validate conditional logic
***/
add_filter('um_get_custom_field_array', 'um_get_custom_field_array',99,2);
function um_get_custom_field_array( $array, $fields ){
if( isset( $array['conditions'] ) ){
$found = 0;
for( $a = 0; $a < count( $array['conditions'] ); $a++ ){
if( isset( $array['conditional_value'] ) || isset( $array['conditional_value'.$a] ) ){
if( isset( $array['conditions'] ) && ! empty( $array['conditions'] ) ){
$arr_conditions = array();
foreach ($array['conditions'] as $key => $value) {
$metakey = $fields[ $value[1] ]['metakey'] ;
$arr_conditions[ $metakey ] = $_POST[ $metakey ];
}
foreach ($array['conditions'] as $key => $value) {
$metakey = $fields[ $value[1] ]['metakey'] ;
$arr_conditions[ $metakey ] = $_POST[ $metakey ];
if( isset( $_POST[ $metakey ] ) && isset( $array['conditional_value'] ) && $_POST[ $metakey ] !== $array['conditional_value'] ){
$array['required'] = 0;
}
if( isset( $_POST[ $metakey ] ) && isset( $array['conditional_value'.$a] ) && $_POST[ $metakey ] !== $array['conditional_value'.$a] ){
$array['required'] = 0;
}
}
}
}
}
}
return $array;
}