modifs.mineures sans commentaires
This commit is contained in:
		
							parent
							
								
									4353f482a4
								
							
						
					
					
						commit
						e592e8b9c4
					
				| @ -19,7 +19,7 @@ abstract class Wrapper implements ArrayAccess, IteratorAggregate { | |||||||
|     $this->context->resetParams($params); |     $this->context->resetParams($params); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   protected function resetContext($resetSelectedKey): void { |   protected function resetContext(bool $resetSelectedKey): void { | ||||||
|     $context = $this->context; |     $context = $this->context; | ||||||
|     $type = $context->schema->type; |     $type = $context->schema->type; | ||||||
|     if (is_array($type)) $type = $type[0]; |     if (is_array($type)) $type = $type[0]; | ||||||
| @ -28,19 +28,16 @@ abstract class Wrapper implements ArrayAccess, IteratorAggregate { | |||||||
|     $context->result->reset(); |     $context->result->reset(); | ||||||
|     $context->analyzed = false; |     $context->analyzed = false; | ||||||
|     $context->normalized = false; |     $context->normalized = false; | ||||||
|     if ($resetSelectedKey) $context->selectedKey = null; |  | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   protected function afterModify(?array $params, $resetSelectedKey=false): void { |   protected function afterModify(?array $params, bool $resetSelectedKey=false): void { | ||||||
|     $context = $this->context; |     $context = $this->context; | ||||||
|     $this->resetContext($resetSelectedKey); |     $this->resetContext($resetSelectedKey); | ||||||
|     if ($params["analyze"] ?? $context->analyze) { |     if ($params["analyze"] ?? $context->analyze) { | ||||||
|       $this->analyze($params); |       $this->analyze($params); | ||||||
|     } |     } | ||||||
|     if ($context->analyzed) { |     if ($context->analyzed && ($params["normalize"] ?? $context->normalize)) { | ||||||
|       if ($params["normalize"] ?? $context->normalize) { |       $this->normalize($params); | ||||||
|         $this->normalize($params); |  | ||||||
|       } |  | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
| @ -80,6 +77,15 @@ abstract class Wrapper implements ArrayAccess, IteratorAggregate { | |||||||
|   /** normaliser la valeur */ |   /** normaliser la valeur */ | ||||||
|   abstract static function _normalize(WrapperContext $context, Wrapper $wrapper, ?array $params): bool; |   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); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|   function normalize(?array $params=null): bool { |   function normalize(?array $params=null): bool { | ||||||
|     $context = $this->context; |     $context = $this->context; | ||||||
| 
 | 
 | ||||||
| @ -95,11 +101,7 @@ abstract class Wrapper implements ArrayAccess, IteratorAggregate { | |||||||
|       $modified = false; |       $modified = false; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     /** @var ScalarResult $result */ |     $this->checkResult(); | ||||||
|     $result = $context->result; |  | ||||||
|     if (!$result->valid) { |  | ||||||
|       $result->throw($params["throw"] ?? $context->throw); |  | ||||||
|     } |  | ||||||
|     return $modified; |     return $modified; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
| @ -115,7 +117,7 @@ abstract class Wrapper implements ArrayAccess, IteratorAggregate { | |||||||
|    * @param string|int|null $key |    * @param string|int|null $key | ||||||
|    * @return Wrapper $this |    * @return Wrapper $this | ||||||
|    */ |    */ | ||||||
|   abstract function select($key): Wrapper; |   abstract function select($key=null): Wrapper; | ||||||
| 
 | 
 | ||||||
|   function getIterator() { |   function getIterator() { | ||||||
|     foreach ($this->getKeys() as $key) { |     foreach ($this->getKeys() as $key) { | ||||||
|  | |||||||
| @ -37,8 +37,6 @@ class WrapperContext { | |||||||
|   /** @var mixed */ |   /** @var mixed */ | ||||||
|   public $value = null; |   public $value = null; | ||||||
| 
 | 
 | ||||||
|   /** @var string|int|null clé sélectionnée */ |  | ||||||
|   public $selectedKey = null; |  | ||||||
|   /** type de la valeur de la clé sélectionnée après analyse */ |   /** type de la valeur de la clé sélectionnée après analyse */ | ||||||
|   public ?IType $type = null; |   public ?IType $type = null; | ||||||
|   /** résultat de l'analyse de la valeur de la clé sélectionnée */ |   /** résultat de l'analyse de la valeur de la clé sélectionnée */ | ||||||
|  | |||||||
| @ -14,23 +14,25 @@ use nulib\schema\WrapperContext; | |||||||
| 
 | 
 | ||||||
| class AssocWrapper extends Wrapper { | class AssocWrapper extends Wrapper { | ||||||
|   function __construct(AssocSchema $schema, &$value=null, $valueKey=null, ?array $params=null) { |   function __construct(AssocSchema $schema, &$value=null, $valueKey=null, ?array $params=null) { | ||||||
|     $keys = $schema->getKeys(); |     $this->context = $context = new AssocWrapperContext($schema, null, null, $params); | ||||||
|     $keyParams = cl::merge($params, [ |     $paramsNoThrow = cl::merge($params, [ | ||||||
|       "throw" => false, |       "throw" => false, | ||||||
|     ]); |     ]); | ||||||
|  | 
 | ||||||
|  |     $keys = $schema->getKeys(); | ||||||
|     $keyWrappers = []; |     $keyWrappers = []; | ||||||
|     foreach ($keys as $key) { |     foreach ($keys as $key) { | ||||||
|       $value = null; |       $keyDummy = null; | ||||||
|       $keyWrappers[$key] = $schema->getSchema($key)->getWrapper($value, null, $keyParams); |       $keyWrappers[$key] = $schema->getSchema($key)->getWrapper($keyDummy, null, $paramsNoThrow); | ||||||
|     } |     } | ||||||
|     $this->context = $context = new AssocWrapperContext($schema, null, null, $params); |  | ||||||
|     $arrayParams = cl::merge($params, [ |  | ||||||
|       "throw" => false, |  | ||||||
|     ]); |  | ||||||
|     $context->arrayWrapper = new ScalarWrapper($schema, $dummy, null, $arrayParams, $context); |  | ||||||
|     $context->keys = $keys; |     $context->keys = $keys; | ||||||
|     $context->keyWrappers = $keyWrappers; |     $context->keyWrappers = $keyWrappers; | ||||||
| 
 | 
 | ||||||
|  |     $arrayDummy = null; | ||||||
|  |     $context->arrayWrapper = new ScalarWrapper($schema, $arrayDummy, null, $paramsNoThrow, $context); | ||||||
|  | 
 | ||||||
|  |     $context->assocResult = new ScalarResult();#XX AssocResult
 | ||||||
|  | 
 | ||||||
|     if ($value !== null) { |     if ($value !== null) { | ||||||
|       # n'initialiser que si $value n'est pas null
 |       # n'initialiser que si $value n'est pas null
 | ||||||
|       $this->reset($value, $valueKey); |       $this->reset($value, $valueKey); | ||||||
| @ -40,13 +42,14 @@ class AssocWrapper extends Wrapper { | |||||||
|   /** @var AssocWrapperContext  */ |   /** @var AssocWrapperContext  */ | ||||||
|   protected WrapperContext $context; |   protected WrapperContext $context; | ||||||
| 
 | 
 | ||||||
|   protected function resetContext($resetSelectedKey): void { |   protected function resetContext(bool $resetSelectedKey): void { | ||||||
|     parent::resetContext($resetSelectedKey); |     parent::resetContext($resetSelectedKey); | ||||||
|     $context = $this->context; |     $context = $this->context; | ||||||
|     $context->arrayWrapper->getResult()->reset(); |     $context->arrayWrapper->getResult()->reset(); | ||||||
|     foreach ($context->keyWrappers as $wrapper) { |     foreach ($context->keyWrappers as $wrapper) { | ||||||
|       $wrapper->getResult()->reset(); |       $wrapper->getResult()->reset(); | ||||||
|     } |     } | ||||||
|  |     if ($resetSelectedKey) $context->selectedKey = null; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   function reset(&$value, $valueKey=null, ?array $params=null): Wrapper { |   function reset(&$value, $valueKey=null, ?array $params=null): Wrapper { | ||||||
| @ -69,7 +72,7 @@ class AssocWrapper extends Wrapper { | |||||||
| 
 | 
 | ||||||
|   protected function _getWrapper($key): Wrapper { |   protected function _getWrapper($key): Wrapper { | ||||||
|     $context = $this->context; |     $context = $this->context; | ||||||
|     if ($key === null) return $context->arrayWrapper; |     if ($key === null || $key === "") return $context->arrayWrapper; | ||||||
|     $wrapper = $context->keyWrappers[$key] ?? null; |     $wrapper = $context->keyWrappers[$key] ?? null; | ||||||
|     if ($wrapper === null) throw ValueException::invalid_key($key); |     if ($wrapper === null) throw ValueException::invalid_key($key); | ||||||
|     return $wrapper; |     return $wrapper; | ||||||
| @ -99,9 +102,10 @@ class AssocWrapper extends Wrapper { | |||||||
| 
 | 
 | ||||||
|     $what = ScalarWrapper::_analyze($context, $wrapper, $params); |     $what = ScalarWrapper::_analyze($context, $wrapper, $params); | ||||||
|     /** @var ScalarResult $result */ |     /** @var ScalarResult $result */ | ||||||
|     $result = $context->result; |     if (!$context->result->valid) return $what; | ||||||
|     if (!$result->valid) return $what; |  | ||||||
| 
 | 
 | ||||||
|  |     $result = $context->assocResult; | ||||||
|  |     $result->setValid(); | ||||||
|     foreach ($context->keyWrappers as $keyWrapper) { |     foreach ($context->keyWrappers as $keyWrapper) { | ||||||
|       $keyWrapper->analyze($params); |       $keyWrapper->analyze($params); | ||||||
|       if ($keyWrapper->isValid()) continue; |       if ($keyWrapper->isValid()) continue; | ||||||
| @ -155,7 +159,17 @@ class AssocWrapper extends Wrapper { | |||||||
|     return $modified; |     return $modified; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |   protected function checkResult(): void { | ||||||
|  |     $context = $this->context; | ||||||
|  |     /** @var ScalarResult $result */ | ||||||
|  |     $result = $context->assocResult; | ||||||
|  |     if (!$result->valid) { | ||||||
|  |       $result->throw($params["throw"] ?? $context->throw); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|   function getResult($key=false): Result { |   function getResult($key=false): Result { | ||||||
|  |     if ($key === null) return $this->context->assocResult; | ||||||
|     if ($key === false) $key = $this->context->selectedKey; |     if ($key === false) $key = $this->context->selectedKey; | ||||||
|     return $this->_getWrapper($key)->getResult(); |     return $this->_getWrapper($key)->getResult(); | ||||||
|   } |   } | ||||||
|  | |||||||
| @ -2,6 +2,7 @@ | |||||||
| namespace nulib\schema\_assoc; | namespace nulib\schema\_assoc; | ||||||
| 
 | 
 | ||||||
| use nulib\ref\schema\ref_schema; | use nulib\ref\schema\ref_schema; | ||||||
|  | use nulib\schema\_scalar\ScalarResult; | ||||||
| use nulib\schema\_scalar\ScalarWrapper; | use nulib\schema\_scalar\ScalarWrapper; | ||||||
| use nulib\schema\Wrapper; | use nulib\schema\Wrapper; | ||||||
| use nulib\schema\WrapperContext; | use nulib\schema\WrapperContext; | ||||||
| @ -28,4 +29,9 @@ class AssocWrapperContext extends WrapperContext { | |||||||
| 
 | 
 | ||||||
|   /** @var Wrapper[] */ |   /** @var Wrapper[] */ | ||||||
|   public array $keyWrappers; |   public array $keyWrappers; | ||||||
|  | 
 | ||||||
|  |   public ScalarResult $assocResult; | ||||||
|  | 
 | ||||||
|  |   /** @var string|int|null clé sélectionnée */ | ||||||
|  |   public $selectedKey = null; | ||||||
| } | } | ||||||
|  | |||||||
| @ -40,9 +40,9 @@ class ScalarWrapper extends Wrapper { | |||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   /** @param string|int|null $key */ |   /** @param string|int|null $key */ | ||||||
|   function select($key): ScalarWrapper { |   function select($key=null): ScalarWrapper { | ||||||
|     if ($key !== null) throw ValueException::invalid_key($key); |     if ($key === null || $key === "") return $this; | ||||||
|     return $this; |     throw ValueException::invalid_key($key); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   /** analyser la valeur et résoudre son type */ |   /** analyser la valeur et résoudre son type */ | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user