<sect4 id="config-LSattr_html_select_list">
  <title>LSattr_html_select_list</title>
  <para>Ce type est utilisé pour la gestion des attributs dont les valeurs font
  partie d'une liste statique ou dynamique. Il est possible de lister des valeurs
  statiques et également des références à d'autres &LSobjects;. La référence à
  un objet correspond à une valeur clé, référente à un objet précis, qui peut être
  soit la valeur d'un de ses attributs, soit son <emphasis>DN</emphasis>.</para>

  <programlisting linenumbering="unnumbered">
<citetitle>Structure</citetitle>...
<![CDATA['html_options' => array (
   'possible_values' => array (
     '[LSformat de la valeur clé]' => '[LSformat du nom d'affichage]',
     ...
     'OTHER_OBJECT' => array (
       'object_type' => '[Type d'LSobject]',
       'display_name_format' => '[LSformat du nom d'affichage des LSobjects]',
       'value_attribute' => '[Nom de l'attribut clé]',
       'values_attribute' => '[Nom de l'attribut clé multi-valeur]',
       'filter' => '[Filtre de recherche des LSobject]',
       'scope' => '[Scope de la recherche]',
       'basedn' => '[Basedn de la recherche]',
       'onlyAccessible' => '[Booléen]'
     ),
     'OTHER_ATTRIBUTE' => '[attr]',
     // Or :
     'OTHER_ATTRIBUTE' => array(
       '[attr1]' => '[label1]',
       '[attr2]' => '[label2]',
       [...]
     ),
     // Or :
     'OTHER_ATTRIBUTE' => array(
       'attr' => [attr],
       'json_component_key' => '[Composant JSON clé]',
       'json_component_label' => '[Composant JSON label]',
     ),
     array (
       'label' => '[LSformat du nom du groupe de valeurs]',
       'possible_values' => array (
         '[LSformat de la valeur clé]' => '[LSformat du nom d'affichage]',
         ...
         'OTHER_OBJECT' => array (
           ...
         )
       )
     )
   ),
   'get_possible_values' => [callable],
   'translate_labels' => [booléen],
   'sort' => [Booléen],
   'sortDirection' => '[ASC|DESC]'
),]]>
...
</programlisting>

<variablelist>
<title>Paramètres de configuration</title>

<varlistentry>
  <term>possible_values</term>
  <listitem>
    <para>Tableau associatif obligatoire contenant en valeur clé le &LSformat;
    des valeurs clés prisent par l'attribut et en valeurs associées, le &LSformat;
    des noms d'affichage de ces valeurs. Ces &LSformats; sont composés à partir des
    valeurs de l'objet courant (attributs, dn, ...).</para>

    <para>Si la valeur clé est égale à <literal>OTHER_OBJECT</literal>, une liste
    d'&LSobject; sera insérée dans la liste des valeurs possibles. La valeur
    associée est alors un tableau associatif dont les valeurs clés sont les noms
    des paramètres de configuration de la recherche de ces &LSobjects; et les
    valeurs associées, les valeurs des paramètres.</para>

    <para>Il est possible de regrouper des valeurs de l'attribut en plaçant leur
    déclaration dans un sous-tableau. Ce sous-tableau devra contenir la clé
    <literal>label</literal> dont la valeur associé sera le &LSformat; du nom du groupe
    de valeurs. Ce &LSformat; est composé à partir des valeurs de l'objet courant
    (attributs, dn, ...). Une seconde clé <literal>possible_values</literal> regroupera
    les valeurs possibles du groupe. Comme pour le tableau principal, la clé <literal>
    OTHER_OBJECT</literal> permet d'imcorporer une liste d'&LSobject;.</para>
<variablelist>
  <varlistentry>
    <term>object_type</term>
    <listitem>
      <simpara>Nom du type d'&LSobject; en référence.</simpara>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term>display_name_format</term>
    <listitem>
      <simpara>&LSformat; du nom d'affichage des objets lors de leur sélection.</simpara>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term>value_attribute</term>
    <listitem>
      <simpara>Nom de l'attribut des &LSobjects; en référence servant de valeur
      clé et permettant de les identifier (Exemple : <emphasis>dn</emphasis> ou
      <emphasis>uid</emphasis>).</simpara>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term>values_attribute</term>
    <listitem>
      <simpara>Nom de l'attribut des &LSobjects; en référence servant de catalogue de
      valeurs. Dans ce mode, la valeur n'a pas de label et est affichée directement
      dans l'interface. Ce paramètre peut-être utilisé en complément ou non du paramètre
      <emphasis>value_attribute</emphasis>.</simpara>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term>filter</term>
    <listitem>
      <simpara>Filtre falcultatif de la recherche des LSobjets. Il sera dans tous
      les cas agrémenté des valeurs des <emphasis>objectclass</emphasis> du type
      d'&LSobject;.</simpara>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term>scope</term>
    <listitem>
      <simpara>Scope falcultatif de la recherche des LSobjets.</simpara>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term>basedn</term>
    <listitem>
      <simpara>Basedn falcultatif de la recherche des LSobjets.</simpara>
    </listitem>
  </varlistentry>

  <varlistentry>
    <term>onlyAccessible</term>
    <listitem>
      <simpara>Booléen falcultatif définissant si seul les LSobjets auxquels
      l'utilisateur connecté à accès doivent être considérés comme sélectionnables
      (Faux par défaut).</simpara>
    </listitem>
  </varlistentry>
</variablelist>

    <para>Si la valeur clé est égale à <literal>OTHER_ATTRIBTE</literal>, une liste
    de valeur possible sera composée à l'aide des valeurs d'un (ou plusieurs) autre
    attribut de l'objet courant. La valeur associée peut être alors&nbsp;:

<itemizedlist>
  <listitem>
    <simpara>soit le nom d'un attribut dont les valeurs seront utilisées comme valeurs
    possibles (la valeur affichée est égale à la valeur stockée).</simpara>
  </listitem>

  <listitem>
    <simpara>soit un tableau associatif dont les valeurs clés sont les noms des attributs
    dont les valeurs seront utilisés comme valeurs possibles et dont les valeurs associés
    seront les labels sous lesquels ces valeurs seront regroupées (la valeur
    affichée est égale à la valeur stockée).</simpara>
  </listitem>

  <listitem>
    <simpara>soit un tableau associatif référençant un attribut sous la clé <emphasis>attr
    </emphasis> dont les valeurs seront utilisées comme valeurs possibles. Cet attribut
    peut-être du type &LSattr_html_jsonCompositeAttribute;. Il sera alors possible d'utiliser
    les valeurs d'un composant en particulier en le référençant à l'aide de la clé <emphasis>
    json_component_key</emphasis>. Il est également possible de référencer un autre composant
    à l'aide de la clé <emphasis>json_component_label</emphasis> et dont les valeurs seront
    utilisées comme valeurs affichées lors de la sélection. À défaut, les valeurs affichées
    seront identiques à celles stockées.</simpara>
  </listitem>
</itemizedlist>

   </para>

  </listitem>
</varlistentry>

<varlistentry>
  <term>get_possible_values</term>
  <listitem>
    <para>Paramètre permettant de spécifier un <emphasis>callable</emphasis> qui sera utilisé
    pour lister les valeurs possibles de l'attribut. Il recevra en paramètres les informations
    suivantes:
    <variablelist>
      <varlistentry>
        <term>$options</term>
        <listitem>
          <simpara>Les options HTML de l'attribut.</simpara>
        </listitem>
      </varlistentry>

      <varlistentry>
        <term>$name</term>
        <listitem>
          <simpara>Le nom de l'attribut.</simpara>
        </listitem>
      </varlistentry>

      <varlistentry>
        <term>&amp;$ldapObject</term>
        <listitem>
          <simpara>Une référence à l'objet <literal>LSldapObject</literal>.</simpara>
        </listitem>
      </varlistentry>

    </variablelist>
    </para>
    <para>La valeur de retour attendue est un tableau associatif des valeurs possibles
    de l'attribut avec la valeur que prendra l'attribut en tant que clé et le label
    correspondant en tant que valeur. Tout autre retour sera considéré comme un échec
    et déclenchera une erreur.</para>
    <para>Il est également possible de regrouper des valeurs possibles de l'attribut: pour
    cela, le tableau retourné devra lui-même contenir un tableau associatif contenant la
    label traduit du groupe sous la clé <literal>label</literal> et les valeurs possibles
    du groupe sous la clé <literal>possible_values</literal>.</para>
    <para>Les valeurs retournées pourront être combinées avec les autres valeurs possibles
    configurées de l'attribut. La prise en charge du tri des valeurs possibles est assurée
    par la fonction appelante sauf dans le cas des sous-groupes de valeurs possibles. Dans
    ce cas, la méthode <literal>LSattr_html_select_list :: _sort()</literal> pourra être
    utilisée pour trier les valeurs du sous-groupe: cette méthode accepte en paramètre une
    référence du tableau des valeurs possibles ainsi que les options HTML de l'attribut.
    </para>
    <para>Si la traduction des labels des valeurs possibles de l'attribut est activées
    (voir ci-dessous), celle-ci doit être prise en charge par la fonction configurée.</para>
  </listitem>
</varlistentry>

<varlistentry>
  <term>translate_labels</term>
  <listitem>
    <simpara>Booléen permettant d'activer/désactiver la traduction des labels (Par defaut : <literal>Vrai</literal>).</simpara>
  </listitem>
</varlistentry>

<varlistentry>
  <term>sort</term>
  <listitem>
    <simpara>Booléen définissant si les valeurs possibles doivent être
    triées ou non (Vrai par défaut). Le trie est effectué sur les libellés
    des valeurs possibles.</simpara>
  </listitem>
</varlistentry>

<varlistentry>
  <term>sortDirection</term>
  <listitem>
    <simpara>Mot clé déterminant le sens du trie des valeurs possibles.</simpara>
    <simpara>Valeurs possibles : <literal>ASC</literal> ou <literal>DESC</literal> (<literal>ASC</literal> par défaut).</simpara>
  </listitem>
</varlistentry>
</variablelist>
</sect4>
