diff --git a/core/um-fields.php b/core/um-fields.php index 8675808e..b232f7c9 100644 --- a/core/um-fields.php +++ b/core/um-fields.php @@ -1104,7 +1104,8 @@ class UM_Fields { 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" '; } diff --git a/core/um-short-functions.php b/core/um-short-functions.php index cbbeb639..f1ff638b 100644 --- a/core/um-short-functions.php +++ b/core/um-short-functions.php @@ -270,11 +270,10 @@ if ( !isset( $data['conditions'] ) ) return true; $state = 1; - + foreach( $data['conditions'] as $k => $arr ) { if ( $arr[0] == 'show' ) { - $state = 1; $val = $arr[3]; $op = $arr[2]; @@ -288,70 +287,160 @@ case 'equals to': if( is_serialized( $field ) ){ - if ( ! in_array( $val , unserialize( $field ) ) ) { - $state = 0; + + if ( in_array( $val , unserialize( $field ) ) ) { + $state = 1; + }else{ + $state = 0; } + }else{ - if ( $field != $val ) { - $state = 0; + + if ( $field == $val ) { + $state = 1; + }else{ + $state = 0; } + } break; case 'not equals': + if( is_serialized( $field ) ){ - if ( in_array( $val , unserialize( $field ) ) ) { - $state = 0; + + if ( ! in_array( $val , unserialize( $field ) ) ) { + $state = 1; + }else{ + $state = 0; } + }else{ - if ( $field == $val ) { - $state = 0; + + if ( $field != $val ) { + $state = 1; + }else{ + $state = 0; } + } 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; + 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; } } if ( $arr[0] == 'hide' ) { - $state = 0; + $state = 1; $val = $arr[3]; $op = $arr[2]; - $field = um_profile($arr[1]); + if( strstr( $arr[1] , 'role_') ){ + $arr[1] = 'role'; + } + + $field = um_profile( $arr[1] ); + switch( $op ) { case 'equals to': if( is_serialized( $field ) ){ - if ( ! in_array( $val , unserialize( $field ) ) ) { - $state = 1; + if ( in_array( $val , unserialize( $field ) ) ) { + $state = 0; + }else{ + $state = 1; } }else{ - if ( $field != $val ) { - $state = 1; + if ( $field == $val ) { + $state = 0; + }else{ + $state = 1; } } break; case 'not equals': if( is_serialized( $field ) ){ - if ( in_array( $val , unserialize( $field ) ) ) { - $state = 1; + if ( ! in_array( $val , unserialize( $field ) ) ) { + $state = 0; + }else{ + $state = 1; } }else{ - if ( $field == $val ) { - $state = 1; + if ( $field != $val ) { + $state = 0; + }else{ + $state = 1; } } break; - case 'empty': if ( $field ) $state = 1; break; - case 'not empty': if ( !$field ) $state = 1; break; - case 'greater than': if ( $field <= $val ) $state = 1; break; - case 'less than': if ( $field >= $val ) $state = 1; break; - case 'contains': if ( !strstr( $field, $val ) ) $state = 1; break; + case 'empty': + if ( $field ){ + $state = 0; + }else{ + $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 ( um_is_user_himself() && !um_user('can_edit_everyone') ) - return false; + return true; if ( !um_is_user_himself() && !um_user_can('can_edit_everyone') ) return false;