function validate_value()

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;
        
    }