예제 #1
0
 function run_on_single_field($field, $value)
 {
     if (!isset($this->rules[$field]) || !is_array($this->rules[$field])) {
         // no rules means always valid
         return true;
     }
     $verdict = true;
     foreach ($this->rules[$field] as $rule) {
         $callback = GP_Validators::get($rule['rule']);
         if (is_null($callback)) {
             trigger_error(__('Non-existent validator: ' . $rule['rule']));
             continue;
         }
         $args = $rule['args'];
         array_unshift($args, $value);
         // TODO: refactor
         if ('positive' == $rule['kind']) {
             if (!call_user_func_array($callback['positive'], $args)) {
                 $this->errors[] = $this->construct_error_message($rule, $value);
                 $verdict = false;
             }
         } else {
             if (is_null($callback['negative'])) {
                 if (call_user_func_array($callback['positive'], $args)) {
                     $this->errors[] = $this->construct_error_message($rule, $value);
                     $verdict = false;
                 }
             } else {
                 if (!call_user_func_array($callback['negative'], $args)) {
                     $this->errors[] = $this->construct_error_message($rule, $value);
                     $verdict = false;
                 }
             }
         }
     }
     return $verdict;
 }
 function test_between()
 {
     $callback = GP_Validators::get('between');
     $f = $callback['positive'];
     $this->assertEquals(true, $f(0, -1, 2));
 }