Fix conditional fields

This commit is contained in:
Champ Camba
2017-01-09 16:45:07 +08:00
parent ceb9f3cb7f
commit c25d2f372a
2 changed files with 122 additions and 32 deletions
+2 -1
View File
@@ -1104,7 +1104,8 @@ class UM_Fields {
if ( $visibility == 'view' && $this->set_mode != 'register' ) return; if ( $visibility == 'view' && $this->set_mode != 'register' ) return;
if ( $visibility == 'view' && $this->set_mode == 'register' ){ if ( ( $visibility == 'view' && $this->set_mode == 'register' ) ||
( isset( $data['editable'] ) && $data['editable'] == 0 && $this->set_mode == 'profile' ) ){
$disabled = ' disabled="disabled" '; $disabled = ' disabled="disabled" ';
} }
+111 -22
View File
@@ -274,7 +274,6 @@
foreach( $data['conditions'] as $k => $arr ) { foreach( $data['conditions'] as $k => $arr ) {
if ( $arr[0] == 'show' ) { if ( $arr[0] == 'show' ) {
$state = 1;
$val = $arr[3]; $val = $arr[3];
$op = $arr[2]; $op = $arr[2];
@@ -288,70 +287,160 @@
case 'equals to': case 'equals to':
if( is_serialized( $field ) ){ if( is_serialized( $field ) ){
if ( ! in_array( $val , unserialize( $field ) ) ) {
if ( in_array( $val , unserialize( $field ) ) ) {
$state = 1;
}else{
$state = 0; $state = 0;
} }
}else{ }else{
if ( $field != $val ) {
if ( $field == $val ) {
$state = 1;
}else{
$state = 0; $state = 0;
} }
} }
break; break;
case 'not equals': case 'not equals':
if( is_serialized( $field ) ){ if( is_serialized( $field ) ){
if ( in_array( $val , unserialize( $field ) ) ) {
if ( ! in_array( $val , unserialize( $field ) ) ) {
$state = 1;
}else{
$state = 0; $state = 0;
} }
}else{ }else{
if ( $field == $val ) {
if ( $field != $val ) {
$state = 1;
}else{
$state = 0; $state = 0;
} }
}
break;
case 'empty':
if ( $field ){
$state = 1;
}else{
$state = 0;
}
break;
case 'not empty':
if ( ! $field ){
$state = 1;
}else{
$state = 0;
}
break;
case 'greater than':
if ( $field <= $val ){
$state = 1;
}else{
$state = 0;
}
break;
case 'less than':
if ( $field >= $val ){
$state = 1;
}else{
$state = 0;
}
break;
case 'contains':
if ( !strstr( $field, $val ) ){
$state = 1;
}else{
$state = 0;
} }
break; break;
case 'empty': if ( $field ) $state = 0; break;
case 'not empty': if ( !$field ) $state = 0; break;
case 'greater than': if ( $field <= $val ) $state = 0; break;
case 'less than': if ( $field >= $val ) $state = 0; break;
case 'contains': if ( !strstr( $field, $val ) ) $state = 0; break;
} }
} }
if ( $arr[0] == 'hide' ) { if ( $arr[0] == 'hide' ) {
$state = 0; $state = 1;
$val = $arr[3]; $val = $arr[3];
$op = $arr[2]; $op = $arr[2];
$field = um_profile($arr[1]);
if( strstr( $arr[1] , 'role_') ){
$arr[1] = 'role';
}
$field = um_profile( $arr[1] );
switch( $op ) { switch( $op ) {
case 'equals to': case 'equals to':
if( is_serialized( $field ) ){ if( is_serialized( $field ) ){
if ( ! in_array( $val , unserialize( $field ) ) ) { if ( in_array( $val , unserialize( $field ) ) ) {
$state = 0;
}else{
$state = 1; $state = 1;
} }
}else{ }else{
if ( $field != $val ) { if ( $field == $val ) {
$state = 0;
}else{
$state = 1; $state = 1;
} }
} }
break; break;
case 'not equals': case 'not equals':
if( is_serialized( $field ) ){ if( is_serialized( $field ) ){
if ( in_array( $val , unserialize( $field ) ) ) { if ( ! in_array( $val , unserialize( $field ) ) ) {
$state = 0;
}else{
$state = 1; $state = 1;
} }
}else{ }else{
if ( $field == $val ) { if ( $field != $val ) {
$state = 0;
}else{
$state = 1; $state = 1;
} }
} }
break; break;
case 'empty': if ( $field ) $state = 1; break; case 'empty':
case 'not empty': if ( !$field ) $state = 1; break; if ( $field ){
case 'greater than': if ( $field <= $val ) $state = 1; break; $state = 0;
case 'less than': if ( $field >= $val ) $state = 1; break; }else{
case 'contains': if ( !strstr( $field, $val ) ) $state = 1; break; $state = 1;
}
break;
case 'not empty':
if ( !$field ){
$state = 0;
}else{
$state = 1;
}
break;
case 'greater than':
if ( $field <= $val ){
$state = 0;
}else{
$state = 1;
}
break;
case 'less than':
if ( $field >= $val ){
$state = 0;
}else{
$state = 1;
}
break;
case 'contains':
if ( !strstr( $field, $val ) ){
$state = 0;
}else{
$state = 1;
}
break;
} }
} }
@@ -968,7 +1057,7 @@
if ( is_user_logged_in() && isset( $data['editable'] ) && $data['editable'] == 0 ) { if ( is_user_logged_in() && isset( $data['editable'] ) && $data['editable'] == 0 ) {
if ( um_is_user_himself() && !um_user('can_edit_everyone') ) if ( um_is_user_himself() && !um_user('can_edit_everyone') )
return false; return true;
if ( !um_is_user_himself() && !um_user_can('can_edit_everyone') ) if ( !um_is_user_himself() && !um_user_can('can_edit_everyone') )
return false; return false;