<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 24249 -->
<!-- Reviewed: no -->
<sect3 id="zend.ldap.api.reference.zend-ldap-dn">
    <title>Zend_Ldap_Dn</title>

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

    <variablelist>
        <varlistentry>
            <term><constant>Zend_Ldap_Dn::ATTR_CASEFOLD_NONE</constant></term>
            <listitem><para>Es wird keine Änderung der Schreibweise durchgeführt.</para></listitem>
        </varlistentry>

        <varlistentry>
            <term><constant>Zend_Ldap_Dn::ATTR_CASEFOLD_UPPER</constant></term>
            <listitem><para>Alle Attribute werden zur Großschreibung konvertiert.</para></listitem>
        </varlistentry>

        <varlistentry>
            <term><constant>Zend_Ldap_Dn::ATTR_CASEFOLD_LOWER</constant></term>
            <listitem><para>Alle Attribute werden zur Kleinschreibung konvertiert.</para></listitem>
        </varlistentry>
    </variablelist>

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

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

    <table id="zend.ldap.api.reference.zend-ldap-dn.table">
        <title>Zend_Ldap_Dn API</title>

        <tgroup cols="2">
            <thead>
                <row>
                    <entry>Methode</entry>
                    <entry>Beschreibung</entry>
                </row>
            </thead>

            <tbody>
                <row>
                    <entry>
                        <emphasis><code>Zend_Ldap_Dn factory(string|array $dn,
                            string|null $caseFold)</code></emphasis>
                    </entry>

                    <entry>
                        Erstellt eine <classname>Zend_Ldap_Dn</classname> Instanz von einem Array
                        oder String. Das Array muß der unter
                        <methodname>Zend_Ldap_Dn::implodeDn()</methodname> beschriebenen
                        Arraystruktur entsprechen.
                    </entry>
                </row>

                <row>
                    <entry>
                        <emphasis><code>Zend_Ldap_Dn fromString(string $dn,
                            string|null $caseFold)</code></emphasis>
                    </entry>

                    <entry>
                        Erstellt eine <classname>Zend_Ldap_Dn</classname> Instanz von einem String.
                    </entry>
                </row>

                <row>
                    <entry>
                        <emphasis><code>Zend_Ldap_Dn fromArray(array $dn,
                            string|null $caseFold)</code></emphasis>
                    </entry>

                    <entry>
                        Erstellt eine <classname>Zend_Ldap_Dn</classname> Instanz von einem
                        Array. Das Array muß der Arraystruktur entsprechen welche unter
                        <methodname>Zend_Ldap_Dn::implodeDn()</methodname> beschrieben ist.
                    </entry>
                </row>

                <row>
                    <entry><code>array getRdn(string|null $caseFold)</code></entry>

                    <entry>
                        Gibt den <acronym>RDN</acronym> des aktuellen DN zurück. Der zurückgegebene
                        Wert ist ein Array wobei die Namen der Attribute von <acronym>RDN</acronym>
                        im Schlüssel gesetzt sind und die <acronym>RDN</acronym> Attribute als Wert.
                    </entry>
                </row>

                <row>
                    <entry><code>string getRdnString(string|null $caseFold)</code></entry>

                    <entry>
                        Gibt den <acronym>RDN</acronym> vom aktuellen DN zurück. Der zurückgegebene
                        Wert ist ein String.
                    </entry>
                </row>

                <row>
                    <entry><code>Zend_Ldap_Dn getParentDn(integer $levelUp)</code></entry>

                    <entry>
                        Gibt den DN des aktuellen DN Knotens, <varname>$levelUp</varname> Levels
                        höher, zurück. <varname>$levelUp</varname> ist standardmäßig <code>1</code>.
                    </entry>
                </row>

                <row>
                    <entry>
                        <code>array get(integer $index, integer $length, string|null
                            $caseFold)</code>
                    </entry>

                    <entry>
                        Gibt einen Teil des aktuellen DN zurück der von <varname>$index</varname>
                        und <varname>$length</varname> eingegrenzt wird. <varname>$index</varname>
                        beginnt mit <code>0</code> und der DN Teil von links.
                    </entry>
                </row>

                <row>
                    <entry>
                        <code>Zend_Ldap_Dn set(integer $index, array $value)</code>
                    </entry>

                    <entry>
                        Ersetzt den DN Teil im aktuellen DN. Diese Operation manipuliert die
                        aktuelle Instanz.
                    </entry>
                </row>

                <row>
                    <entry>
                        <code>Zend_Ldap_Dn remove(integer $index, integer $length)</code>
                    </entry>

                    <entry>
                        Entfernt einen DN Teil vom aktuellen DN. Diese Operation manipuliert die
                        aktuelle Instanz. <varname>$length</varname> ist standardmäßig
                        <code>1</code>.
                    </entry>
                </row>

                <row>
                    <entry><code>Zend_Ldap_Dn append(array $value)</code></entry>

                    <entry>
                        Fügt einen DN Teil zum aktuellen DN hinzu, Diese Operation manipuliert die
                        aktuelle Instanz.
                    </entry>
                </row>

                <row>
                    <entry><code>Zend_Ldap_Dn prepend(array $value)</code></entry>

                    <entry>
                        Fügt einen DN Teil vor dem aktuellen DN hinzu. Diese Operation manipuliert
                        die aktuelle Instanz.
                    </entry>
                </row>

                <row>
                    <entry>
                        <code>Zend_Ldap_Dn insert(integer $index, array $value)</code>
                    </entry>

                    <entry>
                        Fügt einen DN Teil nach dem Index <varname>$index</varname> in den aktuellen
                        DN ein. Diese Operation manipuliert die aktuelle Instanz.
                    </entry>
                </row>

                <row>
                    <entry><code>void setCaseFold(string|null $caseFold)</code></entry>

                    <entry>
                        Setzt die Option für die Schreibweise auf der aktuellen DN Instanz. Wenn
                        <varname>$caseFold</varname> <constant>NULL</constant> ist dann wird die
                        standardmäßige Einstellung der Schreibweise (standardmäßig ist
                        <constant>Zend_Ldap_Dn::ATTR_CASEFOLD_NONE</constant> oder über
                        <methodname>Zend_Ldap_Dn::setDefaultCaseFold()</methodname> gesetzt)
                        für die aktuelle Instanz gesetzt.
                    </entry>
                </row>

                <row>
                    <entry><code>string toString(string|null $caseFold)</code></entry>
                    <entry>Gibt den DN als String zurück.</entry>
                </row>

                <row>
                    <entry><code>array toArray(string|null $caseFold)</code></entry>
                    <entry>Gibt den DN als Array zurück.</entry>
                </row>

                <row>
                    <entry><code>string __toString()</code></entry>

                    <entry>
                        Gibt den DN als String zurück - verweist auf
                        <methodname>Zend_Ldap_Dn::toString(null)</methodname>.
                    </entry>
                </row>

                <row>
                    <entry>
                        <emphasis><code>void setDefaultCaseFold(string $caseFold)</code></emphasis>
                    </entry>

                    <entry>
                        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.
                    </entry>
                </row>

                <row>
                    <entry>
                        <emphasis><code>array escapeValue(string|array $values)</code></emphasis>
                    </entry>

                    <entry>Escapt einen DN Wert entsprechend <acronym>RFC</acronym> 2253.</entry>
                </row>

                <row>
                    <entry>
                        <emphasis><code>array unescapeValue(string|array $values)</code></emphasis>
                    </entry>

                    <entry>
                        Macht die Konvertierung von
                        <methodname>Zend_Ldap_Dn::escapeValue()</methodname> rückgängig.
                    </entry>
                </row>

                <row>
                    <entry>
                        <emphasis><code>array explodeDn(string $dn, array
                            &amp;$keys, array &amp;$vals, string|null $caseFold)</code></emphasis>
                    </entry>

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

                        <programlisting language="php"><![CDATA[
array(
array("cn" => "name1", "uid" => "user"),
array("cn" => "name2"),
array("dc" => "example"),
array("dc" => "org")
)
]]></programlisting>

                        <para>
                            für einen DN von
                            <code>cn=name1+uid=user,cn=name2,dc=example,dc=org</code>.
                        </para>
                    </entry>
                </row>

                <row>
                    <entry>
                        <emphasis><code>boolean checkDn(string $dn, array
                            &amp;$keys, array &amp;$vals, string|null $caseFold)</code></emphasis>
                    </entry>

                    <entry>
                        Prüft ob der gegebene DN <varname>$dn</varname> fehlerhaft ist. Wenn
                        <varname>$keys</varname> oder <varname>$keys</varname> und
                        <varname>$vals</varname> angegeben sind, werden diese Arrays mit dem
                        betreffenden DN Schlüssel und Werten gefüllt.
                    </entry>
                </row>

                <row>
                    <entry>
                        <emphasis><code>string implodeRdn(array $part, string|null
                            $caseFold)</code></emphasis>
                    </entry>

                    <entry>
                        Gibt den DN Teil in der Form <code>$attribute=$value</code> zurück.
                    </entry>
                </row>

                <row>
                    <entry>
                        <emphasis><code>string implodeDn(array $dnArray,
                            string|null $caseFold, string $separator)</code></emphasis>
                    </entry>

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

                        <programlisting language="php"><![CDATA[
array(
array("cn" => "name1", "uid" => "user"),
array("cn" => "name2"),
array("dc" => "example"),
array("dc" => "org")
)
]]></programlisting>
                    </entry>
                </row>

                <row>
                    <entry>
                        <emphasis><code>boolean isChildOf(string|Zend_Ldap_Dn
                            $childDn, string|Zend_Ldap_Dn $parentDn)</code></emphasis>
                    </entry>

                    <entry>
                        Prüft ob der angegebene <varname>$childDn</varname> unter dem
                        <varname>$parentDn</varname> Subbaum ist.
                    </entry>
                </row>
            </tbody>
        </tgroup>
    </table>
</sect3>
