Index: core/kernel/utility/validator.php =================================================================== --- core/kernel/utility/validator.php +++ core/kernel/utility/validator.php @@ -202,7 +202,10 @@ if ( $params['type'] == 'string' || $res ) { $f = 'is_' . $params['type']; - settype($val, $params['type']); + + if ( is_scalar($val) ) { + settype($val, $params['type']); + } $res = $f($val) && ($val == $this->dataSource->GetDBField($field)); } @@ -228,10 +231,15 @@ { $res = true; $val = $this->dataSource->GetDBField($field); + $value_length = is_scalar($val) ? mb_strlen($val) : 0; + + if ( !$value_length ) { + return true; + } - if ( isset($params['type']) && preg_match("#int|integer|double|float|real#", $params['type']) && strlen($val) > 0 ) { - // validate number - if ( isset($params['max_value_inc'])) { + if ( isset($params['type']) && preg_match('#int|integer|double|float|real#', $params['type']) ) { + // Validate number. + if ( isset($params['max_value_inc']) ) { $res = $res && $val <= $params['max_value_inc']; $max_val = $params['max_value_inc'].' (inclusive)'; } @@ -250,43 +258,44 @@ $res = $res && $val > $params['min_value_exc']; $min_val = $params['min_value_exc'].' (exclusive)'; } - } - if ( !$res ) { - if ( !isset($min_val) ) $min_val = '-∞'; - if ( !isset($max_val) ) $max_val = '∞'; + if ( !$res ) { + if ( !isset($min_val) ) { + $min_val = '-∞'; + } - $this->SetError($field, 'value_out_of_range', null, array( - 'min_value' => $min_val, - 'max_value' => $max_val - )); + if ( !isset($max_val) ) { + $max_val = '∞'; + } - return false; + $this->SetError($field, 'value_out_of_range', null, array( + 'min_value' => $min_val, + 'max_value' => $max_val, + )); + } + + return $res; } - if ( strlen($val) > 0 ) { - // Validate string. - if ( isset($params['max_len']) ) { - $res = $res && mb_strlen($val) <= $params['max_len']; - } + // Validate string. + if ( isset($params['max_len']) ) { + $res = $res && $value_length <= $params['max_len']; + } - if ( isset($params['min_len']) ) { - $res = $res && mb_strlen($val) >= $params['min_len']; - } + if ( isset($params['min_len']) ) { + $res = $res && $value_length >= $params['min_len']; } if ( !$res ) { $error_params = array( 'min_length' => (int)getArrayValue($params, 'min_len'), 'max_length' => (int)getArrayValue($params, 'max_len'), - 'value' => mb_strlen($val) + 'value' => $value_length, ); $this->SetError($field, 'length_out_of_range', null, $error_params); - - return false; } - return true; + return $res; } /**