96 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| namespace nur\ldap\syntaxes;
 | |
| 
 | |
| use nur\A;
 | |
| use nur\b\ValueException;
 | |
| use nur\ldap\CompositeAttr;
 | |
| use nur\ldap\CompositeValue;
 | |
| 
 | |
| class CompositeSyntax extends AbstractSyntax {
 | |
|   /**
 | |
|    * @var string la classe dérivée de {@link CompositeAttr} qui porte l'attribut
 | |
|    */
 | |
|   const CACLASS = CompositeAttr::class;
 | |
| 
 | |
|   function getAttrClass(): string {
 | |
|     return static::CACLASS;
 | |
|   }
 | |
| 
 | |
|   function newAttr(string $name, ?array &$values, ?int $flags): CompositeAttr {
 | |
|     $attrClass = $this->getAttrClass();
 | |
|     return new $attrClass($name, $values, $this, $flags);
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * @var string la classe dérivée de {@link CompositeValue} qui porte les
 | |
|    * valeurs de cette syntaxe
 | |
|    */
 | |
|   const CVCLASS = CompositeValue::class;
 | |
| 
 | |
|   /** retourner la classe d'une valeur composite */
 | |
|   function getPhpType(): ?string {
 | |
|     return static::CVCLASS;
 | |
|   }
 | |
| 
 | |
|   protected function newCompositeValue(): CompositeValue {
 | |
|     $class = $this->getPhpType();
 | |
|     /** @var CompositeValue $cvalue */
 | |
|     $cvalue = new $class;
 | |
|     return $cvalue->setup($this->conn);
 | |
|   }
 | |
| 
 | |
|   function ensureArray($values): ?array {
 | |
|     A::ensure_narray($values);
 | |
|     if ($values === null) return null;
 | |
|     # déterminer si $values est *une* valeur ou une liste de valeurs
 | |
|     $list = false;
 | |
|     foreach ($values as $value) {
 | |
|       if (is_array($value) || $value instanceof CompositeValue) {
 | |
|         $list = true;
 | |
|         break;
 | |
|       }
 | |
|     }
 | |
|     if (!$list) $values = [$values];
 | |
|     return $values;
 | |
|   }
 | |
| 
 | |
|   function ensureComposite($value): ?CompositeValue {
 | |
|     if ($value === null) return null;
 | |
|     if (is_array($value)) {
 | |
|       $value = $this->newCompositeValue()->reset($value);
 | |
|     }
 | |
|     ValueException::check_class($value, $this->getPhpType());
 | |
|     return $value;
 | |
|   }
 | |
| 
 | |
|   /** @param ?CompositeValue $value */
 | |
|   function php2ldap($value): ?string {
 | |
|     $cvalue = $this->ensureComposite($value);
 | |
|     if ($cvalue === null) return null;
 | |
|     else return $cvalue->formatLdap();
 | |
|   }
 | |
| 
 | |
|   function ldap2php(string $value): CompositeValue {
 | |
|     return $this->newCompositeValue()->parseLdap($value);
 | |
|   }
 | |
| 
 | |
|   function fromMultivaluedLdap($values): ?array {
 | |
|     A::ensure_narray($values);
 | |
|     if ($values !== null) {
 | |
|       $tmp = [];
 | |
|       foreach ($values as $value) {
 | |
|         $value = $this->ldap2php($value);
 | |
|         $key = $value->getKey();
 | |
|         $tmp[$key] = $value;
 | |
|       }
 | |
|       $values = $tmp;
 | |
|     }
 | |
|     return A::filter_n($values)?: null;
 | |
|   }
 | |
| 
 | |
|   function fromPhp($values): ?array {
 | |
|     $values = $this->ensureArray($values);
 | |
|     return parent::fromPhp($values);
 | |
|   }
 | |
| }
 |