modifs.mineures sans commentaires
This commit is contained in:
		
							parent
							
								
									4d238cc44e
								
							
						
					
					
						commit
						80fab7e636
					
				
							
								
								
									
										98
									
								
								src/schema/ConsolidatedResult.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										98
									
								
								src/schema/ConsolidatedResult.php
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,98 @@ | ||||
| <?php | ||||
| namespace nulib\schema; | ||||
| 
 | ||||
| use nulib\ValueException; | ||||
| 
 | ||||
| class ConsolidatedResult extends Result { | ||||
|   function addMissingMessage(Wrapper $wrapper): void { | ||||
|     $this->resultAvailable = true; | ||||
|     $this->present = false; | ||||
|     $this->available = false; | ||||
|     $this->null = false; | ||||
|     $this->valid = false; | ||||
|     $this->messageKey = "missing"; | ||||
|     $result = $wrapper->getResult(); | ||||
|     $resultException = $result->exception; | ||||
|     $resultMessage = $result->message; | ||||
|     if ($resultException !== null) { | ||||
|       $tmessage = ValueException::get_message($resultException); | ||||
|       if ($tmessage) { | ||||
|         if ($resultMessage !== null) $resultMessage .= ": "; | ||||
|         $resultMessage .= $tmessage; | ||||
|       } | ||||
|     } | ||||
|     $message = $this->message; | ||||
|     if ($message) $message .= "\n"; | ||||
|     $message .= $resultMessage; | ||||
|     $this->message = $message; | ||||
|   } | ||||
| 
 | ||||
|   function addUnavailableMessage(Wrapper $wrapper): void { | ||||
|     $this->resultAvailable = true; | ||||
|     $this->present = true; | ||||
|     $this->available = false; | ||||
|     $this->null = false; | ||||
|     $this->valid = false; | ||||
|     $this->messageKey = "unavailable"; | ||||
|     $result = $wrapper->getResult(); | ||||
|     $resultException = $result->exception; | ||||
|     $resultMessage = $result->message; | ||||
|     if ($resultException !== null) { | ||||
|       $tmessage = ValueException::get_message($resultException); | ||||
|       if ($tmessage) { | ||||
|         if ($resultMessage !== null) $resultMessage .= ": "; | ||||
|         $resultMessage .= $tmessage; | ||||
|       } | ||||
|     } | ||||
|     $message = $this->message; | ||||
|     if ($message) $message .= "\n"; | ||||
|     $message .= $resultMessage; | ||||
|     $this->message = $message; | ||||
|   } | ||||
| 
 | ||||
|   function addNullMessage(Wrapper $wrapper): void { | ||||
|     $this->resultAvailable = true; | ||||
|     $this->present = true; | ||||
|     $this->available = true; | ||||
|     $this->null = true; | ||||
|     $this->valid = false; | ||||
|     $this->messageKey = "null"; | ||||
|     $result = $wrapper->getResult(); | ||||
|     $resultException = $result->exception; | ||||
|     $resultMessage = $result->message; | ||||
|     if ($resultException !== null) { | ||||
|       $tmessage = ValueException::get_message($resultException); | ||||
|       if ($tmessage) { | ||||
|         if ($resultMessage !== null) $resultMessage .= ": "; | ||||
|         $resultMessage .= $tmessage; | ||||
|       } | ||||
|     } | ||||
|     $message = $this->message; | ||||
|     if ($message) $message .= "\n"; | ||||
|     $message .= $resultMessage; | ||||
|     $this->message = $message; | ||||
|   } | ||||
| 
 | ||||
|   function addInvalidMessage(Wrapper $wrapper): void { | ||||
|     $this->resultAvailable = true; | ||||
|     $this->present = true; | ||||
|     $this->available = true; | ||||
|     $this->null = false; | ||||
|     $this->valid = false; | ||||
|     $this->messageKey = "invalid"; | ||||
|     $result = $wrapper->getResult(); | ||||
|     $resultException = $result->exception; | ||||
|     $resultMessage = $result->message; | ||||
|     if ($resultException !== null) { | ||||
|       $tmessage = ValueException::get_message($resultException); | ||||
|       if ($tmessage) { | ||||
|         if ($resultMessage !== null) $resultMessage .= ": "; | ||||
|         $resultMessage .= $tmessage; | ||||
|       } | ||||
|     } | ||||
|     $message = $this->message; | ||||
|     if ($message) $message .= "\n"; | ||||
|     $message .= $resultMessage; | ||||
|     $this->message = $message; | ||||
|   } | ||||
| } | ||||
| @ -1,7 +1,10 @@ | ||||
| <?php | ||||
| namespace nulib\schema; | ||||
| 
 | ||||
| use IteratorAggregate; | ||||
| use nulib\cl; | ||||
| use nulib\ref\schema\ref_analyze; | ||||
| use nulib\ref\schema\ref_schema; | ||||
| use nulib\ValueException; | ||||
| use Throwable; | ||||
| 
 | ||||
| /** | ||||
| @ -22,39 +25,135 @@ use Throwable; | ||||
|  *  disponible, null sinon. ce champ est utilisé comme optimisation si la valeur | ||||
|  *  normalisée a déjà été calculée | ||||
|  */ | ||||
| abstract class Result implements IteratorAggregate { | ||||
|   const KEYS = [ | ||||
|     "resultAvailable", | ||||
|     "present", "available", "null", "valid", "normalized", | ||||
|     "messageKey", "message", "exception", | ||||
|     "origValue", "normalizedValue", | ||||
|   ]; | ||||
| 
 | ||||
| class Result { | ||||
|   function __construct() { | ||||
|     $this->reset(); | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * Obtenir la liste des clés valides pour les valeurs accessibles via cet | ||||
|    * objet | ||||
|    */ | ||||
|   abstract function getKeys(): array; | ||||
| 
 | ||||
|   /** | ||||
|    * sélectionner le résultat associé à la clé spécifiée | ||||
|    * | ||||
|    * @param string|int|null $key | ||||
|    * @return Result $this | ||||
|    */ | ||||
|   abstract function select($key): Result; | ||||
| 
 | ||||
|   function getIterator() { | ||||
|     foreach ($this->getKeys() as $key) { | ||||
|       yield $key => $this->select($key); | ||||
|     } | ||||
|     $this->select(null); | ||||
|   } | ||||
|   public bool $resultAvailable; | ||||
|   public bool $present; | ||||
|   public bool $available; | ||||
|   public bool $null; | ||||
|   public bool $valid; | ||||
|   public bool $normalized; | ||||
|   public ?string $messageKey; | ||||
|   public ?string $message; | ||||
|   public ?Throwable $exception; | ||||
|   public ?string $origValue; | ||||
|   public $normalizedValue; | ||||
| 
 | ||||
|   /** réinitialiser tous les objets résultats accessibles via cet objet */ | ||||
|   abstract function reset(): void; | ||||
|   function reset(): void { | ||||
|     $this->resultAvailable = false; | ||||
|     $this->present = false; | ||||
|     $this->available = false; | ||||
|     $this->null = false; | ||||
|     $this->valid = false; | ||||
|     $this->normalized = false; | ||||
|     $this->messageKey = null; | ||||
|     $this->message = null; | ||||
|     $this->exception = null; | ||||
|     $this->origValue = null; | ||||
|     $this->normalizedValue = null; | ||||
|   } | ||||
| 
 | ||||
|   protected function getMessage(string $key,  Schema $schema): string { | ||||
|     $message = cl::get($schema->messages, $key); | ||||
|     if ($message !== null) return $message; | ||||
|     return cl::get(ref_schema::MESSAGES, $key); | ||||
|   } | ||||
| 
 | ||||
|   function setMissing( Schema $schema): int { | ||||
|     $this->resultAvailable = true; | ||||
|     $this->present = false; | ||||
|     $this->available = false; | ||||
|     if (!$schema->required) { | ||||
|       $this->null = false; | ||||
|       $this->valid = true; | ||||
|       $this->normalized = true; | ||||
|       return ref_analyze::NORMALIZED; | ||||
|     } else { | ||||
|       $this->messageKey = $messageKey = "missing"; | ||||
|       $this->message = $this->getMessage($messageKey, $schema); | ||||
|       return ref_analyze::MISSING; | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   function setUnavailable( Schema $schema): int { | ||||
|     $this->resultAvailable = true; | ||||
|     $this->present = true; | ||||
|     $this->available = false; | ||||
|     if (!$schema->required) { | ||||
|       $this->null = false; | ||||
|       $this->valid = true; | ||||
|       $this->normalized = true; | ||||
|       return ref_analyze::NORMALIZED; | ||||
|     } else { | ||||
|       $this->messageKey = $messageKey = "unavailable"; | ||||
|       $this->message = $this->getMessage($messageKey, $schema); | ||||
|       return ref_analyze::UNAVAILABLE; | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   function setNull( Schema $schema): int { | ||||
|     $this->resultAvailable = true; | ||||
|     $this->present = true; | ||||
|     $this->available = true; | ||||
|     $this->null = true; | ||||
|     if ($schema->nullable) { | ||||
|       $this->valid = true; | ||||
|       $this->normalized = true; | ||||
|       return ref_analyze::NORMALIZED; | ||||
|     } else { | ||||
|       $this->messageKey = $messageKey = "null"; | ||||
|       $this->message = $this->getMessage($messageKey, $schema); | ||||
|       return ref_analyze::NULL; | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   function setInvalid($value,  Schema $schema, ?Throwable $exception=null): int { | ||||
|     $this->resultAvailable = true; | ||||
|     $this->present = true; | ||||
|     $this->available = true; | ||||
|     $this->null = false; | ||||
|     $this->valid = false; | ||||
|     $this->origValue = $value; | ||||
|     $this->messageKey = $messageKey = "invalid"; | ||||
|     $message = $this->getMessage($messageKey, $schema); | ||||
|     if ($exception !== null) { | ||||
|       $tmessage = ValueException::get_message($exception); | ||||
|       if ($tmessage) $message = $tmessage; | ||||
|     } | ||||
|     $this->message = $message; | ||||
|     $this->exception = $exception; | ||||
|     return ref_analyze::INVALID; | ||||
|   } | ||||
| 
 | ||||
|   function setValid($normalizedValue=null): int { | ||||
|     $this->resultAvailable = true; | ||||
|     $this->present = true; | ||||
|     $this->available = true; | ||||
|     $this->null = false; | ||||
|     $this->valid = true; | ||||
|     $this->normalizedValue = $normalizedValue; | ||||
|     return ref_analyze::VALID; | ||||
|   } | ||||
| 
 | ||||
|   function setNormalized(): int { | ||||
|     $this->resultAvailable = true; | ||||
|     $this->present = true; | ||||
|     $this->available = true; | ||||
|     $this->null = false; | ||||
|     $this->valid = true; | ||||
|     $this->normalized = true; | ||||
|     return ref_analyze::NORMALIZED; | ||||
|   } | ||||
| 
 | ||||
|   function throw(bool $throw): void { | ||||
|     if ($throw) { | ||||
|       $exception = $this->exception; | ||||
|       if ($exception !== null) throw $exception; | ||||
|       else throw new ValueException($this->message); | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  | ||||
| @ -1,11 +1,5 @@ | ||||
| # nulib\schema | ||||
| 
 | ||||
| * pour AssocResult, les clés suivantes sont supportées: | ||||
|   * false pour la clé courante | ||||
|   * null pour un résultat aggrégé | ||||
|   * "" pour le résultat du tableau | ||||
|   * $key pour le résultat de la clé correspondante | ||||
| 
 | ||||
| * rajouter l'attribut "size" pour spécifier la taille maximale des valeurs | ||||
|   * cela pourrait servir pour générer automatiquement des tables SQL | ||||
|   * ou pour modéliser un schéma FSV | ||||
|  | ||||
| @ -4,12 +4,9 @@ namespace nulib\schema; | ||||
| use ArrayAccess; | ||||
| use IteratorAggregate; | ||||
| use nulib\php\func; | ||||
| use nulib\schema\_assoc\AssocWrapper; | ||||
| use nulib\schema\_list\ListWrapper; | ||||
| use nulib\schema\_scalar\ScalarResult; | ||||
| use nulib\schema\_scalar\ScalarWrapper; | ||||
| use nulib\schema\input\Input; | ||||
| use nulib\schema\types\IType; | ||||
| use nulib\ValueException; | ||||
| 
 | ||||
| abstract class Wrapper implements ArrayAccess, IteratorAggregate { | ||||
|   protected WrapperContext $context; | ||||
| @ -77,13 +74,8 @@ abstract class Wrapper implements ArrayAccess, IteratorAggregate { | ||||
|   /** normaliser la valeur */ | ||||
|   abstract static function _normalize(WrapperContext $context, Wrapper $wrapper, ?array $params): bool; | ||||
| 
 | ||||
|   protected function checkResult(): void { | ||||
|     $context = $this->context; | ||||
|     /** @var ScalarResult $result */ | ||||
|     $result = $context->result; | ||||
|     if (!$result->valid) { | ||||
|       $result->throw($params["throw"] ?? $context->throw); | ||||
|     } | ||||
|   protected function getConsolidatedResult(): Result { | ||||
|     return $this->context->result; | ||||
|   } | ||||
| 
 | ||||
|   function normalize(?array $params=null): bool { | ||||
| @ -101,7 +93,11 @@ abstract class Wrapper implements ArrayAccess, IteratorAggregate { | ||||
|       $modified = false; | ||||
|     } | ||||
| 
 | ||||
|     $this->checkResult(); | ||||
|     $result = $this->getConsolidatedResult(); | ||||
|     if (!$result->valid) { | ||||
|       $result->throw($params["throw"] ?? $context->throw); | ||||
|     } | ||||
| 
 | ||||
|     return $modified; | ||||
|   } | ||||
| 
 | ||||
| @ -114,6 +110,12 @@ abstract class Wrapper implements ArrayAccess, IteratorAggregate { | ||||
|   /** | ||||
|    * sélectionner le wrapper associé à la clé spécifiée | ||||
|    * | ||||
|    * $key peut valoir: | ||||
|    * - false pour la clé courante (ne pas changer la sélection) | ||||
|    * - null ou "" le wrapper de la valeur principale | ||||
|    * - ou toute autre valeur présente dans {@link getKeys()} pour les valeurs | ||||
|    * accessible via cet objet | ||||
|    * | ||||
|    * @param string|int|null $key | ||||
|    * @return Wrapper $this | ||||
|    */ | ||||
| @ -123,7 +125,7 @@ abstract class Wrapper implements ArrayAccess, IteratorAggregate { | ||||
|     foreach ($this->getKeys() as $key) { | ||||
|       yield $key => $this->select($key); | ||||
|     } | ||||
|     $this->select(null); | ||||
|     $this->select(); | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
| @ -131,9 +133,18 @@ abstract class Wrapper implements ArrayAccess, IteratorAggregate { | ||||
|    * | ||||
|    * cette fonction doit être appelée après {@link set()} ou {@link unset()} et | ||||
|    * après que le wrapper aie été sélectionné avec {@link select()} | ||||
|    * | ||||
|    * $key peut valoir: | ||||
|    * - false pour la clé sélectionnée avec {@link select()} | ||||
|    * - null pour le résultat consolidé | ||||
|    * - "" pour le résultat de l'analyse de la valeur principale | ||||
|    * - ou toute autre valeur présente dans {@link getKeys()} pour le résultat | ||||
|    * de l'analyse des valeurs correspondantes | ||||
|    */ | ||||
|   function getResult($key=false): Result { | ||||
|     return $this->context->result; | ||||
|     if ($key === false || $key === "") return $this->context->result; | ||||
|     if ($key === null) return $this->getConsolidatedResult(); | ||||
|     throw ValueException::invalid_key($key); | ||||
|   } | ||||
| 
 | ||||
|   /** retourner true si la valeur existe */ | ||||
|  | ||||
| @ -3,14 +3,14 @@ namespace nulib\schema\_assoc; | ||||
| 
 | ||||
| use nulib\cl; | ||||
| use nulib\ref\schema\ref_analyze; | ||||
| use nulib\ValueException; | ||||
| use nulib\schema\_scalar\ScalarResult; | ||||
| use nulib\schema\_scalar\ScalarWrapper; | ||||
| use nulib\schema\ConsolidatedResult; | ||||
| use nulib\schema\input\Input; | ||||
| use nulib\schema\Result; | ||||
| use nulib\schema\types\IType; | ||||
| use nulib\schema\Wrapper; | ||||
| use nulib\schema\WrapperContext; | ||||
| use nulib\ValueException; | ||||
| 
 | ||||
| class AssocWrapper extends Wrapper { | ||||
|   function __construct(AssocSchema $schema, &$value=null, $valueKey=null, ?array $params=null) { | ||||
| @ -31,7 +31,7 @@ class AssocWrapper extends Wrapper { | ||||
|     $arrayDummy = null; | ||||
|     $context->arrayWrapper = new ScalarWrapper($schema, $arrayDummy, null, $paramsNoThrow, $context); | ||||
| 
 | ||||
|     $context->assocResult = new ScalarResult();#XX AssocResult
 | ||||
|     $context->consolidatedResult = new ConsolidatedResult(); | ||||
| 
 | ||||
|     if ($value !== null) { | ||||
|       # n'initialiser que si $value n'est pas null
 | ||||
| @ -101,10 +101,9 @@ class AssocWrapper extends Wrapper { | ||||
|     } | ||||
| 
 | ||||
|     $what = ScalarWrapper::_analyze($context, $wrapper, $params); | ||||
|     /** @var ScalarResult $result */ | ||||
|     if (!$context->result->valid) return $what; | ||||
| 
 | ||||
|     $result = $context->assocResult; | ||||
|     $result = $context->consolidatedResult; | ||||
|     $result->setValid(); | ||||
|     foreach ($context->keyWrappers as $keyWrapper) { | ||||
|       $keyWrapper->analyze($params); | ||||
| @ -159,17 +158,12 @@ class AssocWrapper extends Wrapper { | ||||
|     return $modified; | ||||
|   } | ||||
| 
 | ||||
|   protected function checkResult(): void { | ||||
|     $context = $this->context; | ||||
|     /** @var ScalarResult $result */ | ||||
|     $result = $context->assocResult; | ||||
|     if (!$result->valid) { | ||||
|       $result->throw($params["throw"] ?? $context->throw); | ||||
|     } | ||||
|   protected function getConsolidatedResult(): Result { | ||||
|     return $this->context->consolidatedResult; | ||||
|   } | ||||
| 
 | ||||
|   function getResult($key=false): Result { | ||||
|     if ($key === null) return $this->context->assocResult; | ||||
|     if ($key === null) return $this->getConsolidatedResult(); | ||||
|     if ($key === false) $key = $this->context->selectedKey; | ||||
|     return $this->_getWrapper($key)->getResult(); | ||||
|   } | ||||
|  | ||||
| @ -2,9 +2,8 @@ | ||||
| namespace nulib\schema\_assoc; | ||||
| 
 | ||||
| use nulib\ref\schema\ref_schema; | ||||
| use nulib\schema\_scalar\ScalarResult; | ||||
| use nulib\schema\_scalar\ScalarWrapper; | ||||
| use nulib\schema\Result; | ||||
| use nulib\schema\ConsolidatedResult; | ||||
| use nulib\schema\Wrapper; | ||||
| use nulib\schema\WrapperContext; | ||||
| 
 | ||||
| @ -31,12 +30,9 @@ class AssocWrapperContext extends WrapperContext { | ||||
|   /** @var Wrapper[] */ | ||||
|   public array $keyWrappers; | ||||
| 
 | ||||
|   /** | ||||
|    * @var ScalarResult résultat consolidé de l'analyse du tableau et de ses | ||||
|    * composants | ||||
|    */ | ||||
|   public ScalarResult $assocResult; | ||||
| 
 | ||||
|   /** @var string|int|null clé sélectionnée */ | ||||
|   public $selectedKey = null; | ||||
| 
 | ||||
|   /** résultat consolidé de l'analyse du tableau et de ses composants */ | ||||
|   public ConsolidatedResult $consolidatedResult; | ||||
| } | ||||
|  | ||||
| @ -1,51 +0,0 @@ | ||||
| <?php | ||||
| namespace nulib\schema\_list; | ||||
| 
 | ||||
| use nulib\ValueException; | ||||
| use nulib\schema\Result; | ||||
| 
 | ||||
| class ListResult extends Result { | ||||
|   function __construct(Result $arrayResult, array &$keyResults) { | ||||
|     $this->arrayResult = $arrayResult; | ||||
|     $this->keyResults =& $keyResults; | ||||
|     $this->result =& $this->arrayResult; | ||||
|       parent::__construct(); | ||||
|   } | ||||
| 
 | ||||
|   protected Result $arrayResult; | ||||
| 
 | ||||
|   /** @var Result[] */ | ||||
|   protected array $keyResults; | ||||
| 
 | ||||
|   function getKeys(): array { | ||||
|     return array_keys($this->keyResults); | ||||
|   } | ||||
| 
 | ||||
|   protected Result $result; | ||||
| 
 | ||||
|   function select($key): Result { | ||||
|     if ($key === null) { | ||||
|       $this->result =& $this->arrayResult; | ||||
|     } elseif (array_key_exists($key, $this->keyResults)) { | ||||
|       $this->result =& $this->keyResults[$key]; | ||||
|     } else { | ||||
|       throw ValueException::invalid_key($key); | ||||
|     } | ||||
|     return $this; | ||||
|   } | ||||
| 
 | ||||
|   function reset(): void { | ||||
|     $this->arrayResult->reset(); | ||||
|     foreach ($this->keyResults as $result) { | ||||
|       $result->reset(); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   function __get(string $name) { | ||||
|     return $this->result[$name]; | ||||
|   } | ||||
| 
 | ||||
|   function __set(string $name, $value): void { | ||||
|     $this->result[$name] = $value; | ||||
|   } | ||||
| } | ||||
| @ -1,239 +0,0 @@ | ||||
| <?php | ||||
| namespace nulib\schema\_scalar; | ||||
| 
 | ||||
| use nulib\cl; | ||||
| use nulib\ref\schema\ref_analyze; | ||||
| use nulib\ref\schema\ref_schema; | ||||
| use nulib\ValueException; | ||||
| use nulib\schema\Result; | ||||
| use nulib\schema\Schema; | ||||
| use nulib\schema\Wrapper; | ||||
| use Throwable; | ||||
| 
 | ||||
| /** | ||||
|  * Class ScalarResult: résultat de l'analyse ou de la normalisation d'une valeur | ||||
|  */ | ||||
| class ScalarResult extends Result { | ||||
|   function getKeys(): array { | ||||
|     return ScalarSchema::KEYS; | ||||
|   } | ||||
| 
 | ||||
|   function select($key): Result { | ||||
|     if ($key !== null) throw ValueException::invalid_key($key); | ||||
|     return $this; | ||||
|   } | ||||
| 
 | ||||
|   protected array $result; | ||||
|    | ||||
|   function reset(): void { | ||||
|     $this->result = array_merge( | ||||
|       array_fill_keys(static::KEYS, null), [ | ||||
|       "resultAvailable" => false, | ||||
|       "present" => false, | ||||
|       "available" => false, | ||||
|       "null" => false, | ||||
|       "valid" => false, | ||||
|       "normalized" => false, | ||||
|     ]); | ||||
|   } | ||||
| 
 | ||||
|   function __get(string $name) { | ||||
|     return $this->result[$name]; | ||||
|   } | ||||
| 
 | ||||
|   function __set(string $name, $value): void { | ||||
|     $this->result[$name] = $value; | ||||
|   } | ||||
| 
 | ||||
|   protected function getMessage(string $key,  Schema $schema): string { | ||||
|     $message = cl::get($schema->messages, $key); | ||||
|     if ($message !== null) return $message; | ||||
|     return cl::get(ref_schema::MESSAGES, $key); | ||||
|   } | ||||
| 
 | ||||
|   function setMissing( Schema $schema): int { | ||||
|     $this->resultAvailable = true; | ||||
|     $this->present = false; | ||||
|     $this->available = false; | ||||
|     if (!$schema->required) { | ||||
|       $this->null = false; | ||||
|       $this->valid = true; | ||||
|       $this->normalized = true; | ||||
|       return ref_analyze::NORMALIZED; | ||||
|     } else { | ||||
|       $this->messageKey = $messageKey = "missing"; | ||||
|       $this->message = $this->getMessage($messageKey, $schema); | ||||
|       return ref_analyze::MISSING; | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   function addMissingMessage(Wrapper $wrapper): void { | ||||
|     $this->resultAvailable = true; | ||||
|     $this->present = false; | ||||
|     $this->available = false; | ||||
|     $this->null = false; | ||||
|     $this->valid = false; | ||||
|     $this->messageKey = "missing"; | ||||
|     $result = $wrapper->getResult(); | ||||
|     $resultException = $result->exception; | ||||
|     $resultMessage = $result->message; | ||||
|     if ($resultException !== null) { | ||||
|       $tmessage = ValueException::get_message($resultException); | ||||
|       if ($tmessage) { | ||||
|         if ($resultMessage !== null) $resultMessage .= ": "; | ||||
|         $resultMessage .= $tmessage; | ||||
|       } | ||||
|     } | ||||
|     $message = $this->message; | ||||
|     if ($message) $message .= "\n"; | ||||
|     $message .= $resultMessage; | ||||
|     $this->message = $message; | ||||
|   } | ||||
| 
 | ||||
|   function setUnavailable( Schema $schema): int { | ||||
|     $this->resultAvailable = true; | ||||
|     $this->present = true; | ||||
|     $this->available = false; | ||||
|     if (!$schema->required) { | ||||
|       $this->null = false; | ||||
|       $this->valid = true; | ||||
|       $this->normalized = true; | ||||
|       return ref_analyze::NORMALIZED; | ||||
|     } else { | ||||
|       $this->messageKey = $messageKey = "unavailable"; | ||||
|       $this->message = $this->getMessage($messageKey, $schema); | ||||
|       return ref_analyze::UNAVAILABLE; | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   function addUnavailableMessage(Wrapper $wrapper): void { | ||||
|     $this->resultAvailable = true; | ||||
|     $this->present = true; | ||||
|     $this->available = false; | ||||
|     $this->null = false; | ||||
|     $this->valid = false; | ||||
|     $this->messageKey = "unavailable"; | ||||
|     $result = $wrapper->getResult(); | ||||
|     $resultException = $result->exception; | ||||
|     $resultMessage = $result->message; | ||||
|     if ($resultException !== null) { | ||||
|       $tmessage = ValueException::get_message($resultException); | ||||
|       if ($tmessage) { | ||||
|         if ($resultMessage !== null) $resultMessage .= ": "; | ||||
|         $resultMessage .= $tmessage; | ||||
|       } | ||||
|     } | ||||
|     $message = $this->message; | ||||
|     if ($message) $message .= "\n"; | ||||
|     $message .= $resultMessage; | ||||
|     $this->message = $message; | ||||
|   } | ||||
| 
 | ||||
|   function setNull( Schema $schema): int { | ||||
|     $this->resultAvailable = true; | ||||
|     $this->present = true; | ||||
|     $this->available = true; | ||||
|     $this->null = true; | ||||
|     if ($schema->nullable) { | ||||
|       $this->valid = true; | ||||
|       $this->normalized = true; | ||||
|       return ref_analyze::NORMALIZED; | ||||
|     } else { | ||||
|       $this->messageKey = $messageKey = "null"; | ||||
|       $this->message = $this->getMessage($messageKey, $schema); | ||||
|       return ref_analyze::NULL; | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   function addNullMessage(Wrapper $wrapper): void { | ||||
|     $this->resultAvailable = true; | ||||
|     $this->present = true; | ||||
|     $this->available = true; | ||||
|     $this->null = true; | ||||
|     $this->valid = false; | ||||
|     $this->messageKey = "null"; | ||||
|     $result = $wrapper->getResult(); | ||||
|     $resultException = $result->exception; | ||||
|     $resultMessage = $result->message; | ||||
|     if ($resultException !== null) { | ||||
|       $tmessage = ValueException::get_message($resultException); | ||||
|       if ($tmessage) { | ||||
|         if ($resultMessage !== null) $resultMessage .= ": "; | ||||
|         $resultMessage .= $tmessage; | ||||
|       } | ||||
|     } | ||||
|     $message = $this->message; | ||||
|     if ($message) $message .= "\n"; | ||||
|     $message .= $resultMessage; | ||||
|     $this->message = $message; | ||||
|   } | ||||
| 
 | ||||
|   function setInvalid($value,  Schema $schema, ?Throwable $exception=null): int { | ||||
|     $this->resultAvailable = true; | ||||
|     $this->present = true; | ||||
|     $this->available = true; | ||||
|     $this->null = false; | ||||
|     $this->valid = false; | ||||
|     $this->origValue = $value; | ||||
|     $this->messageKey = $messageKey = "invalid"; | ||||
|     $message = $this->getMessage($messageKey, $schema); | ||||
|     if ($exception !== null) { | ||||
|       $tmessage = ValueException::get_message($exception); | ||||
|       if ($tmessage) $message = $tmessage; | ||||
|     } | ||||
|     $this->message = $message; | ||||
|     $this->exception = $exception; | ||||
|     return ref_analyze::INVALID; | ||||
|   } | ||||
| 
 | ||||
|   function addInvalidMessage(Wrapper $wrapper): void { | ||||
|     $this->resultAvailable = true; | ||||
|     $this->present = true; | ||||
|     $this->available = true; | ||||
|     $this->null = false; | ||||
|     $this->valid = false; | ||||
|     $this->messageKey = "invalid"; | ||||
|     $result = $wrapper->getResult(); | ||||
|     $resultException = $result->exception; | ||||
|     $resultMessage = $result->message; | ||||
|     if ($resultException !== null) { | ||||
|       $tmessage = ValueException::get_message($resultException); | ||||
|       if ($tmessage) { | ||||
|         if ($resultMessage !== null) $resultMessage .= ": "; | ||||
|         $resultMessage .= $tmessage; | ||||
|       } | ||||
|     } | ||||
|     $message = $this->message; | ||||
|     if ($message) $message .= "\n"; | ||||
|     $message .= $resultMessage; | ||||
|     $this->message = $message; | ||||
|   } | ||||
| 
 | ||||
|   function setValid($normalizedValue=null): int { | ||||
|     $this->resultAvailable = true; | ||||
|     $this->present = true; | ||||
|     $this->available = true; | ||||
|     $this->null = false; | ||||
|     $this->valid = true; | ||||
|     $this->normalizedValue = $normalizedValue; | ||||
|     return ref_analyze::VALID; | ||||
|   } | ||||
| 
 | ||||
|   function setNormalized(): int { | ||||
|     $this->resultAvailable = true; | ||||
|     $this->present = true; | ||||
|     $this->available = true; | ||||
|     $this->null = false; | ||||
|     $this->valid = true; | ||||
|     $this->normalized = true; | ||||
|     return ref_analyze::NORMALIZED; | ||||
|   } | ||||
| 
 | ||||
|   function throw(bool $throw): void { | ||||
|     if ($throw) { | ||||
|       $exception = $this->exception; | ||||
|       if ($exception !== null) throw $exception; | ||||
|       else throw new ValueException($this->message); | ||||
|     } | ||||
|   } | ||||
| } | ||||
| @ -64,14 +64,14 @@ class ScalarSchema extends Schema { | ||||
|     $this->definition = $definition; | ||||
|   } | ||||
| 
 | ||||
|   const KEYS = [null]; | ||||
|   const KEYS = []; | ||||
| 
 | ||||
|   function getKeys(): array { | ||||
|     return self::KEYS; | ||||
|   } | ||||
| 
 | ||||
|   function getSchema($key=false): Schema { | ||||
|     if ($key === null || $key === false) return $this; | ||||
|     if ($key === false || $key === null || $key === "") return $this; | ||||
|     throw ValueException::invalid_key($key); | ||||
|   } | ||||
| 
 | ||||
|  | ||||
| @ -3,25 +3,25 @@ namespace nulib\schema\_scalar; | ||||
| 
 | ||||
| use nulib\php\func; | ||||
| use nulib\ref\schema\ref_analyze; | ||||
| use nulib\ValueException; | ||||
| use nulib\schema\Result; | ||||
| use nulib\schema\Schema; | ||||
| use nulib\schema\types; | ||||
| use nulib\schema\types\IType; | ||||
| use nulib\schema\Wrapper; | ||||
| use nulib\schema\WrapperContext; | ||||
| use nulib\ValueException; | ||||
| 
 | ||||
| /** | ||||
|  * Class ScalarWrapper | ||||
|  * | ||||
|  * @method ScalarWrapper reset(&$value, $valueKey=null, ?array $params=null) | ||||
|  * @method ScalarResult getResult($key=false) | ||||
|  * @method self set($value, ?array $params=null, $key=false) | ||||
|  * @method self unset(?array $params=null, $key=false) | ||||
|  */ | ||||
| class ScalarWrapper extends Wrapper { | ||||
|   function __construct(Schema $schema, &$value=null, $valueKey=null, ?array $params=null, ?WrapperContext $context=null) { | ||||
|     if ($context === null) $context = new WrapperContext($schema, null, null, $params); | ||||
|     $context->result = new ScalarResult(); | ||||
|     $context->result = new Result(); | ||||
|     $this->context = $context; | ||||
| 
 | ||||
|     if ($value !== null) { | ||||
| @ -51,7 +51,6 @@ class ScalarWrapper extends Wrapper { | ||||
|     $schema = $context->schema; | ||||
|     $input = $context->input; | ||||
|     $valueKey = $context->valueKey; | ||||
|     /** @var ScalarResult $result */ | ||||
|     $result = $context->result; | ||||
| 
 | ||||
|     $default = $schema->default; | ||||
| @ -155,7 +154,6 @@ class ScalarWrapper extends Wrapper { | ||||
|     $schema = $context->schema; | ||||
|     $input = $context->input; | ||||
|     $valueKey = $context->valueKey; | ||||
|     /** @var ScalarResult $result */ | ||||
|     $result = $context->result; | ||||
| 
 | ||||
|     /** @var func $analyzerFunc */ | ||||
| @ -204,7 +202,6 @@ class ScalarWrapper extends Wrapper { | ||||
|     $schema = $context->schema; | ||||
|     $input = $context->input; | ||||
|     $valueKey = $context->valueKey; | ||||
|     /** @var ScalarResult $result */ | ||||
|     $result = $context->result; | ||||
| 
 | ||||
|     $normalize = false; | ||||
|  | ||||
| @ -3,7 +3,6 @@ namespace nulib\schema\types; | ||||
| 
 | ||||
| use nulib\cl; | ||||
| use nulib\ValueException; | ||||
| use nulib\schema\_scalar\ScalarResult; | ||||
| use nulib\schema\_scalar\ScalarSchema; | ||||
| use nulib\schema\Result; | ||||
| use nulib\schema\Schema; | ||||
| @ -50,7 +49,6 @@ class tarray extends _tstring { | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * @var ScalarResult $result | ||||
|    * @var ScalarSchema $schema | ||||
|    */ | ||||
|   function normalize(&$value, Result $result, Schema $schema): bool { | ||||
|  | ||||
| @ -4,7 +4,6 @@ namespace nulib\schema\types; | ||||
| use nulib\cl; | ||||
| use nulib\ValueException; | ||||
| use nur\prop; | ||||
| use nulib\schema\_scalar\ScalarResult; | ||||
| use nulib\schema\_scalar\ScalarSchema; | ||||
| use nulib\schema\input\Input; | ||||
| use nulib\schema\Result; | ||||
| @ -99,7 +98,6 @@ class tbool extends _tformatable { | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * @var ScalarResult $result | ||||
|    * @var ScalarSchema $schema | ||||
|    */ | ||||
|   function normalize(&$value, Result $result, Schema $schema): bool { | ||||
|  | ||||
| @ -2,7 +2,6 @@ | ||||
| namespace nulib\schema\types; | ||||
| 
 | ||||
| use nulib\php\content\c; | ||||
| use nulib\schema\_scalar\ScalarResult; | ||||
| use nulib\schema\_scalar\ScalarSchema; | ||||
| use nulib\schema\Result; | ||||
| use nulib\schema\Schema; | ||||
| @ -37,7 +36,6 @@ abstract class tcontent extends _tunion { | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * @var ScalarResult $result | ||||
|    * @var ScalarSchema $schema | ||||
|    */ | ||||
|   function normalize(&$value, Result $result, Schema $schema): bool { | ||||
|  | ||||
| @ -2,7 +2,6 @@ | ||||
| namespace nulib\schema\types; | ||||
| 
 | ||||
| use nulib\ValueException; | ||||
| use nulib\schema\_scalar\ScalarResult; | ||||
| use nulib\schema\_scalar\ScalarSchema; | ||||
| use nulib\schema\Result; | ||||
| use nulib\schema\Schema; | ||||
| @ -44,7 +43,6 @@ class tfloat extends _tformatable { | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * @var ScalarResult $result | ||||
|    * @var ScalarSchema $schema | ||||
|    */ | ||||
|   function normalize(&$value, Result $result, Schema $schema): bool { | ||||
|  | ||||
| @ -4,7 +4,6 @@ namespace nulib\schema\types; | ||||
| use Exception; | ||||
| use nulib\php\func; | ||||
| use nulib\ValueException; | ||||
| use nulib\schema\_scalar\ScalarResult; | ||||
| use nulib\schema\_scalar\ScalarSchema; | ||||
| use nulib\schema\Result; | ||||
| use nulib\schema\Schema; | ||||
| @ -44,7 +43,6 @@ class tfunc extends _tsimple { | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * @var ScalarResult $result | ||||
|    * @var ScalarSchema $schema | ||||
|    */ | ||||
|   function normalize(&$value, Result $result, Schema $schema): bool { | ||||
|  | ||||
| @ -2,7 +2,6 @@ | ||||
| namespace nulib\schema\types; | ||||
| 
 | ||||
| use nulib\ValueException; | ||||
| use nulib\schema\_scalar\ScalarResult; | ||||
| use nulib\schema\_scalar\ScalarSchema; | ||||
| use nulib\schema\input\Input; | ||||
| use nulib\schema\Result; | ||||
| @ -38,7 +37,6 @@ class tgeneric extends _tsimple { | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * @var ScalarResult $result | ||||
|    * @var ScalarSchema $schema | ||||
|    */ | ||||
|   function normalize(&$value, Result $result, Schema $schema): bool { | ||||
|  | ||||
| @ -2,7 +2,6 @@ | ||||
| namespace nulib\schema\types; | ||||
| 
 | ||||
| use nulib\ValueException; | ||||
| use nulib\schema\_scalar\ScalarResult; | ||||
| use nulib\schema\_scalar\ScalarSchema; | ||||
| use nulib\schema\Result; | ||||
| use nulib\schema\Schema; | ||||
| @ -46,7 +45,6 @@ class tint extends _tformatable { | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * @var ScalarResult $result | ||||
|    * @var ScalarSchema $schema | ||||
|    */ | ||||
|   function normalize(&$value, Result $result, Schema $schema): bool { | ||||
|  | ||||
| @ -1,7 +1,6 @@ | ||||
| <?php | ||||
| namespace nulib\schema\types; | ||||
| 
 | ||||
| use nulib\schema\_scalar\ScalarResult; | ||||
| use nulib\schema\_scalar\ScalarSchema; | ||||
| use nulib\schema\Result; | ||||
| use nulib\schema\Schema; | ||||
| @ -37,7 +36,6 @@ class tkey extends _tunion { | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * @var ScalarResult $result | ||||
|    * @var ScalarSchema $schema | ||||
|    */ | ||||
|   function normalize(&$value, Result $result, Schema $schema): bool { | ||||
|  | ||||
| @ -1,7 +1,6 @@ | ||||
| <?php | ||||
| namespace nulib\schema\types; | ||||
| 
 | ||||
| use nulib\schema\_scalar\ScalarResult; | ||||
| use nulib\schema\_scalar\ScalarSchema; | ||||
| use nulib\schema\input\Input; | ||||
| use nulib\schema\Result; | ||||
| @ -41,7 +40,6 @@ class tmixed extends _tsimple { | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * @var ScalarResult $result | ||||
|    * @var ScalarSchema $schema | ||||
|    */ | ||||
|   function normalize(&$value, Result $result, Schema $schema): bool { | ||||
|  | ||||
| @ -1,7 +1,6 @@ | ||||
| <?php | ||||
| namespace nulib\schema\types; | ||||
| 
 | ||||
| use nulib\schema\_scalar\ScalarResult; | ||||
| use nulib\schema\_scalar\ScalarSchema; | ||||
| use nulib\schema\Result; | ||||
| use nulib\schema\Schema; | ||||
| @ -42,7 +41,6 @@ class tpkey extends _tunion { | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * @var ScalarResult $result | ||||
|    * @var ScalarSchema $schema | ||||
|    */ | ||||
|   function normalize(&$value, Result $result, Schema $schema): bool { | ||||
|  | ||||
| @ -2,7 +2,6 @@ | ||||
| namespace nulib\schema\types; | ||||
| 
 | ||||
| use nulib\str; | ||||
| use nulib\schema\_scalar\ScalarResult; | ||||
| use nulib\schema\_scalar\ScalarSchema; | ||||
| use nulib\schema\Result; | ||||
| use nulib\schema\Schema; | ||||
| @ -45,7 +44,6 @@ class trawstring extends _tstring { | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * @var ScalarResult $result | ||||
|    * @var ScalarSchema $schema | ||||
|    */ | ||||
|   function normalize(&$value, Result $result, Schema $schema): bool { | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user