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);
|
||
|
}
|
||
|
}
|