modifs.mineures sans commentaires

This commit is contained in:
Jephté Clain 2023-12-03 22:44:29 +04:00
parent 66a46c9743
commit 09cd738458
9 changed files with 60 additions and 33 deletions

View File

@ -35,7 +35,10 @@ abstract class Value implements ArrayAccess, IteratorAggregate {
abstract function getType(): IType; abstract function getType(): IType;
/** retourner true si la valeur existe */ /** retourner true si la valeur existe */
abstract function available(): bool; abstract function isPresent(): bool;
/** retourner true si la valeur est disponible */
abstract function isAvailable(): bool;
/** supprimer la valeur */ /** supprimer la valeur */
abstract function unset(): void; abstract function unset(): void;
@ -44,16 +47,16 @@ abstract class Value implements ArrayAccess, IteratorAggregate {
abstract function set($value): self; abstract function set($value): self;
/** obtenir le résultat de l'appel de la fonction {@link set()} */ /** obtenir le résultat de l'appel de la fonction {@link set()} */
abstract function result(): Result; abstract function getResult(): Result;
/** retourner true si la valeur est valide */ /** retourner true si la valeur est valide */
abstract function valid(): bool; abstract function isValid(): bool;
/** obtenir la valeur */ /** obtenir la valeur */
abstract function get($default=null); abstract function get($default=null);
/** retourner true si la valeur est dans sa forme normalisée */ /** retourner true si la valeur est dans sa forme normalisée */
abstract function normalized(): bool; abstract function isNormalized(): bool;
/** formatter la valeur pour affichage */ /** formatter la valeur pour affichage */
abstract function format($format=null): string; abstract function format($format=null): string;

View File

@ -9,15 +9,16 @@ use nur\sery\schema\ValueException;
/** /**
* Class ScalarResult: résultat de l'analyse ou de la normalisation d'une valeur * Class ScalarResult: résultat de l'analyse ou de la normalisation d'une valeur
* *
* @property bool $missing la valeur est-elle inexistante? * @property bool $present la valeur existe-t-elle?
* @property bool $null si elle existe, la valeur est-nulle? * @property bool $available si la valeur existe, est-elle disponible?
* @property bool $valid si elle existe, la valeur est-elle valide? * @property bool $null si la valeur existe, est-elle nulle?
* @property bool $valid si la valeur existe, est-elle valide?
* @property bool $normalized si la valeur est valide, est-elle normalisée? * @property bool $normalized si la valeur est valide, est-elle normalisée?
* @property string|null $orig valeur originale avant analyse avec parse() * @property string|null $orig valeur originale avant analyse avec parse()
* @property string|null $message message si la valeur n'est pas valide * @property string|null $message message si la valeur n'est pas valide
*/ */
class ScalarResult extends Result { class ScalarResult extends Result {
const KEYS = ["missing", "null", "valid", "normalized", "orig", "message"]; const KEYS = ["present", "available", "null", "valid", "normalized", "orig", "message"];
function isScalar(?ScalarResult &$scalar=null): bool { $scalar = $this; return true; } function isScalar(?ScalarResult &$scalar=null): bool { $scalar = $this; return true; }
@ -36,7 +37,8 @@ class ScalarResult extends Result {
function reset(): void { function reset(): void {
$this->result = array_merge( $this->result = array_merge(
array_fill_keys(static::KEYS, null), [ array_fill_keys(static::KEYS, null), [
"missing" => true, "present" => false,
"available" => false,
"null" => false, "null" => false,
"valid" => false, "valid" => false,
"normalized" => false, "normalized" => false,
@ -57,9 +59,10 @@ class ScalarResult extends Result {
} }
function setMissing(ScalarSchema $schema): int { function setMissing(ScalarSchema $schema): int {
$this->missing = true; $this->present = false;
$this->available = false;
if (!$schema->required) { if (!$schema->required) {
$this->null = true; $this->null = false;
$this->valid = true; $this->valid = true;
$this->normalized = true; $this->normalized = true;
return ref_analyze::NORMALIZED; return ref_analyze::NORMALIZED;
@ -71,8 +74,26 @@ class ScalarResult extends Result {
} }
} }
function setUnavailable(ScalarSchema $schema): int {
$this->present = true;
$this->available = false;
if (!$schema->required) {
$this->null = false;
$this->valid = true;
$this->normalized = true;
return ref_analyze::NORMALIZED;
} else {
$message = cl::get($schema->messages, "unavailable");
self::replace_key($message, $schema->name);
$this->message = $message;
return ref_analyze::UNAVAILABLE;
}
}
function setNull(ScalarSchema $schema): int { function setNull(ScalarSchema $schema): int {
$this->missing = true; $this->present = true;
$this->available = true;
$this->null = true;
if ($schema->nullable) { if ($schema->nullable) {
$this->valid = true; $this->valid = true;
$this->normalized = true; $this->normalized = true;

View File

@ -61,23 +61,23 @@ class ScalarValue extends Value {
$result = $this->result; $result = $this->result;
$result->reset(); $result->reset();
#XXX résoudre le type #XXX résoudre le type
if (!$input->available()) return $result->setMissing($schema); if (!$input->isAvailable()) return $result->setUnavailable($schema);
$value = $input->get($destKey); $value = $input->get($destKey);
if ($value === null) return $result->setNull($schema); if ($value === null) return $result->setNull($schema);
} }
function exists(): bool { function isPresent(): bool {
return $this->input->exits($this->destKey); return $this->input->isPresent($this->destKey);
} }
function available(): bool { function isAvailable(): bool {
return $this->input->available($this->destKey); return $this->input->isAvailable($this->destKey);
} }
function get($default=null) { function get($default=null) {
$destKey = $this->destKey; $destKey = $this->destKey;
$input = $this->input; $input = $this->input;
if ($input->available($destKey)) return $input->get($destKey); if ($input->isAvailable($destKey)) return $input->get($destKey);
else return $default; else return $default;
} }
@ -92,10 +92,10 @@ class ScalarValue extends Value {
return $this->type; return $this->type;
} }
function valid(): bool { function isValid(): bool {
} }
function normalized(): bool { function isNormalized(): bool {
} }
/** /**

View File

@ -14,12 +14,12 @@ namespace nur\sery\schema\input;
class FormInput extends Input { class FormInput extends Input {
const ALLOW_EMPTY = false; const ALLOW_EMPTY = false;
function exists($key=null): bool { function isPresent($key=null): bool {
if ($key === null) return false; if ($key === null) return false;
return array_key_exists($key, $_POST) || array_key_exists($key, $_GET); return array_key_exists($key, $_POST) || array_key_exists($key, $_GET);
} }
function available($key=null): bool { function isAvailable($key=null): bool {
if ($key === null) return false; if ($key === null) return false;
if (array_key_exists($key, $_POST)) { if (array_key_exists($key, $_POST)) {
return $this->allowEmpty || $_POST[$key] !== ""; return $this->allowEmpty || $_POST[$key] !== "";

View File

@ -8,12 +8,12 @@ namespace nur\sery\schema\input;
* une référence * une référence
*/ */
class GetInput extends FormInput { class GetInput extends FormInput {
function exists($key=null): bool { function isPresent($key=null): bool {
if ($key === null) return false; if ($key === null) return false;
return array_key_exists($key, $_GET); return array_key_exists($key, $_GET);
} }
function available($key=null): bool { function isAvailable($key=null): bool {
if ($key === null) return false; if ($key === null) return false;
if (array_key_exists($key, $_GET)) { if (array_key_exists($key, $_GET)) {
return $this->allowEmpty || $_GET[$key] !== ""; return $this->allowEmpty || $_GET[$key] !== "";

View File

@ -24,7 +24,7 @@ class Input {
protected $dest; protected $dest;
/** tester si la valeur existe sans tenir compte de $allowEmpty */ /** tester si la valeur existe sans tenir compte de $allowEmpty */
function exits($key=null): bool { function isPresent($key=null): bool {
if ($key === null) return true; if ($key === null) return true;
$dest = $this->dest; $dest = $this->dest;
return $dest !== null && array_key_exists($key, $dest); return $dest !== null && array_key_exists($key, $dest);
@ -36,7 +36,7 @@ class Input {
protected $allowEmpty; protected $allowEmpty;
/** tester si la valeur est disponible en tenant compte de $allowEmpty */ /** tester si la valeur est disponible en tenant compte de $allowEmpty */
function available($key=null): bool { function isAvailable($key=null): bool {
if ($key === null) return true; if ($key === null) return true;
$dest = $this->dest; $dest = $this->dest;
if ($dest === null || !array_key_exists($key, $dest)) return false; if ($dest === null || !array_key_exists($key, $dest)) return false;

View File

@ -8,12 +8,12 @@ namespace nur\sery\schema\input;
* une référence * une référence
*/ */
class PostInput extends FormInput { class PostInput extends FormInput {
function exists($key=null): bool { function isPresent($key=null): bool {
if ($key === null) return false; if ($key === null) return false;
return array_key_exists($key, $_POST); return array_key_exists($key, $_POST);
} }
function available($key=null): bool { function isAvailable($key=null): bool {
if ($key === null) return false; if ($key === null) return false;
if (array_key_exists($key, $_POST)) { if (array_key_exists($key, $_POST)) {
return $this->allowEmpty || $_POST[$key] !== ""; return $this->allowEmpty || $_POST[$key] !== "";

View File

@ -4,19 +4,21 @@ namespace nur\sery\schema\ref;
class ref_analyze { class ref_analyze {
/** @var int résultat de l'analyse: valeur inexistante */ /** @var int résultat de l'analyse: valeur inexistante */
const MISSING = 0; const MISSING = 0;
/** @var int résultat de l'analyse: valeur non disponible */
const UNAVAILABLE = 1;
/** @var int résultat de l'analyse: valeur nulle */ /** @var int résultat de l'analyse: valeur nulle */
const NULL = 1; const NULL = 2;
/** @var int résultat de l'analyse: valeur chaine à parser */ /** @var int résultat de l'analyse: valeur chaine à parser */
const STRING = 2; const STRING = 3;
/** @var int résultat de l'analyse: valeur invalide */ /** @var int résultat de l'analyse: valeur invalide */
const INVALID = 3; const INVALID = 4;
/** @var int résultat de l'analyse: valeur valide mais pas normalisée */ /** @var int résultat de l'analyse: valeur valide mais pas normalisée */
const VALID = 4; const VALID = 5;
/** @var int résultat de l'analyse: valeur valide normalisée */ /** @var int résultat de l'analyse: valeur valide normalisée */
const NORMALIZED = 5; const NORMALIZED = 6;
} }

View File

@ -42,6 +42,7 @@ class ref_schema {
const MESSAGES = [ const MESSAGES = [
"missing" => "{key}: Vous devez spécifier cette valeur", "missing" => "{key}: Vous devez spécifier cette valeur",
"unavailable" => "{key}: Vous devez spécifier cette valeur",
"null" => "{key}: Cette valeur ne doit pas être nulle", "null" => "{key}: Cette valeur ne doit pas être nulle",
"empty" => "{key}: Cette valeur ne doit pas être vide", "empty" => "{key}: Cette valeur ne doit pas être vide",
"invalid" => "{key}: {orig}: cette valeur est invalide", "invalid" => "{key}: {orig}: cette valeur est invalide",