The clean & modern RSS server that doesn't give you any crap. https://thearsse.com/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

83 lines
2.8 KiB

<?php
declare(strict_types=1);
namespace JKingWeb\Arsse\REST;
use JKingWeb\Arsse\Misc\Date;
abstract class AbstractHandler implements Handler {
abstract function __construct();
abstract function dispatch(Request $req): Response;
protected function fieldMapNames(array $data, array $map): array {
$out = [];
foreach($map as $to => $from) {
if(array_key_exists($from, $data)) {
$out[$to] = $data[$from];
}
}
return $out;
}
protected function fieldMapTypes(array $data, array $map, string $dateFormat = "sql"): array {
foreach($map as $key => $type) {
if(array_key_exists($key, $data)) {
if($type=="datetime" && $dateFormat != "sql") {
$data[$key] = Date::transform($data[$key], $dateFormat, "sql");
} else {
settype($data[$key], $type);
}
}
}
return $data;
}
protected function validateInt($id): bool {
$ch1 = strval(@intval($id));
$ch2 = strval($id);
return ($ch1 === $ch2);
}
protected function NormalizeInput(array $data, array $types, string $dateFormat = null): array {
$out = [];
foreach($data as $key => $value) {
if(!isset($types[$key])) {
$out[$key] = $value;
continue;
}
if(is_null($value)) {
$out[$key] = null;
continue;
}
switch($types[$key]) {
case "int":
if($this->validateInt($value)) $out[$key] = (int) $value;
break;
case "string":
$out[$key] = (string) $value;
break;
case "bool":
if(is_bool($value)) {
$out[$key] = $value;
} else if($this->validateInt($value)) {
$value = (int) $value;
if($value > -1 && $value < 2) $out[$key] = $value;
} else if(is_string($value)) {
$value = trim(strtolower($value));
if($value=="false") $out[$key] = false;
if($value=="true") $out[$key] = true;
}
break;
case "float":
if(is_numeric($value)) $out[$key] = (float) $value;
break;
case "datetime":
$t = Date::normalize($value, $dateFormat);
if($t) $out[$key] = $t;
break;
default:
throw new Exception("typeUnknown", $types[$key]);
}
}
return $out;
}
}