public function validateRule($field_type, $element_num, $field_num)
{
$errors = array();
if (!isset($this->validation_rules[$field_type])) {
return $errors;
}
foreach ($this->validation_rules[$field_type] as $field => $rules) {
foreach ($rules as $rule) {
if (isset($rule['field_property'])) {
$key = $field . '[' . $rule['field_property'] . ']';
$value = @$_POST[$field][$rule['field_property']];
} else {
$key = $this->substitutePostValue($field, $element_num, $field_num);
$value = @$_POST[$key];
}
if (isset($errors[$key])) {
continue;
}
if (isset($rule['condition'])) {
$condition_key = $this->substitutePostValue($rule['condition']['field'], $element_num, $field_num);
if (isset($rule['condition']['value_list'])) {
if (!in_array(@$_POST[$condition_key], $rule['condition']['value_list'])) {
continue;
}
} else {
if (@$_POST[$condition_key] != $rule['condition']['value']) {
continue;
}
}
}
if ($rule['type'] == 'required') {
if (is_array($value) && empty($value) || !is_array($value) && strlen($value) < 1) {
$errors[$key] = isset($rule['message']) ? $rule['message'] : 'This field is required';
$errors[$key] .= ' (' . $value . ') [' . $key . ']';
continue;
}
} elseif (strlen($value) < 1) {
continue;
}
switch ($rule['type']) {
case 'length':
if (isset($rule['regstrip'])) {
$checkval = preg_replace($rule['regstrip'], '', $value);
} else {
$checkval = $value;
}
if (isset($rule['max']) && strlen($checkval) > $rule['max']) {
$errors[$key] = isset($rule['message']) ? $rule['message'] : 'Cannot be longer than ' . $rule['max'] . ' characters';
}
if (isset($rule['min']) && strlen($checkval) < $rule['min']) {
$errors[$key] = isset($rule['message']) ? $rule['message'] : 'Must be at least ' . $rule['min'] . ' characters';
}
break;
case 'integer':
if (!preg_match('/^\\-?[0-9]+$/', $value)) {
$errors[$key] = isset($rule['message']) ? $rule['message'] : 'Must be an integer';
}
break;
case 'integer_positive':
if (!ctype_digit($value)) {
$errors[$key] = isset($rule['message']) ? $rule['message'] : 'Must be a positive integer';
}
break;
case 'number':
if (!preg_match('/^\\-?[0-9\\.]+$/', $value)) {
$errors[$key] = isset($rule['message']) ? $rule['message'] : 'Must be a number';
}
break;
case 'number_positive':
if (!preg_match('/^[0-9\\.]+$/', $value)) {
$errors[$key] = isset($rule['message']) ? $rule['message'] : 'Must be a positive number';
}
break;
case 'compare':
if (isset($rule['compare_field'])) {
$compare = $this->substitutePostValue($rule['compare_field'], $element_num, $field_num);
$compare = $_POST[$compare];
} else {
$compare = $rule['compare_value'];
}
switch ($rule['operator']) {
case 'greater_equal':
if ($value < $compare) {
echo "[{$value}][{$compare}]";
$errors[$key] = isset($rule['message']) ? $rule['message'] : 'Must be ' . $compare . ' or greater';
}
break;
case 'lesser_equal':
if ($value > $compare) {
$errors[$key] = isset($rule['message']) ? $rule['message'] : 'Must be ' . $compare . ' or lower';
}
break;
}
break;
case 'regex':
if (!preg_match($rule['regex'], $value)) {
$errors[$key] = isset($rule['message']) ? $rule['message'] : 'Invalid characters in input';
}
break;
case 'exists':
if (isset($rule['exists_method'])) {
$method = $rule['exists_method'];
if ($this->{$method}($value)) {
$errors[$key] = isset($rule['message']) ? $rule['message'] : 'Already exists';
}
}
break;
}
}
}
return $errors;
}