in web/wp-content/plugins/acf-extended/includes/fields-settings/validation.php [417:617]
function validate_value($valid, $value, $field, $input){
if(!$valid){
return $valid;
}
if(!acf_maybe_get($field, 'acfe_validate')){
return $valid;
}
foreach($field['acfe_validate'] as $k => $rule){
// fix possible acf clone index
if($k === 'acfcloneindex'){
continue;
}
// screen
$screen = isset($rule['acfe_validate_location']) ? $rule['acfe_validate_location'] : '';
$screen_allow = false;
// screen: all
if(empty($screen)){
$screen_allow = true;
}
// screen: admin
elseif($screen === 'admin' && acfe_is_admin()){
$screen_allow = true;
}
// screen: front
elseif($screen === 'front' && acfe_is_front()){
$screen_allow = true;
}
if(!$screen_allow){
continue;
}
if(!acf_maybe_get($rule, 'acfe_validate_rules_and')){
continue;
}
$rule_match = true;
foreach($rule['acfe_validate_rules_and'] as $k => $function){
if(!$rule_match){
break;
}
$rule_match = false;
// check filters
$filters = array(
'acfe/validate/function/' . $function['acfe_validate_function'] . '/key=' . $field['key'],
'acfe/validate/function/' . $function['acfe_validate_function'] . '/name=' . $field['name'],
'acfe/validate/function/' . $function['acfe_validate_function'] . '/type=' . $field['type'],
'acfe/validate/function/' . $function['acfe_validate_function'],
);
$filter_call = false;
foreach($filters as $filter){
if(has_filter($filter)){
$filter_call = $filter;
}
}
// filter
if($filter_call){
$result = apply_filters($filter_call, false, $value, $field);
}
// class
elseif(is_callable(array($this, $function['acfe_validate_function']))){
$result = call_user_func(array($this, $function['acfe_validate_function']), $value);
}
// function
elseif(is_callable($function['acfe_validate_function'])){
$result = call_user_func($function['acfe_validate_function'], $value);
}
// nothing
else{
continue;
}
// vars
$operator = $function['acfe_validate_operator'];
$match = acf_maybe_get($function, 'acfe_validate_match');
if($operator === '==' && $result == $match){
$rule_match = true;
}
elseif($operator === '!=' && $result != $match){
$rule_match = true;
}
elseif($operator === '>' && $result > $match){
$rule_match = true;
}
elseif($operator === '>=' && $result >= $match){
$rule_match = true;
}
elseif($operator === '<' && $result < $match){
$rule_match = true;
}
elseif($operator === '<=' && $result <= $match){
$rule_match = true;
}
elseif($operator === 'contains' && stripos($result, $match) !== false){
$rule_match = true;
}
elseif($operator === '!contains' && stripos($result, $match) === false){
$rule_match = true;
}
elseif($operator === 'starts' && stripos($result, $match) === 0){
$rule_match = true;
}
elseif($operator === '!starts' && stripos($result, $match) !== 0){
$rule_match = true;
}
elseif($operator === 'ends' && acfe_ends_with($result, $match)){
$rule_match = true;
}
elseif($operator === '!ends' && !acfe_ends_with($result, $match)){
$rule_match = true;
}
elseif($operator === 'regex' && preg_match('/' . $match . '/u', $result)){
$rule_match = true;
}
elseif($operator === '!regex' && !preg_match('/' . $match . '/u', $result)){
$rule_match = true;
}
elseif($operator === 'true' && $result === true){
$rule_match = true;
}
elseif($operator === '!true' && $result !== true){
$rule_match = true;
}
elseif($operator === 'false' && $result === false){
$rule_match = true;
}
elseif($operator === '!false' && $result !== false){
$rule_match = true;
}
elseif($operator === 'null' && $result === null){
$rule_match = true;
}
elseif($operator === '!null' && $result !== null){
$rule_match = true;
}
elseif($operator === 'empty' && empty($result)){
$rule_match = true;
}
elseif($operator === '!empty' && !empty($result)){
$rule_match = true;
}
}
// rrror
$error = $rule['acfe_validate_error'];
if($rule_match && !empty($error)){
$valid = $error;
}
if(!$valid || is_string($valid)){
break;
}
}
return $valid;
}