$ldapKey) { if ($key === $index) { $index++; $key = $ldapKey; } $ldapKeys[$key] = $ldapKey; $keys[$ldapKey] = $key; } $optionalKeys = []; $index = 0; foreach (A::with(static::OPTIONAL_KEYS) as $key => $ldapKey) { if ($key === $index) { $index++; $key = $ldapKey; } $ldapKeys[$key] = $ldapKey; $keys[$ldapKey] = $key; $optionalKeys[] = $key; } $schemaKeys = A::keys(static::SCHEMA); foreach ($schemaKeys as $key) { if (!in_array($key, $keys)) { $ldapKeys[$key] = $key; $keys[$key] = $key; $optionalKeys[] = $key; } } $this->ldapKeys = $ldapKeys; $this->keys = $keys; $this->optionalKeys = $optionalKeys; ## $syntaxClasses = static::SYNTAXES; if ($syntaxClasses !== null) { $syntaxes = []; foreach ($schemaKeys as $key) { $class = A::get($syntaxClasses, $key); if ($class !== null) { $syntaxes[$key] = $conn->getSyntax($class); } } $this->syntaxes = $syntaxes; } ## return $this; } function has($key): bool { return $this->_has($key); } function &get($key, $default=null) { return $this->_get($key, $default); } function set($key, $value): self { return $this->_set($key, $value); } function add($value): self { return $this->_set(null, $value); } function del($key): self { return $this->_del($key); } /** obtenir la clé qui identifie cet objet */ function getKey(): string { return self::compute_keys($this->data); } /** initialiser cet objet avec une valeur LDAP */ function parseLdap(string $value): self { if (!preg_match_all('/\[.*?]/', $value, $ms)) { throw ValueException::invalid_value($value, "composite value"); } $this->data = []; foreach ($ms[0] as $nameValue) { if (preg_match('/\[(.*?)=(.*)]/', $nameValue, $ms)) { $ldapKey = names::ldap_unescape($ms[1]); $key = A::get($this->keys, $ldapKey, $ldapKey); $value = names::ldap_unescape($ms[2]); /** @var AbstractSyntax $syntax */ $syntax = A::get($this->syntaxes, $key); if ($syntax !== null) $value = $syntax->ldap2php($value); $this->data[$key] = $value; } } return $this; } /** retourner cette valeur au format LDAP */ function formatLdap(): string { $optionalKeys = $this->optionalKeys; $parts = []; foreach ($this->ldapKeys as $key => $ldapKey) { $value = A::get($this->data, $key); if ($value === null && in_array($key, $optionalKeys)) continue; /** @var AbstractSyntax $syntax */ $syntax = A::get($this->syntaxes, $key); if ($syntax !== null) $value = $syntax->php2ldap($value); $ldapKey = ldap_escape($ldapKey, 0, LDAP_ESCAPE_FILTER); $value = ldap_escape($value, 0, LDAP_ESCAPE_FILTER); $parts[] = "[$ldapKey=$value]"; } return implode("", $parts); } function reset(?array $values): CompositeValue { $md = Metadata::with(static::SCHEMA); $md->ensureSchema($values); $this->data = $values; return $this; } ############################################################################# static function _AUTOGEN_PROPERTIES(): array { return cvalues::autogen_properties(static::SCHEMA); } ## rajouter ceci dans les classes dérivées #const _AUTOGEN_PROPERTIES = [[self::class, "_AUTOGEN_PROPERTIES"]]; }