<sect2 id="config-LSobject-LSrelation">
  <title>LSrelation</title>
  <para>Cette section décrit la manière de configurer les relations entre les
  &LSobjects; appelées &LSrelation;.</para>
  <para>Dans le cadre d'une liaison dîte <emphasis>simple</emphasis>, c'est à
  dire une liaison au travers la valeur d'un attribut qui fera directement
  référence à un autre objet (<emphasis>DN</emphasis> ou la première valeur
  d'un attribut de référence), pourra être configurée simplement en spécifiant
  l'attribut de liaison et le type de valeur qu'il contient. Dans le cas d'une
  liaison plus complexe, il sera possible de développer vous même des méthodes
  de mise en relation.</para>

<programlisting>
<citetitle>Structure</citetitle>
<![CDATA[$GLOBALS['LSobjects']['[nom du type d'LSobject]']['LSrelation'] = array (
  'relation1' => array(
    'label' => '[label de la relation]',
    'emptyText' => "[texte affiché si aucune relation avec d'autres objets
                     n'existe pour l'objet courant]",
    'LSobject' => '[le type d'LSobjet en relation]',
    'display_name_format' => '[LSformat du nom d'affichage des LSobjet en relation]',
    'canEdit_attribute' => '[nom d'attribut]',

    // Liaison simple
    'linkAttribute' => '[attribut de liaison]',
    'linkAttributeValue' => '[valeur de l'attribut de liaison]',
    'linkAttributeOtherValues' => array('[autres valeurs possible de l'attribut de liaison]', [...]),

    // Liaison complexe
    'list_function' => '[méthode1]',
    'getkeyvalue_function' => '[methode2]',
    'update_function' => '[methode3]',
    'remove_function' => '[methode4]',
    'rename_function' => '[methode5]',
    'canEdit_function' => '[methode6]',

    'rights' => array(
      'LSprofile1' => 'r',
      'LSprofile2' => 'w',
      ...
    )
  )
);]]>
</programlisting>

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

<varlistentry>
  <term>label</term>
  <listitem>
    <simpara>Le label de la relation.</simpara>
  </listitem>
</varlistentry>

<varlistentry>
  <term>emptyText</term>
  <listitem>
    <simpara>Le texte à afficher pour décrire le fait que l'objet courant n'a
    aucune relation d'établie avec d'autres &LSobjects;. Exemple (au sujet d'un
    utilisateur) : <emphasis>N'appartient à aucun groupe.</emphasis></simpara>
  </listitem>
</varlistentry>

<varlistentry>
  <term>LSobject</term>
  <listitem>
    <simpara>Le type d'&LSobject; en relation avec le type courant.
    <emphasis>(Facultatif en cas de liaison complexe)</emphasis></simpara>
  </listitem>
</varlistentry>

<varlistentry>
  <term>display_name_format</term>
  <listitem>
    <simpara>&LSformat; du nom d'affichage des objets en relation.</simpara>
  </listitem>
</varlistentry>

<varlistentry>
  <term>canEdit_attribute</term>
  <listitem>
    <simpara>Le nom de l'attibut du type d'&LSobject; en relation devant être
    éditable par l'utilisateur pour que celui-ci puisse modifier la relation.
    Dans le cadre d'une relation simple, celui-ci peut, si nécessaire, être
    différent du paramètre <literal>linkAttribute</literal>.</simpara>
  </listitem>
</varlistentry>

<varlistentry>
  <term>linkAttribute</term>
  <listitem>
    <simpara>Dans le cadre d'une relation simple, il s'agit de l'attribut de
    liaison du type d'&LSobject; en relation avec le type courant, c'est à dire
    l'attribut dans lequel on retrouve une valeur en relation avec l'objet
    courant. <emphasis>(Facultatif en cas de liaison complexe)</emphasis></simpara>
  </listitem>
</varlistentry>

<varlistentry>
  <term>linkAttributeValue</term>
  <listitem>
    <simpara>Dans le cadre d'une relation simple, il s'agit du type de valeur prisent
    par l'attribut de liaison du type d'&LSobject; en relation avec le type courant.
    Il peut s'agir du mot clé <literal>dn</literal> si l'attribut de liaison contient
    le <emphasis>DN</emphasis> de l'objet courant ou bien le nom d'un attribut du type
    d'objet courant dont la première valeur sera stockée par l'attribut de liaison.
    <emphasis>(Facultatif en cas de liaison complexe)</emphasis></simpara>
  </listitem>
</varlistentry>

<varlistentry>
  <term>linkAttributeOtherValues</term>
  <listitem>
    <simpara>Dans le cadre d'une relation simple, il s'agit d'autres types de valeur
    possiblement prisent par l'attribut en plus de celui défini par le paramètre
    <literal>linkAttributeValue</literal>. Ce paramètre ne sert qu'a détecter des
    liaisons établies à l'aide de valeurs autres que celle relative au paramètre
    <literal>linkAttributeValue</literal> : en cas de nouvelle liaison, c'est la
    valeur associée à ce dernier qui sera utilisée pour établir la liaison.
    <emphasis>(Facultatif en cas de liaison complexe)</emphasis></simpara>
  </listitem>
</varlistentry>

<varlistentry>
  <term>list_function</term>
  <listitem>
    <simpara>La méthode de la classe du type d'&LSobject; en relation, permettant
    de lister les objets de ce type en relation avec l'objet courant.
    <emphasis>(Facultatif en cas de liaison simple)</emphasis></simpara>
  </listitem>
</varlistentry>

<varlistentry>
  <term>getkeyvalue_function</term>
  <listitem>
    <simpara>La méthode de la classe du type d'&LSobject; en relation, permettant
    d'obtenir la valeur clé à stocker pour établir la relation entre l'objet
    courant et d'autres objets du type concerné. <emphasis>(Facultatif en cas de
    liaison simple)</emphasis></simpara>
  </listitem>
</varlistentry>

<varlistentry>
  <term>update_function</term>
  <listitem>
    <simpara>La méthode de la classe du type d'&LSobject; en relation, permettant
    de mettre à jour les relations existantes entre l'objet courant et les objets
    du type concerné. Cette liste d'objets en relation est établie par
    l'utilisateur à travers l'interface. <emphasis>(Facultatif en cas de liaison
    simple)</emphasis></simpara>
  </listitem>
</varlistentry>

<varlistentry>
  <term>remove_function</term>
  <listitem>
    <simpara>La méthode de la classe du type d'&LSobject; en relation permettant
    de supprimer une relation existante entre l'objet courant et un objet du
    type concerné. <emphasis>(Facultatif en cas de liaison simple)</emphasis>
    </simpara>
  </listitem>
</varlistentry>

<varlistentry>
  <term>rename_function</term>
  <listitem>
    <simpara>La méthode de la classe du type d'&LSobject; en relation permettant
    d'effectuer les actions nécessaires lorsque l'objet courant est renommé dans
    le but de maintenir les valeurs clés permettant d'établir les relations entre
    l'objet courant et les objets en relation avec lui. <emphasis>(Facultatif en
    cas de liaison simple)</emphasis></simpara>
  </listitem>
</varlistentry>

<varlistentry>
  <term>canEdit_function</term>
  <listitem>
    <simpara>La méthode de la classe du type d'&LSobject; en relation permettant
    de vérifier que l'utilisateur à le droit de modifier la relation avec un objet
    en particulier. <emphasis>(Facultatif en cas de liaison simple)</emphasis>
    </simpara>
  </listitem>
</varlistentry>

<varlistentry>
  <term>rights</term>
  <listitem>
    <simpara>Tableau associatif dont les clés sont les noms des &LSprofiles; ayant
    des droits sur cette relation et dont les valeurs associées sont les droits
    correspondants. La valeur des droits d'un &LSprofile; peut être
    <literal>r</literal> pour le droit de lecture ou <literal>w</literal> pour
    le droit de lecture-écriture.Par défaut, un &LSprofile; n'a aucun droit.</simpara>
  </listitem>
</varlistentry>

</variablelist>

</sect2>
