# Zend_Ldap_Dn

`Zend_Ldap_Dn` bietet ein objektorientiertes Interface für die Manipulation von LDAP Distinguished Names (DN). Der Parameter `$caseFold` wird in verschiedenen Methoden verwendet um festzustellen wie DN Attribute betreffend Ihres Schreibweise behandelt werden. Die erlaubten Werte für diesen Parameter sind:

`Zend_Ldap_Dn::ATTR_CASEFOLD_NONE`

  Es wird keine Änderung der Schreibweise durchgeführt.

`Zend_Ldap_Dn::ATTR_CASEFOLD_UPPER`

  Alle Attribute werden zur Großschreibung konvertiert.

`Zend_Ldap_Dn::ATTR_CASEFOLD_LOWER`

  Alle Attribute werden zur Kleinschreibung konvertiert.

Die Standardmäßige Schreibweise ist `Zend_Ldap_Dn::ATTR_CASEFOLD_NONE` und kann mit `Zend_Ldap_Dn::setDefaultCaseFold()` gesetzt werden. Jede Instanz von `Zend_Ldap_Dn` kann Ihre eigenen Einstellungen für die Schreibweise haben. Wenn der Parameter `$caseFold` beim Methodenaufruf nicht angegeben wird dann ist er standardmäßig die Einstellung der Schreibweise von der Instanz.

Die Klasse implementiert `ArrayAccess` um den indizierten Zugriff auf die unterschiedlichen Teile der DN zu gestatten. Die `ArrayAccess` Methoden verweisen für `offsetGet(integer $offset)` auf `Zend_Ldap_Dn::get($offset, 1, null)`, für `offsetSet()` auf `Zend_Ldap_Dn::set($offset, $value)` und für `offsetUnset()` auf `Zend_Ldap_Dn::remove($offset, 1)`. `offsetExists()` prüft einfach ob der Index innerhalb der Grenzen ist.

## Zend_Ldap_Dn API

Methode | Beschreibung
--- | ---
`Zend_Ldap_Dn factory(string|array $dn, string|null $caseFold)` | Erstellt eine `Zend_Ldap_Dn` Instanz von einem Array oder String. Das Array muß der unter `Zend_Ldap_Dn::implodeDn()` beschriebenen Arraystruktur entsprechen.
`Zend_Ldap_Dn fromString(string $dn, string|null $caseFold)` | Erstellt eine `Zend_Ldap_Dn` Instanz von einem String.
`Zend_Ldap_Dn fromArray(array $dn, string|null $caseFold)` | Erstellt eine `Zend_Ldap_Dn` Instanz von einem Array. Das Array muß der Arraystruktur entsprechen welche unter `Zend_Ldap_Dn::implodeDn()` beschrieben ist.
`array getRdn(string|null $caseFold)` | Gibt den RDN des aktuellen DN zurück. Der zurückgegebene Wert ist ein Array wobei die Namen der Attribute von RDN im Schlüssel gesetzt sind und die RDN Attribute als Wert.
`string getRdnString(string|null $caseFold)` | Gibt den RDN vom aktuellen DN zurück. Der zurückgegebene Wert ist ein String.
`Zend_Ldap_Dn getParentDn(integer $levelUp)` | Gibt den DN des aktuellen DN Knotens, `$levelUp` Levels höher, zurück. `$levelUp` ist standardmäßig `1`.
`array get(integer $index, integer $length, string|null $caseFold)` | Gibt einen Teil des aktuellen DN zurück der von `$index` und `$length` eingegrenzt wird. `$index` beginnt mit `0` und der DN Teil von links.
`Zend_Ldap_Dn set(integer $index, array $value)` | Ersetzt den DN Teil im aktuellen DN. Diese Operation manipuliert die aktuelle Instanz.
`Zend_Ldap_Dn remove(integer $index, integer $length)` | Entfernt einen DN Teil vom aktuellen DN. Diese Operation manipuliert die aktuelle Instanz. `$length` ist standardmäßig `1`.
`Zend_Ldap_Dn append(array $value)` | Fügt einen DN Teil zum aktuellen DN hinzu, Diese Operation manipuliert die aktuelle Instanz.
`Zend_Ldap_Dn prepend(array $value)` | Fügt einen DN Teil vor dem aktuellen DN hinzu. Diese Operation manipuliert die aktuelle Instanz.
`Zend_Ldap_Dn insert(integer $index, array $value)` | Fügt einen DN Teil nach dem Index `$index` in den aktuellen DN ein. Diese Operation manipuliert die aktuelle Instanz.
`void setCaseFold(string|null $caseFold)` | Setzt die Option für die Schreibweise auf der aktuellen DN Instanz. Wenn `$caseFold` `NULL` ist dann wird die standardmäßige Einstellung der Schreibweise (standardmäßig ist `Zend_Ldap_Dn::ATTR_CASEFOLD_NONE` oder über `Zend_Ldap_Dn::setDefaultCaseFold()` gesetzt) für die aktuelle Instanz gesetzt.
`string toString(string|null $caseFold)` | Gibt den DN als String zurück.
`array toArray(string|null $caseFold)` | Gibt den DN als Array zurück.
`string __toString()` | Gibt den DN als String zurück - verweist auf `Zend_Ldap_Dn::toString(null)`.
`void setDefaultCaseFold(string $caseFold)` | Setzt die standardmäßige Option für die Schreibweise welche von allen Instanzen bei der Erstellung standardmäßig verwendet wird. Bereits existierende Instanzen sind von dieser Einstellung nicht betroffen.
`array escapeValue(string|array $values)` | Escapt einen DN Wert entsprechend RFC 2253.
`array unescapeValue(string|array $values)` | Macht die Konvertierung von `Zend_Ldap_Dn::escapeValue()` rückgängig.

`array explodeDn(string $dn, array &$keys, array &$vals, string|null $caseFold)`

Zerteilt den DN `$dn` in ein Array das alle Teile des angegebenen DN enthält. `$keys` sind optional die DN Schlüssel (z.B. CN, OU, DC, ...). `$vals` sind optional die DN Werte. Das zurückgegebene Array ist vom Typ

    array(
    array("cn" => "name1", "uid" => "user"),
    array("cn" => "name2"),
    array("dc" => "example"),
    array("dc" => "org")
    )

für einen DN von `cn=name1+uid=user,cn=name2,dc=example,dc=org`.

`boolean checkDn(string $dn, array &$keys, array &$vals, string|null $caseFold)` | Prüft ob der gegebene DN `$dn` fehlerhaft ist. Wenn `$keys` oder `$keys` und `$vals` angegeben sind, werden diese Arrays mit dem betreffenden DN Schlüssel und Werten gefüllt.
`string implodeRdn(array $part, string|null $caseFold)` | Gibt den DN Teil in der Form `$attribute=$value` zurück.

`string implodeDn(array $dnArray, string|null $caseFold, string $separator)`

Implodiert ein Array der Form die von `Zend_Ldap_Dn::explodeDn()` kommt in einen DN String. `$separator` ist standardmäßig `','` aber einige LDAP Server verstehen auch `';'`. `$dnArray` muß von folgendem Typ sein:

    array(
    array("cn" => "name1", "uid" => "user"),
    array("cn" => "name2"),
    array("dc" => "example"),
    array("dc" => "org")
    )

`boolean isChildOf(string|Zend_Ldap_Dn $childDn, string|Zend_Ldap_Dn $parentDn)` | Prüft ob der angegebene `$childDn` unter dem `$parentDn` Subbaum ist.