|
|
|
|
@ -31,124 +31,123 @@ trait form_validator { |
|
|
|
|
'valid_domain' => 'The %s domain name is not active', |
|
|
|
|
]; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* |
|
|
|
|
* @param array $data |
|
|
|
|
* @param string $field |
|
|
|
|
* @param mixed return: null avoids an error on no-entry; false gives errors on no-entry; default is the value |
|
|
|
|
*/ |
|
|
|
|
private static function check_if_empty(array $data, string $field) { |
|
|
|
|
$d = $data[$field] ?? null; |
|
|
|
|
return match($d) { |
|
|
|
|
null => true, // Pass validation as null or value unset |
|
|
|
|
false => false, // Fail validation as user requested false on default |
|
|
|
|
default => $d // Use value |
|
|
|
|
}; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private static function is_positive(array $data, string $field): bool { |
|
|
|
|
return (intval($data[$field]) >= 0) ? true : false; |
|
|
|
|
$r = self::check_if_empty($data, $field); |
|
|
|
|
if (is_bool($r)) return $r; |
|
|
|
|
return (intval($r) >= 0) ? true : false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private static function is_required(array $data, string $field): bool { |
|
|
|
|
if (isset($data[$field])) { |
|
|
|
|
if (common::get_count($data[$field])) { |
|
|
|
|
return false; // Should not be an array here |
|
|
|
|
} |
|
|
|
|
if (is_string($data[$field])) { |
|
|
|
|
return (trim($data[$field]) !== ''); |
|
|
|
|
} |
|
|
|
|
if (is_int($data[$field])) { |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
$r = self::check_if_empty($data, $field); |
|
|
|
|
if (is_bool($r)) return $r; |
|
|
|
|
|
|
|
|
|
if (common::get_count($r)) { |
|
|
|
|
return false; // Should not be an array here |
|
|
|
|
} |
|
|
|
|
if (is_string($r)) { |
|
|
|
|
return (trim($r) !== ''); |
|
|
|
|
} |
|
|
|
|
if (is_int($r)) { |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private static function is_email(array $data, string $field): bool { |
|
|
|
|
if (empty($data[$field])) { |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
return (filter_var($data[$field], FILTER_VALIDATE_EMAIL) === false) ? false : true; |
|
|
|
|
$r = self::check_if_empty($data, $field); |
|
|
|
|
if (is_bool($r)) return $r; |
|
|
|
|
return (filter_var($r, FILTER_VALIDATE_EMAIL) === false) ? false : true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private static function is_min(array $data, string $field, string $min): bool { |
|
|
|
|
if (!isset($data[$field])) { |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return mb_strlen($data[$field]) >= intval($min); |
|
|
|
|
$r = self::check_if_empty($data, $field); |
|
|
|
|
if (is_bool($r)) return $r; |
|
|
|
|
return mb_strlen($r) >= intval($min); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private static function is_max(array $data, string $field, string $max): bool { |
|
|
|
|
if (!isset($data[$field])) { |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return mb_strlen($data[$field]) <= intval($max); |
|
|
|
|
$r = self::check_if_empty($data, $field); |
|
|
|
|
if (is_bool($r)) return $r; |
|
|
|
|
return mb_strlen($r) <= intval($max); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private static function is_greater_than(array $data, string $field, string $min): bool { |
|
|
|
|
if (!isset($data[$field])) { |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return intval($data[$field]) > intval($min); |
|
|
|
|
$r = self::check_if_empty($data, $field); |
|
|
|
|
if (is_bool($r)) return $r; |
|
|
|
|
return intval($r) > intval($min); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private static function is_less_than(array $data, string $field, string $max): bool { |
|
|
|
|
if (!isset($data[$field])) { |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return intval($data[$field]) < intval($max); |
|
|
|
|
$r = self::check_if_empty($data, $field); |
|
|
|
|
if (is_bool($r)) return $r; |
|
|
|
|
return intval($r) < intval($max); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private static function is_number_range(array $data, string $field, string $min, string $max): bool { |
|
|
|
|
|
|
|
|
|
if (!isset($data[$field])) { |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$no = intval($data[$field]); |
|
|
|
|
$r = self::check_if_empty($data, $field); |
|
|
|
|
if (is_bool($r)) return $r; |
|
|
|
|
$no = intval($r); |
|
|
|
|
return $no >= intval($min) && $no <= intval($max); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private static function is_between(array $data, string $field, string $min, string $max): bool { |
|
|
|
|
if (!isset($data[$field])) { |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$len = mb_strlen($data[$field]); |
|
|
|
|
$r = self::check_if_empty($data, $field); |
|
|
|
|
if (is_bool($r)) return $r; |
|
|
|
|
$len = mb_strlen($r); |
|
|
|
|
return $len >= intval($min) && $len <= intval($max); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private static function is_same(array $data, string $field, string $other): bool { |
|
|
|
|
if (isset($data[$field]) && isset($data[$other])) { |
|
|
|
|
return $data[$field] === $data[$other]; |
|
|
|
|
$r = self::check_if_empty($data, $field); |
|
|
|
|
if (is_bool($r)) return $r; |
|
|
|
|
|
|
|
|
|
if (isset($data[$other])) { |
|
|
|
|
return $r === $data[$other]; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private static function is_alphanumeric(array $data, string $field): bool { |
|
|
|
|
if (!isset($data[$field])) { |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return ctype_alnum($data[$field]); |
|
|
|
|
$r = self::check_if_empty($data, $field); |
|
|
|
|
if (is_bool($r)) return $r; |
|
|
|
|
return ctype_alnum($r); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private static function is_secure(array $data, string $field): bool { |
|
|
|
|
if (!isset($data[$field])) { |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
$r = self::check_if_empty($data, $field); |
|
|
|
|
if (is_bool($r)) return $r; |
|
|
|
|
// Is 8 to 64 CHRs |
|
|
|
|
$pattern = "#.*^(?=.{8,64})(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*\W).*$#"; |
|
|
|
|
return preg_match($pattern, $data[$field]); |
|
|
|
|
return preg_match($pattern, $r); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private static function is_valid_email_domain(array $data, string $field): bool { |
|
|
|
|
if (!isset($data[$field])) { |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$domain = ltrim(stristr($data[$field], '@'), '@') . '.'; |
|
|
|
|
$r = self::check_if_empty($data, $field); |
|
|
|
|
if (is_bool($r)) return $r; |
|
|
|
|
$domain = ltrim(stristr($r, '@'), '@') . '.'; |
|
|
|
|
return checkdnsrr($domain, 'MX'); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private static function is_valid_domain(array $data, string $field): bool { |
|
|
|
|
if (!isset($data[$field])) { |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return checkdnsrr($data[$field], 'A') |
|
|
|
|
|| checkdnsrr($data[$field], 'AAAA') |
|
|
|
|
|| checkdnsrr($data[$field], 'CNAME'); |
|
|
|
|
$r = self::check_if_empty($data, $field); |
|
|
|
|
if (is_bool($r)) return $r; |
|
|
|
|
return checkdnsrr($r, 'A') |
|
|
|
|
|| checkdnsrr($r, 'AAAA') |
|
|
|
|
|| checkdnsrr($r, 'CNAME'); |
|
|
|
|
} |
|
|
|
|
} |