--- /dev/null
+<?xml version="1.0" encoding="UTF-8" ?>
+<!ENTITY LdapSaisie "<application>LdapSaisie</application>">
+<!ENTITY netldap "<application><ulink url='http://pear.php.net/package/Net_LDAP2'>Net_LDAP2</ulink></application>">
+<!ENTITY smarty "<application><ulink url='http://www.smarty.net/'>Smarty</ulink></application>">
+<!ENTITY php "<application><ulink url='http://www.php.net/'>PHP</ulink></application>">
+<!ENTITY openldap "<application><ulink url='http://www.openldap.org/'>OpenLDAP</ulink></application>">
+<!ENTITY courier "<application><ulink url='http://www.courier-mta.org/'>Courier</ulink></application>">
+
+<!ENTITY subDn "<link linkend='config-subDn'>subDn</link>">
+<!ENTITY LSprofile "<link linkend='config-LSprofile'>LSprofile</link>">
+<!ENTITY LSprofiles "<link linkend='config-LSprofile'>LSprofiles</link>">
+<!ENTITY LSobject "<link linkend='config-LSobject'>LSobject</link>">
+<!ENTITY LSobjects "<link linkend='config-LSobject'>LSobjects</link>">
+<!ENTITY LSattribute "<link linkend='config-LSattribute'>LSattribute</link>">
+<!ENTITY LSattributes "<link linkend='config-LSattribute'>LSattributes</link>">
+<!ENTITY LSrelation "<link linkend='config-LSobject-LSrelation'>LSrelation</link>">
+<!ENTITY LSrelations "<link linkend='config-LSobject-LSrelation'>LSrelations</link>">
+<!ENTITY LSform "<link linkend='config-LSobject-LSform'>LSform</link>">
+<!ENTITY LSforms "<link linkend='config-LSobject-LSform'>LSforms</link>">
+<!ENTITY LSformat "<link linkend='config-LSformat'>LSformat</link>">
+<!ENTITY LSformats "<link linkend='config-LSformat'>LSformats</link>">
+<!ENTITY LSaddon "<link linkend='config-LSaddon'>LSaddon</link>">
+<!ENTITY LSaddons "<link linkend='config-LSaddon'>LSaddons</link>">
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE
+book SYSTEM "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
+[
+ <!ENTITY % LS-entities SYSTEM "LS.entities.xml">
+ %LS-entities;
+
+ <!ENTITY % conf-entities SYSTEM "conf/conf.entities.xml">
+ %conf-entities;
+ <!ENTITY % conf-LSattribute-LSattr_html-entities SYSTEM "conf/LSattribute/LSattr_html/LSattr_html.entities.xml">
+ %conf-LSattribute-LSattr_html-entities;
+ <!ENTITY % conf-LSattribute-LSattr_ldap-entities SYSTEM "conf/LSattribute/LSattr_ldap/LSattr_ldap.entities.xml">
+ %conf-LSattribute-LSattr_ldap-entities;
+ <!ENTITY % conf-LSattribute-check_data-entities SYSTEM "conf/LSattribute/check_data/LSattribute-check_data.entities.xml">
+ %conf-LSattribute-check_data-entities;
+ <!ENTITY % conf-LSaddon-entities SYSTEM "conf/LSaddon/LSaddon.entities.xml">
+ %conf-LSaddon-entities;
+
+ <!ENTITY intro SYSTEM "intro/intro.docbook">
+ <!ENTITY install SYSTEM "install/install.docbook">
+ <!ENTITY install-arbo SYSTEM "install/arbo.docbook">
+]>
+
+<book lang="fr">
+
+<bookinfo lang="fr">
+ <title>LdapSaisie</title>
+ <authorgroup>
+ <author>
+ <firstname>Benjamin</firstname>
+ <surname>Renard</surname>
+ <affiliation>
+ <address>
+ <email>brenard@easter-eggs.com</email>
+ <email>benjamin.renard@zionetrix.net</email>
+ </address>
+ </affiliation>
+ </author>
+ </authorgroup>
+ <productname>LdapSaisie</productname>
+ <releaseinfo>Version 0.2</releaseinfo>
+</bookinfo>
+
+&intro;
+
+&install;
+
+&conf;
+</book>
--- /dev/null
+DOCBOOK_FILE=LdapSaisie.docbook
+
+all: validate export
+
+# Validation
+validate:
+ xmllint --valid --noout $(DOCBOOK_FILE)
+
+export:
+ cd exports; make all
+
+clean:
+ cd exports; make clean
--- /dev/null
+<sect2 id='config-search-params'>
+<title>Paramètres étendus des recherches dans l'annuaire</title>
+<para>Les paramètres des recherches sont ceux supportés par &netldap;. Ces
+paramètres sont passés sous la forme d'un tableau associatif. Les paramètres
+supportés sont détaillés ci-dessous :
+
+<informaltable>
+ <tgroup cols="3"> <!-- on décrit le nombre de colonnes -->
+ <thead> <!-- on passe au "header" du tableau -->
+ <row>
+ <entry>Nom</entry>
+ <entry>Description</entry>
+ <entry>Valeur par défaut</entry>
+ </row>
+ </thead>
+ <tbody> <!-- et on remplit les lignes -->
+ <row>
+ <entry><parameter>scope</parameter></entry>
+ <entry>
+ <simpara>Définition de l'étendue de la recherche :</simpara>
+ <itemizedlist>
+ <listitem><simpara><literal>base</literal> - Sur une entrée seulement</simpara></listitem>
+ <listitem><simpara><literal>one</literal> - Sur les entrées imédiatement contenu par le <parameter>basedn</parameter> de la recherche</simpara></listitem>
+ <listitem><simpara><literal>sub</literal> - Sur l'arbre entier</simpara></listitem>
+ </itemizedlist>
+ </entry>
+ <entry><literal>sub</literal></entry>
+ </row>
+ <row>
+ <entry><parameter>sizelimit</parameter></entry>
+ <entry>Le nombre maximum d'entrées retournées par la recherche.</entry>
+ <entry><literal>0</literal> (illimité)</entry>
+ </row>
+ <row>
+ <entry><parameter>timelimit</parameter></entry>
+ <entry>Le délai d'attente maximum de la réponse du serveur en secondes.</entry>
+ <entry><literal>0</literal> (illimité)</entry>
+ </row>
+ <row>
+ <entry><parameter>attrsonly</parameter></entry>
+ <entry>Si <emphasis>vrai</emphasis>, seuls les noms des atttributs seront
+ retournés.</entry>
+ <entry><literal>false</literal></entry>
+ </row>
+ <row>
+ <entry><parameter>attributes</parameter></entry>
+ <entry>Tableau contenant les noms des attributs que les entrées retournées
+ peuvent contenir et que l'on souhaite récupérer.</entry>
+ <entry><literal>array()</literal>(tous)</entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<remark>Pour plus d'information sur le sujet, vous pouvez consulter la
+documentation officiel du projet &netldap;.</remark>
+</para>
+</sect2>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" ?>
+<sect1 id='config-LSaddon'>
+ <title>Configuration des LSaddons</title>
+ <para>
+ Cette partie décrit la manière de configurer les différents &LSaddons;
+ actuellement supportés par &LdapSaisie;. FIXME
+ </para>
+
+ &conf-LSaddon_maildir;
+
+</sect1>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" ?>
+<!ENTITY conf-LSaddon_maildir SYSTEM "LSaddon_maildir.docbook">
+
+
+
+
--- /dev/null
+<sect2 id="config-LSaddon_maildir">
+ <title>LSaddon_maildir</title>
+ <para>Cet &LSaddon; est utilisé pour gérer la manipulation distante de maildir.
+ FIXME</para>
+</sect2>
--- /dev/null
+<sect2 id="config-LSattribute">
+ <title>Configuration des attributs</title>
+ <para>Cette section décrit les options de configuration des attributs des
+ &LSobjects;. Les attributs sont définis dans le tableau associatif
+ <varname>attrs</varname> de la configuration des &LSobjects;. Dans ce tableau,
+ les clé les noms des attributs et les valeurs liés sont la configuration des
+ attributs.</para>
+
+ <warning><simpara>Contrairement à ce qui existe dans le standard LDAP, les
+ noms des attributs sont sensibles à la casse. Il faut que le nom des attributs
+ dans &LdapSaisie; soient scrupuleusement les mêmes que ceux retourné par
+ &netldap;</simpara></warning>
+
+<programlisting linenumbering="unnumbered">
+<citetitle>Structure</citetitle>...
+<![CDATA['attrs' => array (
+ /* ----------- start -----------*/
+ 'attr1' => array (
+ 'label' => _('[label de l'attr1'),
+ 'help_info' => _('[Message d'aide sur l'attribut attr1'),
+ 'ldap_type' => 'ldaptype1',
+ 'ldap_options' => array(
+ // Options LDAP liées au type LDAP de l'attribut
+ ),
+ 'html_type' => 'htmltype1',
+ 'html_options' => array(
+ // Options HTML liées au type HTML de l'attribut
+ ),
+ 'multiple' => 0,
+ 'required' => 1,
+ 'default_value' => 'valeur1',
+ 'check_data' => array (
+ // Régle de vérification syntaxique des données saisies
+ ),
+ 'validation' => array (
+ // Règle de vérification d'intégrité des données saisies
+ ),
+ 'rights' => array(
+ 'LSprofile1' => 'droit1',
+ 'LSprofile2' => 'droit2',
+ ...
+ ),
+ 'view' => 1,
+ 'form' => array (
+ 'create' => 1,
+ 'modify' => 0,
+ ...
+ ),
+ 'dependAttrs' => array(
+ // Attributs en dépendance
+ ),
+ 'generate_function' => 'fonction1'
+ ),
+ /* ----------- end -----------*/
+ ...
+);]]>
+...
+</programlisting>
+
+<!-- Début Paramètres Configuration -->
+<variablelist>
+<title>Paramètres de configuration</title>
+
+<varlistentry>
+ <term>label</term>
+ <listitem>
+ <simpara>Le label de l'attribut.</simpara>
+ </listitem>
+</varlistentry>
+
+
+<varlistentry>
+ <term>help_info</term>
+ <listitem>
+ <simpara>Message d'aide qui sera affiché dans une bulle d'aide à côté du
+ nom de l'attribut dans les formulaires.</simpara>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>ldap_type</term>
+ <listitem>
+ <simpara>Le type LDAP de l'attribut.
+ <link linkend='config-LSattr_ldap'>Voir la section concernée.</link></simpara>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>ldap_options</term>
+ <listitem>
+ <simpara>Tableau associatif contenant les paramètres de configuration du
+ type LDAP de l'attribut.
+ <link linkend='config-LSattr_ldap'>Voir la section concernée.</link></simpara>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>html_type</term>
+ <listitem>
+ <simpara>Le type HTML de l'attribut.
+ <link linkend='config-LSattr_html'>Voir la section concernée.</link></simpara>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>html_options</term>
+ <listitem>
+ <simpara>Tableau associatif contenant les paramètres de configuration du
+ type HTML de l'attribut.
+ <link linkend='config-LSattr_html'>Voir la section concernée.</link></simpara>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>multiple</term>
+ <listitem>
+ <simpara>Booléen définissant si cet attribut peut stocker plusieurs valeurs.</simpara>
+ <simpara>Valeurs possibles : <emphasis>0</emphasis> ou <emphasis>1</emphasis></simpara>
+ <simpara>Valeur par défaut : <emphasis>0</emphasis></simpara>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>required</term>
+ <listitem>
+ <simpara>Booléen définissant si cet attribut doit obligatoirement être
+ défini.</simpara>
+ <simpara>Valeurs possibles : <emphasis>0</emphasis> ou <emphasis>1</emphasis></simpara>
+ <simpara>Valeur par défaut : <emphasis>0</emphasis></simpara>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>default_value</term>
+ <listitem>
+ <simpara>Valeur par défaut de l'attribut.</simpara>
+ <simpara>Valeurs possibles : <emphasis>0</emphasis> ou <emphasis>1</emphasis></simpara>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>check_data</term>
+ <listitem>
+ <simpara>Tableau associatif contenant les règles de vérification syntaxique
+ des données de l'attribut.<link linkend='config-LSattribute-check-data'>Voir
+ la section concernée.</link></simpara>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>validation</term>
+ <listitem>
+ <simpara>Tableau associatif contenant les règles de vérification d'intégrité
+ des données de l'attribut.<link linkend='config-LSattribute-validation'>Voir
+ la section concernée.</link></simpara>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>rights</term>
+ <listitem>
+ <simpara>Tableau associatif dont les clés sont les noms des &LSprofiles; ayant
+ des droits sur cet attribut et 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>
+
+<varlistentry>
+ <term>view</term>
+ <listitem>
+ <simpara>Booléen définissant si l'attribut est, ou non, affiché lors de la
+ visualisation des objets du type courant.</simpara>
+ <simpara>Valeurs possibles : <emphasis>0</emphasis> ou <emphasis>1</emphasis></simpara>
+ <simpara>Valeur par défaut : <emphasis>0</emphasis></simpara>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>form</term>
+ <listitem>
+ <simpara>Tableau associatif dont les clés sont les noms des &LSforms; et les
+ valeurs associées la définition de l'affichage dans ce &LSform;. Si cette
+ valeur vaut <emphasis>0</emphasis>, alors l'attribut sera lecture-seule et si
+ cette valeur vaut <emphasis>1</emphasis>, cet attribut sera affiché en
+ lecture-écriture.</simpara>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>dependAttrs</term>
+ <listitem>
+ <simpara>Tableau associatif listant les attributs dépendants de celui-ci.
+ Les attributs listés ici seront regénérés lors de chaque modification
+ de l'attribut courant. Cette génération sera effectué avec la fonction
+ définie dans le paramètre <varname>generate_function</varname> de
+ l'attribut.</simpara>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>generate_function</term>
+ <listitem>
+ <simpara>Nom de la fonction permettant de générer la valeur de l'attribut.
+ Cette fonction sera éxecutée, en passant en premier paramètre, l'objet
+ &LSobject; courant.</simpara>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>before_modify</term>
+ <listitem>
+ <simpara>Nom de la fonction qui sera exécutée avant toutes modifications de
+ la valeur de l'attribut.<link linkend="config-LSattribute-triggers">Voir la
+ section concernée</link></simpara>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>after_modify</term>
+ <listitem>
+ <simpara>Nom de la fonction qui sera exécutée après toutes modifications de
+ la valeur de l'attribut.<link linkend="config-LSattribute-triggers">Voir la
+ section concernée</link></simpara>
+ </listitem>
+</varlistentry>
+
+</variablelist>
+ &conf-LSattribute-LSattr_ldap;
+ &conf-LSattribute-LSattr_html;
+
+ &conf-LSattribute-check-data;
+ &conf-LSattribute-validation;
+ &conf-LSattribute-triggers;
+
+</sect2>
--- /dev/null
+<sect3 id="config-LSattr_html">
+ <title>Configuration des attributs HTML</title>
+ <para>Cette section décrit les options propres à chacun des types d'attributs HTML
+ supportés par &LdapSaisie;.</para>
+
+ &conf-LSattr_html_boolean;
+ &conf-LSattr_html_date;
+ &conf-LSattr_html_image;
+ &conf-LSattr_html_mail;
+ &conf-LSattr_html_maildir;
+ &conf-LSattr_html_mailQuota;
+ &conf-LSattr_html_password;
+ &conf-LSattr_html_rss;
+ &conf-LSattr_html_select_list;
+ &conf-LSattr_html_select_object;
+ &conf-LSattr_html_ssh_key;
+ &conf-LSattr_html_text;
+ &conf-LSattr_html_textarea;
+ &conf-LSattr_html_url;
+ &conf-LSattr_html_xmpp;
+
+</sect3>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" ?>
+<!ENTITY conf-LSattr_html_boolean SYSTEM "LSattr_html_boolean.docbook">
+<!ENTITY conf-LSattr_html_date SYSTEM "LSattr_html_date.docbook">
+<!ENTITY conf-LSattr_html_image SYSTEM "LSattr_html_image.docbook">
+<!ENTITY conf-LSattr_html_mail SYSTEM "LSattr_html_mail.docbook">
+<!ENTITY conf-LSattr_html_maildir SYSTEM "LSattr_html_maildir.docbook">
+<!ENTITY conf-LSattr_html_mailQuota SYSTEM "LSattr_html_mailQuota.docbook">
+<!ENTITY conf-LSattr_html_password SYSTEM "LSattr_html_password.docbook">
+<!ENTITY conf-LSattr_html_rss SYSTEM "LSattr_html_rss.docbook">
+<!ENTITY conf-LSattr_html_select_list SYSTEM "LSattr_html_select_list.docbook">
+<!ENTITY conf-LSattr_html_select_object SYSTEM "LSattr_html_select_object.docbook">
+<!ENTITY conf-LSattr_html_ssh_key SYSTEM "LSattr_html_ssh_key.docbook">
+<!ENTITY conf-LSattr_html_text SYSTEM "LSattr_html_text.docbook">
+<!ENTITY conf-LSattr_html_textarea SYSTEM "LSattr_html_textarea.docbook">
+<!ENTITY conf-LSattr_html_url SYSTEM "LSattr_html_url.docbook">
+<!ENTITY conf-LSattr_html_xmpp SYSTEM "LSattr_html_xmpp.docbook">
--- /dev/null
+<sect4 id="config-LSattr_html_boolean">
+ <title>LSattr_html_boolean</title>
+ <para>Ce type est utilisé pour la gestion des attributs dont la valeur est
+ un booléen. Pour le moment, les attributs à valeurs multiples ne sont pas gérés.
+ La valeur retournée est l'une des chaînes de caractères suivantes :
+ <itemizedlist>
+ <listitem><simpara><literal>yes</literal> pour <emphasis>Vrai</emphasis></simpara></listitem>
+ <listitem><simpara><literal>no</literal> pour <emphasis>Faux</emphasis></simpara></listitem>
+ </itemizedlist>
+ <note><simpara>Pour maîtriser les valeurs stockées dans l'annuaire, il faut
+ coupler ce type d'attribut HTML avec le type d'attribut LDAP
+ <link linkend='config-LSattr_ldap_boolean'>boolean</link></simpara></note>
+ </para>
+</sect4>
--- /dev/null
+<sect4 id="config-LSattr_html_date">
+ <title>LSattr_html_date</title>
+ <para>Ce type est utilisé pour la gestion des attributs dont la valeur est
+ une date.</para>
+
+ <programlisting linenumbering="unnumbered">
+<citetitle>Structure</citetitle>...
+<![CDATA['html_options' => array (
+ 'firstDayOfWeek' => '[Le rang du premier jour de la semaine]',
+ 'format' => '[Format d'affichage de la date]',
+),]]>
+...
+</programlisting>
+
+<variablelist>
+<title>Paramètres de configuration</title>
+
+<varlistentry>
+ <term>firstDayOfWeek</term>
+ <listitem>
+ <simpara>Un entier correspondant au rang du premier jour de la semaine :
+ de 0 à 6, 0 correspondant à Dimanche et 6 à Lundi.</simpara>
+ <note><simpara>La valeur par défaut est 0, donc Dimanche.</simpara></note>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>format</term>
+ <listitem>
+ <para>Format d'affichage de la date dans le champ de saisie. Ce format
+ est composé à partir des motifs clés suivants : FIXME</para>
+ <note><simpara>La valeur par défaut est <emphasis>%d/%m/%Y, %T</emphasis>.
+ Exemple : <emphasis>23/04/2009, 23:03:04</emphasis></simpara></note>
+ </listitem>
+</varlistentry>
+
+</variablelist>
+
+
+</sect4>
--- /dev/null
+<sect4 id="config-LSattr_html_image">
+ <title>LSattr_html_image</title>
+ <para>Ce type est utilisé pour la gestion des attributs dont la valeur est
+ une image. Pour le moment, les attributs à valeurs multiples ne sont pas gérés.
+ </para>
+</sect4>
--- /dev/null
+<sect4 id="config-LSattr_html_mail">
+ <title>LSattr_html_mail</title>
+ <para>Ce type est utilisé pour la gestion des attributs dont la valeur est
+ une adresse e-mail. Il propose directement dans l'interface, la possibilité
+ d'envoyer des mails à l'adresse saisie.</para>
+ <important><simpara>Ce type d'attribut HTML est dérivé du type
+ <link linkend='config-LSattr_html_text'>text</link>. Il profite donc de toutes
+ les fonctionnalités d'un champ de ce type (autogénération, ...).</simpara>
+ </important>
+</sect4>
--- /dev/null
+<sect4 id="config-LSattr_html_mailQuota">
+ <title>LSattr_html_mailQuota</title>
+ <para>Ce type est utilisé pour la gestion des attributs dont la valeur est
+ le quota d'une boite mail. Le format de la valeur générée correspondant au format
+ attendu par le serveur de mail &courier;. Exemple : <emphasis>50000000S</emphasis>
+ correspond à un quota de 50Mio.</para>
+</sect4>
--- /dev/null
+<sect4 id="config-LSattr_html_maildir">
+ <title>LSattr_html_maildir</title>
+ <para>Ce type est utilisé pour la gestion des attributs dont la valeur est
+ le chemin d'une maildir. Typiquement, ce type attribut HTML est utile dans
+ le cas de l'attribut <emphasis>mailbox</emphasis> utilisé par maildrop pour
+ stocker le chemin des boites mails. Ce type d'attribut offre la possibilité de
+ gérér un niveau de l'attribut et à travers les déclencheurs gérés par &LdapSaisie;
+ la création, la modification et ou la suppression de la boite mails. Le &LSaddon;
+ <link linkend='config-LSaddon_maildir'>boolean</link> est utilisé pour manipuler
+ la boite mail à distance.
+ </para>
+
+ <note><simpara>Actuellement, cet &LSaddon; ne gérant que l'accès via FTP au
+ serveur distant, l'API d'accès via FTP est attaquée directement.</simpara></note>
+
+ <programlisting linenumbering="unnumbered">
+<citetitle>Structure</citetitle>...
+<![CDATA['html_options' => array (
+ 'LSform' => array (
+ '[LSform1]' => [booléen],
+ '[LSform2]' => [booléen],
+ ...
+ ),
+ 'remoteRootPathRegex' => "[Expression régulière pour matcher le dossier à créer]",
+ 'archiveNameFormat' => "[LSformat du chemin/nom du fichier une fois archiver]"
+ ),]]>
+...
+</programlisting>
+
+<variablelist>
+<title>Paramètres de configuration</title>
+
+<varlistentry>
+ <term>LSform</term>
+ <listitem>
+ <simpara>Tableau associatif obligatoire contenant en valeur clé le nom des
+ &LSforms; dans lesquels la fonctionnalité de modification de la boite mail
+ sera présente. Les valeurs attachées sont des booléens définissant si la
+ modification est active par défaut.</simpara>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>remoteRootPathRegex</term>
+ <listitem>
+ <simpara>Expression régulière facultative dont le but est de
+ <emphasis>matcher</emphasis> dans la valeur complète du chemin distant de la
+ <emphasis>maildir</emphasis>, le chemin de la <emphasis>maildir</emphasis>
+ à créer une fois connecté sur le serveur.</simpara>
+ <para>Exemple : Si le chemin complet de la <emphasis>maildir</emphasis> est
+ <emphasis>/home/vmail/user</emphasis>, mais que l'utilisateur FTP lorsqu'il
+ se connecte arrive directement dans <emphasis>/home/vmail</emphasis>, et faut
+ définir le paramètre <parameter>remoteRootPathRegex</parameter> de la manière
+ suivante :
+ <programlisting linenumbering="unnumbered">^\/home\/vmail\/([^\/]*)\/+$</programlisting>
+ </para>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>archiveNameFormat</term>
+ <listitem>
+ <simpara>&LSformat; du nom du dossier de la <emphasis>maildir</emphasis> une
+ fois archivée. Si ce format est défini, le dossier ne sera pas supprimé mais
+ déplacé ou rénommé. Le format sera construit avec pour seul mot clé, le nom
+ de l'ancien dossier. Exemple : Si le dossier de la maildir est
+ <emphasis>/home/vmail/user</emphasis> et le paramètre
+ <parameter>archiveNameFormat</parameter> vaut <emphasis>%{old}.bckp</emphasis>,
+ le dossier sera renommé en <emphasis>/home/vmail/user.bckp</emphasis>.</simpara>
+ <important><simpara>Ce format est interprété après application de la routine
+ liée au paramètre <parameter>remoteRootPathRegex</parameter>. Ainsi, dans
+ l'exemple précédent, si le paramètre <parameter>remoteRootPathRegex</parameter>
+ tronquait uniquement le nom du dossier final, c'est à dire <emphasis>user</emphasis>,
+ le format une fois interprété donnerai <emphasis>user.bckp</emphasis>.
+ </simpara></important>
+ </listitem>
+</varlistentry>
+
+</variablelist>
+
+
+</sect4>
--- /dev/null
+<sect4 id="config-LSattr_html_password">
+ <title>LSattr_html_password</title>
+ <para>Ce type est utilisé pour la gestion des attributs dont la valeur est
+ un mot de passe.</para>
+
+ <programlisting linenumbering="unnumbered">
+<citetitle>Structure</citetitle>...
+<![CDATA['html_options' => array(
+ 'generationTool' => [booleen],
+ 'autoGenerate' => [booleen],
+ 'lenght' => [nombre de caractères],
+ 'chars' => array ( // Caractères que peut contenir le mot de passe
+ array( // Liste caractère avec un nombre mininum d'apparition supérieur à 1
+ 'nb' => [nb caractères],
+ 'chars' => '[liste de caractères possibles]'
+ ),
+ '[autre liste de caractères possible]', // Liste caractère avec un nombre
+ // d'apparitions égal à 1
+ ...
+ ),
+ 'verify' => [booléen], // Activation de l'outil de vérification du mot de passe
+ 'mail' => array( // Configuration de l'envoi du mot de passe par mail
+ 'subject' => "[LSformat du sujet du mail]",
+ 'msg' => "[LSformat du message du mail]",
+ 'mail_attr' => 'mail', // Attribut mail de l'objet
+ 'send' => 1, // Activation par défaut de l'envoi du mot de passe
+ 'ask' => 1, // Laisser le choix à l'utilisateur
+ 'canEdit' => 1 // Activation de l'édition du LSformat du message par l'utilisateur
+ )
+),]]>
+...
+</programlisting>
+
+<variablelist>
+<title>Paramètres de configuration</title>
+
+<varlistentry>
+ <term>generationTool</term>
+ <listitem>
+ <simpara>Booléen définissant si l'outil de génération de mot de passe est
+ activé.</simpara>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>autoGenerate</term>
+ <listitem>
+ <simpara>Active la génération automatique du mot de passe lorsque l'attribut
+ n'a encore aucune valeur de définie. Il faut également que l'outil de
+ génération soit activé (<parameter>generationTool</parameter>).</simpara>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>lenght</term>
+ <listitem>
+ <simpara>Nombre de caractères que devront contenir les mots de passe générés.
+ </simpara>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>chars</term>
+ <listitem>
+ <para>Tableau contenant une liste de listes de caractères possibles pour
+ composer le mot de passe. Dans chacune de ces listes, au moins un caractère
+ sera utilisé dans le nouveau mot de passe. Il est possible de définir un
+ nombre supérieur de caractères d'une liste devant apparaître dans les mots de
+ passe générés en spécifiant un tableau associatif dont la clé <emphasis>nb
+ </emphasis> associra le nombre entier de caractères et la clé <emphasis>chars
+ </emphasis> la liste de caractères. Une liste de caractères est un chaîne.</para>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>verify</term>
+ <listitem>
+ <simpara>Booléen définissant si l'outil de vérification du mot de passe est
+ activé. Si celui-ci est activé, l'utilisateur pourra entrer un mot de passe
+ dans le champ et cliquer sur un bouton qui lancera une procédure de
+ vérification du mot de passe via un test de connexion à l'annuaire.</simpara>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>mail</term>
+ <listitem>
+ <para>Paramètres de configuration de l'envoi par mail du mot de passe à
+ l'utilisateur. Lorsque cet outil est activé, lors de la modification/création
+ du mot de passe, l'utilisateur pourra recevoir un mail lui spécifiant son
+ nouveau mot de passe.
+
+ <variablelist>
+ <title>Paramêtres de configuration</title>
+
+ <varlistentry>
+ <term>send</term>
+ <listitem>
+ <simpara>Booléen définissant si l'envoi du mot de passe est activé par
+ défaut.</simpara>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>ask</term>
+ <listitem>
+ <simpara>Booléen définissant si on laisse le choix à l'utilisateur
+ d'activer ou non l'envoi du mot de passe par mail.</simpara>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>canEdit</term>
+ <listitem>
+ <simpara>Booléen définissant si on laisse la possibilité à l'utilisateur
+ d'éditer le &LSformat; du message et du sujet.</simpara>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>subject</term>
+ <listitem>
+ <simpara>&LSformat; du sujet du mail. Ce format sera composé avec la
+ valeur du nouveau mot de passe de l'utilisateur.</simpara>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>msg</term>
+ <listitem>
+ <simpara>&LSformat; du message du mail. Ce format sera composé avec la
+ valeur du nouveau mot de passe de l'utilisateur.</simpara>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>mail_attr</term>
+ <listitem>
+ <simpara>Le nom de l'attribut listant les mails possibles de
+ l'utilisateur. Par défaut, la première valeur de l'attribut sera
+ utilisée comme adresse mail destinatrice.
+ Si <parameter>canEdit</parameter> est activé, l'utilisateur pourra
+ choisir l'adresse mail destinatrice parmi la liste des valeurs de
+ l'attribut.</simpara>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+
+ </para>
+ </listitem>
+</varlistentry>
+
+</variablelist>
+
+
+</sect4>
--- /dev/null
+<sect4 id="config-LSattr_html_rss">
+ <title>LSattr_html_rss</title>
+ <para>Ce type est utilisé pour la gestion des attributs dont la valeur est
+ l'URL d'un flux RSS. Il propose directement dans l'interface, la possibilité
+ d'accèder au flux RSS.</para>
+ <important><simpara>Ce type d'attribut HTML est dérivé du type
+ <link linkend='config-LSattr_html_text'>text</link>. Il profite donc de toutes
+ les fonctionnalités d'un champ de ce type (autogénération, ...).</simpara>
+ </important>
+</sect4>
--- /dev/null
+<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é]',
+ 'filter' => '[Filtre de recherche des LSobject]',
+ 'scope' => '[Scope de la recherche]',
+ 'basedn' => '[Basedn de la recherche]'
+ )
+ )
+),]]>
+...
+</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>
+
+<variablelist>
+ <varlistentry>
+ <term>object_type</term>
+ <listitem>
+ <simpara>Nom du type d'&LSobject; en référence.</simpara>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<variablelist>
+ <varlistentry>
+ <term>display_name_format</term>
+ <listitem>
+ <simpara>&LSformat; du nom d'affichage des objets lors de leur sélection.</simpara>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<variablelist>
+ <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>
+</variablelist>
+
+<variablelist>
+ <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>
+</variablelist>
+
+<variablelist>
+ <varlistentry>
+ <term>filter</term>
+ <listitem>
+ <simpara>Basedn falcultatif de la recherche des LSobjets.</simpara>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+ </listitem>
+</varlistentry>
+
+</variablelist>
+
+
+</sect4>
--- /dev/null
+<sect4 id="config-LSattr_html_select_object">
+ <title>LSattr_html_select_object</title>
+ <para>Ce type est utilisé pour la gestion des attributs dont les valeurs sont
+ des références à d'autres &LSobjects;. Chaque référence à un objet correspond
+ à une valeur prise par l'attribut. Les valeurs clés référant à un &LSobject;
+ sont soit la valeur d'un de leurs attributs, soit leur <emphasis>DN</emphasis>.</para>
+
+ <programlisting linenumbering="unnumbered">
+<citetitle>Structure</citetitle>...
+<![CDATA['html_options' => array (
+ selectable_object => array (
+ 'object_type' => '[Type d'LSobject selectionnable]',
+ 'display_name_format' => '[LSformat du nom d'affichage des LSobjects]',
+ 'value_attribute' => '[Nom de l'attribut clé des LSobjects]'
+ )
+),]]>
+...
+</programlisting>
+
+<variablelist>
+<title>Paramètres de configuration</title>
+
+<varlistentry>
+ <term>selectable_object</term>
+ <listitem>
+ <simpara>Tableau associatif obligatoire contenant en valeur clé le nom des
+ paramètres de configuration et dont les valeurs attachées sont les valeurs
+ des paramètres.</simpara>
+
+
+<variablelist>
+ <varlistentry>
+ <term>object_type</term>
+ <listitem>
+ <simpara>Nom du type d'&LSobject; en référence.</simpara>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<variablelist>
+ <varlistentry>
+ <term>display_name_format</term>
+ <listitem>
+ <simpara>&LSformat; du nom d'affichage des objets lors de leur sélection.</simpara>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<variablelist>
+ <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>
+</variablelist>
+
+
+ </listitem>
+</varlistentry>
+
+</variablelist>
+
+
+</sect4>
--- /dev/null
+<sect4 id="config-LSattr_html_ssh_key">
+ <title>LSattr_html_ssh_key</title>
+ <para>Ce type est utilisé pour la gestion des attributs dont la valeur est
+ une clef publique SSH. Il permet dans l'interface, d'avoir un affichage adapté
+ à ce type de donnée.</para>
+</sect4>
--- /dev/null
+<sect4 id="config-LSattr_html_text">
+ <title>LSattr_html_text</title>
+ <para>Ce type est utilisé pour la gestion des attributs dont la valeur est
+ une chaîne de caractères devant être affichée dans un champ
+ <emphasis>input</emphasis> HTML de type <emphasis>text</emphasis>.
+ </para>
+<programlisting linenumbering="unnumbered">
+<citetitle>Structure</citetitle>...
+<![CDATA['html_options' => array(
+ 'generate_value_format' => '[LSformat pour la génération de la valeur]',
+ 'autoGenerateOnCreate' => [booléen],
+ 'autoGenerateOnModify' => [booléen],
+ 'withoutAccent' => [booleen],
+ 'replaceSpaces' => "[chaîne de remplacement]",
+ 'upperCase' => [booleen],
+ 'lowerCase' => [booleen]
+),]]>
+...
+</programlisting>
+
+<variablelist>
+<title>Paramètres de configuration</title>
+
+<varlistentry>
+ <term>generate_value_format</term>
+ <listitem>
+ <simpara>&LSformat; de la valeur utilisée pour la génération automatique de
+ celle-ci à partir des informations saisies dans le formulaire. Les valeurs
+ clefs du format sont les noms des attributs de l'objet. Seuls les attributs
+ affichés au moins en lecture seule dans le formulaire peuvent être utilisés
+ dans le format. Une seule valeur par attribut sera utilisée pour la
+ génération : celle du premier champ (dans l'ordre d'apparition dans le
+ formulaire).</simpara>
+ <important><simpara>Seuls les éléments du formulaire de type HTML
+ <emphasis>input</emphasis>, <emphasis>select</emphasis> ou
+ <emphasis>textarea</emphasis> peuvent être utilisés.</simpara></important>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>autoGenerateOnCreate</term>
+ <listitem>
+ <simpara>Activation de la génération automatique lorsque celui-ci est
+ vide au moment du chargement du formulaire.</simpara>
+ <note><simpara>La valeur par défaut est <emphasis>False</emphasis>.</simpara></note>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>autoGenerateOnModify</term>
+ <listitem>
+ <simpara>Activation de la génération automatique lors de chaque
+ modification de la valeur des champs du formulaire lié.</simpara>
+ <note><simpara>La valeur par défaut est <emphasis>False</emphasis>.</simpara></note>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>withoutAccent</term>
+ <listitem>
+ <simpara>Activation de la suppression des accents dans la chaîne de
+ caractères générée automatiquement.</simpara>
+ <note><simpara>La valeur par défaut est <emphasis>False</emphasis>.</simpara></note>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>withoutAccent</term>
+ <listitem>
+ <simpara>Activation du remplacement des accents dans la chaîne de
+ caractères générée automatiquement. La valeur de remplacement est celle du
+ paramètre.</simpara>
+ <note><simpara>La valeur par défaut est <emphasis>False</emphasis>.</simpara></note>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>upperCase</term>
+ <listitem>
+ <simpara>Activation de la mise en majuscule de la valeur générée
+ automatiquement.</simpara>
+ <note><simpara>La valeur par défaut est <emphasis>False</emphasis>.</simpara></note>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>lowerCase</term>
+ <listitem>
+ <simpara>Activation de la mise en minuscule de la valeur générée
+ automatiquement.</simpara>
+ <note><simpara>La valeur par défaut est <emphasis>False</emphasis>.</simpara></note>
+ </listitem>
+</varlistentry>
+
+</variablelist>
+</sect4>
--- /dev/null
+<sect4 id="config-LSattr_html_textarea">
+ <title>LSattr_html_textarea</title>
+ <para>Ce type est utilisé pour la gestion des attributs dont la valeur est une
+ chaine de caractères trop longue pour être saisie dans un champs HTML
+ <emphasis>imput</emphasis> de type <emphasis>text</emphasis> et est plus adapté
+ à un champ HTML <emphasis>textarea</emphasis>.</para>
+</sect4>
--- /dev/null
+<sect4 id="config-LSattr_html_url">
+ <title>LSattr_html_url</title>
+ <para>Ce type est utilisé pour la gestion des attributs dont la valeur est
+ une URL. Il propose directement dans l'interface, la possibilité d'accèder au
+ site ou encore de l'ajouter dans ses favoris (lorsque le navigateur le
+ supporte).</para>
+ <important><simpara>Ce type d'attribut HTML est dérivé du type
+ <link linkend='config-LSattr_html_text'>text</link>. Il profite donc de toutes
+ les fonctionnalités d'un champ de ce type (autogénération, ...).</simpara>
+ </important>
+</sect4>
--- /dev/null
+<sect4 id="config-LSattr_html_xmpp">
+ <title>LSattr_html_xmpp</title>
+ <para>Ce type est utilisé pour la gestion des attributs dont la valeur est
+ une adresse XMPP. Il propose directement dans l'interface, la possibilité
+ de lancer une fenêtre de dialogue avec l'interlocuteur de son client XMPP
+ préféré .</para>
+ <note><simpara>Cette fonctionnalité n'est supporté uniquement par les
+ navigateurs web supportant les URI de type <emphasis>xmpp://~~</emphasis>.
+ </simpara></note>
+ <important><simpara>Ce type d'attribut HTML est dérivé du type
+ <link linkend='config-LSattr_html_text'>text</link>. Il profite donc de toutes
+ les fonctionnalités d'un champ de ce type (autogénération, ...).</simpara>
+ </important>
+</sect4>
--- /dev/null
+<sect3 id="config-LSattr_ldap">
+ <title>Configuration des attributs LDAP</title>
+ <para>Cette section décrit les options propres à chacun des types d'attributs LDAP
+ supportés par &LdapSaisie;.</para>
+
+ &conf-LSattr_ldap_ascii;
+ &conf-LSattr_ldap_boolean;
+ &conf-LSattr_ldap_date;
+ &conf-LSattr_ldap_image;
+ &conf-LSattr_ldap_numeric;
+ &conf-LSattr_ldap_password;
+</sect3>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" ?>
+<!ENTITY conf-LSattr_ldap_ascii SYSTEM "LSattr_ldap_ascii.docbook">
+<!ENTITY conf-LSattr_ldap_boolean SYSTEM "LSattr_ldap_boolean.docbook">
+<!ENTITY conf-LSattr_ldap_date SYSTEM "LSattr_ldap_date.docbook">
+<!ENTITY conf-LSattr_ldap_image SYSTEM "LSattr_ldap_image.docbook">
+<!ENTITY conf-LSattr_ldap_numeric SYSTEM "LSattr_ldap_numeric.docbook">
+<!ENTITY conf-LSattr_ldap_password SYSTEM "LSattr_ldap_password.docbook">
--- /dev/null
+<sect4 id="config-LSattr_ldap_ascii">
+ <title>LSattr_ldap_ascii</title>
+ <para>Ce type est utilisé pour la gestion des attributs dont la valeur est
+ une chaine de caractère. Ce type est le type par défaut.</para>
+
+</sect4>
--- /dev/null
+<sect4 id="config-LSattr_ldap_boolean">
+ <title>LSattr_ldap_boolean</title>
+ <para>Ce type est utilisé pour la gestion des attributs dont la valeur est
+ une booléen. On attend ici par booléen, tout attribut ne pouvant prendre que deux
+ valeurs pré-définies correspond pour l'un à <emphasis>Oui</emphasis> et l'autre
+ à <emphasis>Non</emphasis></para>
+
+ <programlisting linenumbering="unnumbered">
+ <citetitle>Structure</citetitle>...
+<![CDATA['ldap_options' => array (
+ 'true_value' => '[valeur correspondant à Vrai]',
+ 'false_value' => '[valeur correspondant à Faux]'
+),]]>
+...
+</programlisting>
+
+<variablelist>
+<title>Paramètres de configuration</title>
+
+<varlistentry>
+ <term>true_value</term>
+ <listitem>
+ <simpara>La valeur de l'attribut correspondant à <emphasis>Vrai</emphasis>.</simpara>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>false_value</term>
+ <listitem>
+ <simpara>La valeur de l'attribut correspondant à <emphasis>Faux</emphasis>.</simpara>
+ </listitem>
+</varlistentry>
+
+</variablelist>
+
+
+</sect4>
--- /dev/null
+<sect4 id="config-LSattr_ldap_date">
+ <title>LSattr_ldap_date</title>
+ <para>Ce type est utilisé pour la gestion des attributs dont la valeur est
+ une date.</para>
+
+ <programlisting linenumbering="unnumbered">
+ <citetitle>Structure</citetitle>...
+<![CDATA['ldap_options' => array (
+ 'timestamp' => [Booléen], // Si la date est stockée au format timestamp
+ 'format' => '[Format de stockage]' // Default : "%Y%m%d%H%M%SZ"
+),]]>
+...
+</programlisting>
+
+<variablelist>
+<title>Paramètres de configuration</title>
+
+<varlistentry>
+ <term>timestamp</term>
+ <listitem>
+ <simpara>Booléen définissant si la date est stockée sous la forme d'un
+ timestamp Unix (nombre de secondes depuis le 1er janvier 1970 à 00:00:00
+ UTC).</simpara>
+ <remark>Si <parameter>timestamp</parameter> est vrai, &LdapSaisie; ne tient
+ pas compte du paramètre <parameter>format</parameter>.</remark>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>format</term>
+ <listitem>
+ <para>Format de stockage de la date dans l'annuaire. Ce format est composé à
+ partir des motifs clés gérés par la fonction <function>strftime()</function>
+ de &php;. Pour plus d'information, consulter
+ <ulink url='http://www.php.net/strftime'>la documentation officielle</ulink>.
+ <note><simpara>La valeur par défaut est <emphasis>%Y%m%d%H%M%SZ</emphasis>,
+ correspondant au format de stockage par défaut dans &openldap;. Exemple :
+ <emphasis>20091206230506Z</emphasis></simpara></note>
+ </para>
+
+ </listitem>
+</varlistentry>
+
+</variablelist>
+
+
+</sect4>
--- /dev/null
+<sect4 id="config-LSattr_ldap_image">
+ <title>LSattr_ldap_image</title>
+ <para>Ce type est utilisé pour la gestion des attributs dont la valeur est
+ une image. Pour le moment, aucun traitement particulier n'est appliqué pour le
+ stockage.</para>
+
+</sect4>
--- /dev/null
+<sect4 id="config-LSattr_ldap_numeric">
+ <title>LSattr_ldap_numeric</title>
+ <para>Ce type est utilisé pour la gestion des attributs dont la valeur est
+ un nombre. Pour le moment, aucun traitement particulier est n'appliqué pour le
+ stockage.</para>
+
+</sect4>
--- /dev/null
+<sect4 id="config-LSattr_ldap_password">
+ <title>LSattr_ldap_password</title>
+ <para>Ce type est utilisé pour la gestion des attributs dont la valeur est
+ un mot de passe.</para>
+
+ <programlisting linenumbering="unnumbered">
+ <citetitle>Structure</citetitle>...
+<![CDATA['ldap_options' => array (
+ 'encode' => '[Type d'encodage du mot de passe]',
+ 'no_random_crypt_salt' => '[Booléen]' // Désactivation de l'utilisation d'une salt aléatoire
+),]]>
+...
+</programlisting>
+
+<variablelist>
+<title>Paramètres de configuration</title>
+
+<varlistentry>
+ <term>encode</term>
+ <listitem>
+ <para>Nom du type d'encodage du mot de passe utilisé. Les types d'encodages
+ supportés sont les suivants :
+ <itemizedlist>
+ <listitem><simpara><literal>md5crypt</literal></simpara></listitem>
+ <listitem><simpara><literal>crypt</literal></simpara></listitem>
+ <listitem><simpara><literal>ext_des</literal></simpara></listitem>
+ <listitem><simpara><literal>blowfish</literal></simpara></listitem>
+ <listitem><simpara><literal>sha</literal></simpara></listitem>
+ <listitem><simpara><literal>ssha</literal></simpara></listitem>
+ <listitem><simpara><literal>smd5</literal></simpara></listitem>
+ <listitem><simpara><literal>md5</literal></simpara></listitem>
+ <listitem><simpara><literal>clear</literal></simpara></listitem>
+ </itemizedlist>
+ <note><simpara>Valeur par défaut : <literal>md5crypt</literal></simpara></note>
+ <important><simpara>Si le type d'encodage est inconnu, ou qu'il n'est pas
+ supporté par le serveur web, un message d'erreur alertera l'utilisateur et le
+ mot de passe sera stocké en clair.</simpara></important>
+ </para>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>no_random_crypt_salt</term>
+ <listitem>
+ <simpara>Désactivation de l'utilisation d'une salt générée aléatoirement au
+ profit de l'utilisation des deux premiers caractères du mot de passe.
+ Ce paramètre impacte uniquement le type de cryptage <literal>crypt</literal>.
+ </simpara>
+ </listitem>
+</varlistentry>
+
+</variablelist>
+
+
+</sect4>
--- /dev/null
+<sect3 id="config-LSattribute-check-data">
+ <title>Configuration des règles de vérification syntaxique</title>
+ <para>Cette section décrit la manière de configuer des règles de vérification
+ syntaxique sur les données des attributs. Ces règles seront utilisées pour vérifier
+ que les valeurs saisies par un utilisateur dans un formulaire sont correctes.</para>
+
+<programlisting linenumbering="unnumbered">
+<citetitle>Structure</citetitle>...
+<![CDATA['check_data' => array (
+ '[regle1]' => array(
+ 'msg' => _("[Message d'erreur]"),
+ 'params' => array(
+ // Paramètres de la règle
+ )
+ ),
+ ...
+),]]>
+...
+</programlisting>
+
+<para>Le paramètre <parameter>check_data</parameter> est un tableau associatif
+dont les clés sont les noms des règles de vérification syntaxique actives et les
+valeurs associées sont des tableaux associatifs contenant les paramètres des
+règles.</para>
+
+<variablelist>
+<title>Paramètres de configuration</title>
+
+<varlistentry>
+ <term>msg</term>
+ <listitem>
+ <simpara>Le message d'erreur à afficher lors que la règle n'est pas respectée.</simpara>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>params</term>
+ <listitem>
+ <simpara>Tableau associatif contenant les paramètres de la règle. Les
+ paramètres possibles sont propres à chaque type de règle. Les clès sont les
+ noms des paramètres et les valeurs associés, les valeurs des paramètres.</simpara>
+ </listitem>
+</varlistentry>
+
+</variablelist>
+
+&conf-LSattribute-check-data-alphanumeric;
+&conf-LSattribute-check-data-date;
+&conf-LSattribute-check-data-email;
+&conf-LSattribute-check-data-filesize;
+&conf-LSattribute-check-data-imagefile;
+&conf-LSattribute-check-data-imagesize;
+&conf-LSattribute-check-data-lettersonly;
+&conf-LSattribute-check-data-maxlength;
+&conf-LSattribute-check-data-minlength;
+&conf-LSattribute-check-data-mimetype;
+&conf-LSattribute-check-data-nonzero;
+&conf-LSattribute-check-data-nopunctuation;
+&conf-LSattribute-check-data-numeric;
+&conf-LSattribute-check-data-password;
+&conf-LSattribute-check-data-rangelength;
+&conf-LSattribute-check-data-regex;
+&conf-LSattribute-check-data-required;
+&conf-LSattribute-check-data-telephonenumber;
+
+</sect3>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" ?>
+<!ENTITY conf-LSattribute-check-data-alphanumeric SYSTEM "alphanumeric.docbook">
+<!ENTITY conf-LSattribute-check-data-date SYSTEM "date.docbook">
+<!ENTITY conf-LSattribute-check-data-email SYSTEM "email.docbook">
+<!ENTITY conf-LSattribute-check-data-filesize SYSTEM "filesize.docbook">
+<!ENTITY conf-LSattribute-check-data-imagefile SYSTEM "imagefile.docbook">
+<!ENTITY conf-LSattribute-check-data-imagesize SYSTEM "imagesize.docbook">
+<!ENTITY conf-LSattribute-check-data-lettersonly SYSTEM "lettersonly.docbook">
+<!ENTITY conf-LSattribute-check-data-maxlength SYSTEM "maxlength.docbook">
+<!ENTITY conf-LSattribute-check-data-mimetype SYSTEM "mimetype.docbook">
+<!ENTITY conf-LSattribute-check-data-minlength SYSTEM "minlength.docbook">
+<!ENTITY conf-LSattribute-check-data-nonzero SYSTEM "nonzero.docbook">
+<!ENTITY conf-LSattribute-check-data-nopunctuation SYSTEM "nopunctuation.docbook">
+<!ENTITY conf-LSattribute-check-data-numeric SYSTEM "numeric.docbook">
+<!ENTITY conf-LSattribute-check-data-password SYSTEM "password.docbook">
+<!ENTITY conf-LSattribute-check-data-rangelength SYSTEM "rangelength.docbook">
+<!ENTITY conf-LSattribute-check-data-regex SYSTEM "regex.docbook">
+<!ENTITY conf-LSattribute-check-data-required SYSTEM "required.docbook">
+<!ENTITY conf-LSattribute-check-data-telephonenumber SYSTEM "telephonenumber.docbook">
--- /dev/null
+<sect4 id="config-LSattribute-check-data-alphanumeric">
+ <title>alphanumeric</title>
+ <para>Cette règle vérifie que la valeur est une chaîne de caractères composée
+ uniquement de lettres non-accuentées, en minuscule ou en majuscule et/ou de
+ chiffres.</para>
+</sect4>
--- /dev/null
+<sect4 id="config-LSattribute-check-data-date">
+ <title>date</title>
+ <para>Cette règle vérifie que la valeur saisie est bien une date et qu'elle
+ respecte un format précis.</para>
+
+<variablelist>
+<title>Paramètres de configuration</title>
+
+<varlistentry>
+ <term>format</term>
+ <listitem>
+ <simpara>Format de la date à respecter. Ce format doit être compatible avec la
+ fonction <function>strftime()</function> de &php;.
+ <ulink url='http://www.php.net/strftime'>Voir la documentation de la
+ fonction</ulink></simpara>
+ </listitem>
+</varlistentry>
+
+</variablelist>
+
+</sect4>
--- /dev/null
+<sect4 id="config-LSattribute-check-data-email">
+ <title>email</title>
+ <para>Cette règle vérifie que la valeur saisie est bien une adresse e-mail. Il
+ est possible de vérifier si elle appartient bien à un domaine en particulier ou
+ encore de vérifier si le domaine existe et qu'il possède un serveur de mail(MX).</para>
+
+<variablelist>
+<title>Paramètres de configuration</title>
+
+<varlistentry>
+ <term>domain</term>
+ <listitem>
+ <simpara>Nom de domaine obligatoire. Ce paramètre peut être une simple chaine
+ correspondant au domaine ou un tableau listant plusieurs domaines
+ possibles.</simpara>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>checkDomain</term>
+ <listitem>
+ <simpara>Booléen définissant si le domaine de l'adresse mail doit être
+ validé.</simpara>
+ </listitem>
+</varlistentry>
+
+</variablelist>
+
+</sect4>
--- /dev/null
+<sect4 id="config-LSattribute-check-data-filesize">
+ <title>filesize</title>
+ <para>Cette règle vérifie que la valeur est un fichier dont la taille en octets
+ respecte les limites passées en paramètre.</para>
+
+<variablelist>
+<title>Paramètres de configuration</title>
+
+<varlistentry>
+ <term>minSize</term>
+ <listitem>
+ <simpara>Taille minimum.</simpara>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>maxSize</term>
+ <listitem>
+ <simpara>Taille maximum.</simpara>
+ </listitem>
+</varlistentry>
+
+</variablelist>
+
+</sect4>
--- /dev/null
+<sect4 id="config-LSattribute-check-data-imagefile">
+ <title>imagefile</title>
+ <para>Cette règle vérifie que la valeur est bien un fichier et que le type mime
+ de celui-ci est bien une image. Cette règle utilise la règle mimetype en spécifiant
+ si l'utilisateur ne le fait pas que le type mime doit respecter la regex suivante :
+ <literal>/image\/.*/</literal></para>
+
+ <important><simpara>Cette règle est une simple interface à la règle mimetype,
+ il est donc possible de passer d'autres paramètres propres à ce type.</simpara>
+ </important>
+
+</sect4>
--- /dev/null
+<sect4 id="config-LSattribute-check-data-imagesize">
+ <title>imagesize</title>
+ <para>Cette règle vérifie que la valeur est une image dont la taille en pixels
+ respecte les limites passées en paramètre.</para>
+
+<variablelist>
+<title>Paramètres de configuration</title>
+
+<varlistentry>
+ <term>minWidth</term>
+ <listitem>
+ <simpara>Largeur minimum.</simpara>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>maxWitdh</term>
+ <listitem>
+ <simpara>Largeur maximum.</simpara>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>minHeight</term>
+ <listitem>
+ <simpara>Hauteur minimum.</simpara>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>maxHeight</term>
+ <listitem>
+ <simpara>Hauteur maximum.</simpara>
+ </listitem>
+</varlistentry>
+
+</variablelist>
+
+</sect4>
--- /dev/null
+<sect4 id="config-LSattribute-check-data-lettersonly">
+ <title>lettersonly</title>
+ <para>Cette règle vérifie que la valeur est une chaîne de caractères composée
+ uniquement de lettres non-accuentées, en minuscule ou en majuscule.</para>
+</sect4>
--- /dev/null
+<sect4 id="config-LSattribute-check-data-maxlength">
+ <title>maxlength</title>
+ <para>Cette règle vérifie que la valeur saisie est une chaine de caractères
+ dont la longueur est inférieur ou égale à la valeur passées en paramètre.</para>
+
+<variablelist>
+<title>Paramêtres de configuration</title>
+
+<varlistentry>
+ <term>limit</term>
+ <listitem>
+ <simpara>Limite supérieur (ou égale) de la longueur de la chaîne de caratères.</simpara>
+ </listitem>
+</varlistentry>
+
+</variablelist>
+
+</sect4>
--- /dev/null
+<sect4 id="config-LSattribute-check-data-mimetype">
+ <title>mimetype</title>
+ <para>Cette règle vérifie que la valeur est bien un fichier et que le type mime
+ de celui-ci est correct. Il est possible de vérifier si le type mime fait partie
+ d'une liste ou encore s'il valide une expression régulière.</para>
+
+<variablelist>
+<title>Paramêtres de configuration</title>
+
+<varlistentry>
+ <term>mimeType</term>
+ <listitem>
+ <simpara>Type mime obligatoire. Ce paramètre peut être une simple chaine
+ correspondant au type mime ou un tableau listant plusieurs possibilités.</simpara>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>mimeTypeRegEx</term>
+ <listitem>
+ <simpara>Expression régulière que doit respecter le type mime.</simpara>
+ </listitem>
+</varlistentry>
+
+</variablelist>
+
+</sect4>
--- /dev/null
+<sect4 id="config-LSattribute-check-data-minlength">
+ <title>minlength</title>
+ <para>Cette règle vérifie que la valeur saisie est une chaine de caractères
+ dont la longueur est supérieur ou égale à la valeur passée en paramètre.</para>
+
+<variablelist>
+<title>Paramètres de configuration</title>
+
+<varlistentry>
+ <term>limit</term>
+ <listitem>
+ <simpara>Limite inférieure (ou égale) de la longueur de la chaîne de caratères.</simpara>
+ </listitem>
+</varlistentry>
+
+</variablelist>
+
+</sect4>
--- /dev/null
+<sect4 id="config-LSattribute-check-data-nonzero">
+ <title>nonzero</title>
+ <para>Cette régle vérifie que la valeur est une valeur numérique non nulle.</para>
+</sect4>
--- /dev/null
+<sect4 id="config-LSattribute-check-data-nopunctuation">
+ <title>nopunctuation</title>
+ <para>Cette régle vérifie que la valeur est une chaîne de caractères ne contenant
+ pas de signe de ponctuation. Les caractères suivants sont actuellement exclus :
+ <literal><![CDATA[( ) . \ / \ * \ ^ \ ? # ! @ $ % + = , " ' > < ~ [ ] { }]]></literal></para>
+</sect4>
--- /dev/null
+<sect4 id="config-LSattribute-check-data-numeric">
+ <title>numeric</title>
+ <para>Cette régle vérifie que la valeur est une valeur numérique.</para>
+</sect4>
--- /dev/null
+<sect4 id="config-LSattribute-check-data-password">
+ <title>password</title>
+ <para>Cette règle vérifie que la valeur est un mot de passe respectant la politique
+ de sécurité définie par les paramètres de la règle.</para>
+
+<variablelist>
+<title>Paramètres de configuration</title>
+
+<varlistentry>
+ <term>minlength</term>
+ <listitem>
+ <simpara>Longueur minimale du mot de passe.</simpara>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>maxlength</term>
+ <listitem>
+ <simpara>Longueur maximale du mot de passe.</simpara>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>prohibitedValues</term>
+ <listitem>
+ <simpara>Tableau de valeurs interdites.</simpara>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>regex</term>
+ <listitem>
+ <simpara>Expression(s) régulière(s) que doit respecter le mot de passe. Ce
+ paramètre peut être une expression régulière ou un tableau d'expressions
+ régulières.</simpara>
+ </listitem>
+</varlistentry>
+
+</variablelist>
+
+</sect4>
--- /dev/null
+<sect4 id="config-LSattribute-check-data-rangelength">
+ <title>rangelength</title>
+ <para>Cette règle vérifie que la valeur saisie est une chaine de caractères
+ dont la longueur est comprise entre deux valeurs passées en paramètre.</para>
+
+<variablelist>
+<title>Paramètre de configuration</title>
+
+<varlistentry>
+ <term>limits</term>
+ <listitem>
+ <simpara>Tableau contenant deux valeurs, la première étant la limite inférieure
+ ou égale et la seconde la limite supérieure ou égale.</simpara>
+ </listitem>
+</varlistentry>
+
+</variablelist>
+
+</sect4>
--- /dev/null
+<sect4 id="config-LSattribute-check-data-regex">
+ <title>regex</title>
+ <para>Cette règle vérifie que la valeur saisie respecte bien l'expression
+ régulière passée en paramètre.</para>
+
+<variablelist>
+<title>Paramètres de configuration</title>
+
+<varlistentry>
+ <term>regex</term>
+ <listitem>
+ <simpara>L'expression régulière devant être respectée.</simpara>
+ </listitem>
+</varlistentry>
+
+</variablelist>
+
+</sect4>
--- /dev/null
+<sect4 id="config-LSattribute-check-data-required">
+ <title>required</title>
+ <para>Cette régle vérifie que la valeur n'est pas une chaîne de caractères de
+ longueur nulle.</para>
+</sect4>
--- /dev/null
+<sect4 id="config-LSattribute-check-data-telephonenumber">
+ <title>telephonenumber</title>
+ <para>Cette régle vérifie que la valeur est un numéro de téléphone français.
+ Celui-ci doit respecter l'expression regulière suivante :
+ <literal>/^(01|02|03|04|05|06|08|09)[0-9]{8}$/</literal></para>
+</sect4>
--- /dev/null
+<sect3 id="config-LSattribute-triggers">
+ <title>Déclencheurs</title>
+ <para>Cette section décrit la manière de paramétrer des déclencheurs afin que
+ &LdapSaisie; exécute durant ses processus, et à des moments bien précis des
+ traitements d'un &LSattribute;, des fonctions que vous pourrez développer vous
+ même. De plus, le résultat de l'exécution de vos fonctions pourra influer
+ sur le déroulement des processus.</para>
+
+ <para>Actuellement, les évènements suivant sont gérés :
+
+<informaltable>
+ <tgroup cols="3"> <!-- on décrit le nombre de colonnes -->
+ <thead> <!-- on passe au "header" du tableau -->
+ <row>
+ <entry>Nom</entry>
+ <entry>Description</entry>
+ <entry>Bloquant</entry>
+ </row>
+ </thead>
+ <tbody> <!-- et on remplit les lignes -->
+ <row>
+ <entry><literal>before_create</literal></entry>
+ <entry><simpara>Avant la création du LSobject, lorsque l'attribut a au
+ moins une valeur.</simpara></entry>
+ <entry><simpara>Oui</simpara></entry>
+ </row>
+ <row>
+ <entry><literal>after_create</literal></entry>
+ <entry><simpara>Après la création du LSobject, lorsque l'attribut a au
+ moins une valeur.</simpara></entry>
+ <entry><simpara>Non</simpara></entry>
+ </row>
+ <row>
+ <entry><literal>before_modify</literal></entry>
+ <entry><simpara>Avant la modification de la valeur de l'attribut.</simpara></entry>
+ <entry><simpara>Oui</simpara></entry>
+ </row>
+ <row>
+ <entry><literal>after_modify</literal></entry>
+ <entry><simpara>Après la modification de la valeur de l'attribut.</simpara></entry>
+ <entry><simpara>Non</simpara></entry>
+ </row>
+ <row>
+ <entry><literal>before_delete</literal></entry>
+ <entry><simpara>Avant la suppression du LSobject contenant l'attribut.</simpara></entry>
+ <entry><simpara>Oui</simpara></entry>
+ </row>
+ <row>
+ <entry><literal>after_delete</literal></entry>
+ <entry><simpara>Après la suppression du LSobject contenant l'attribut.</simpara></entry>
+ <entry><simpara>Non</simpara></entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<note><simpara>Si un événement est dit <emphasis>bloquant</emphasis>, lors de
+l'exécution des actions liées, si une des fonctions retourne <literal>false
+</literal>, le processus s'arrêtera.</simpara></note>
+ </para>
+ <sect4>
+ <title>Configuration</title>
+ <para>La configuration des déclencheurs se fait dans la définition des
+ &LSattributes;. Par exemple, pour définir les fonctions à exécuter après la
+ modification de la valeur de l'attribut <emphasis>mail</emphasis> du type de
+ &LSobject; <emphasis>LSeepeople</emphasis>, c'est à dire lors de leur évenement
+ <literal>after_modify</literal>, il faut définir la variable suivante :
+ <programlisting linenumbering="unnumbered"><![CDATA[$GLOBALS['LSobjects']['LSeepeople']['attrs']['mail']['after_modify']]]></programlisting>
+ Cette variable peut contenir soit une chaine de caractères correspondant au
+ nom de la fonction à exécuter, soit un tableau de chaînes de caractères
+ correspondant aux noms des fonctions à exécuter.</para>
+ </sect4>
+ <sect4>
+ <title>Ecriture d'une fonction</title>
+ <para>Une fonction exécuté par un déclencheur d'un LSattribute se déclare de
+ la manière suivante :
+ <programlisting linenumbering="unnumbered"><![CDATA[
+/*
+ * Ma fonction à exécuter lors de l'évènement [event]
+ *
+ * Paramètre :
+ * - $object : Le LSobject contenant le LSattribute sur lequel l'évenement
+ * survient
+ *
+ * Valeurs retournées :
+ * - True : Tout s'est bien passé
+ * - False : Une erreur est survenue ou la fonction souhaite bloquer le
+ * processus lors d'un évènement bloquant.
+ */
+function maFonction ($object) {
+
+ // Actions
+
+}
+ ]]></programlisting>
+Cette fonction doit prendre pour seul paramètre, le LSobject contenant le
+LSattribute sur lequel l'évenement survient et doit retourner soit
+<literal>True</literal> si tout s'est bien passé, soit <literal>False</literal>
+en cas de problème. Dans le cas d'un événement bloquant, si la fonction retourne
+<literal>False</literal>, le processus est arrêté.</para>
+ </sect4>
+</sect3>
--- /dev/null
+<sect3 id="config-LSattribute-validation">
+ <title>Configuration des règles de vérification d'intégrité</title>
+ <para>Cette section décrit la manière de configurer des règles de vérification
+ d'intégrité sur les données des attributs. Il est possible de valider la valeur
+ de l'attribut par l'intermédiraire de la vérification de résultat d'une
+ recherche paramètrable dans l'annuaire ou encore d'appeler une fonction de
+ votre choix pour effectuer la vérification voulue.</para>
+
+<sect4 id='config-LSattribute-validation-search'>
+ <title>Validation par l'analyse du résultat d'une recherche dans l'annuaire</title>
+ <para>Une telle règle permet de vérifier si les valeurs des attributs n'entrent
+ pas en conflit avec d'autres objets de l'annuaire. Ce test peut également
+ permetre de vérifier si les valeurs devant faire référence à d'autres objets
+ de l'annuaire sont correctes.</para>
+
+<programlisting linenumbering="unnumbered">
+<citetitle>Structure</citetitle>...
+<![CDATA['validation' => array (
+ ...
+ array(
+ 'msg' => _("[LSformat du message d'erreur]"),
+ 'filter' => '[LSformat du filtre de la recherche]',
+ 'object_type' => '[Type d'LSobject recherché]',
+ 'basedn' => '[BaseDn de la recherche]',
+ 'scope' => '[Scope de la recherche]',
+ 'result' => '[Résultat positif de la recherche]'
+ ),
+ ...
+),]]>
+...
+</programlisting>
+
+<variablelist>
+<title>Paramètres de configuration</title>
+
+<varlistentry>
+ <term>msg</term>
+ <listitem>
+ <simpara>&LSformat; du message d'erreur à afficher lorsque la validation
+ échoue. Ce format est construit avec les valeurs du &LSobject;.</simpara>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>filter</term>
+ <listitem>
+ <simpara>&LSformat; du filtre de la recherche. Ce format peut être construit
+ avec toutes les valeurs du LSobject (attributs, DN, ...) et également avec
+ la valeur à valider en utilisant pour mot clé <emphasis>%{val}
+ </emphasis>.</simpara>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>object_type</term>
+ <listitem>
+ <simpara>Le nom du type d'LSobject recherché. Si un type est spécifié, le
+ filtre de la recherche sera une combinaison de celui du paramètre <parameter>
+ filter</parameter> et du filtre composé à partir des <emphasis>objectClass
+ </emphasis> du type d'&LSobject;. <emphasis>Paramètre facultatif.</emphasis></simpara>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>basedn</term>
+ <listitem>
+ <simpara>Le <emphasis>basedn</emphasis> de la recherche. <emphasis>Paramètre
+ facultatif.</emphasis></simpara>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>scope</term>
+ <listitem>
+ <simpara>Le <emphasis>scope</emphasis> de la recherche. <emphasis>Paramètre
+ facultatif.</emphasis></simpara>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>result</term>
+ <listitem>
+ <simpara>Le résultat de la recherche : si <parameter>result</parameter> vaut
+ zéro, la recherche ne devra retourner aucun objet pour que la validation soit
+ réussie. Sinon, la recherche devra retourner au moins un objet.</simpara>
+ </listitem>
+</varlistentry>
+
+</variablelist>
+
+</sect4>
+
+<sect4 id='config-LSattribute-validation-function'>
+ <title>Validation par l'exécution d'une fonction</title>
+ <para>Il est possible d'effectuer la validation de l'attribut par l'exécution
+ d'une fonction de votre choix. Il lui sera passé en paramètre le LSobject
+ complet. Si la fonction ne retourne pas <emphasis>true</emphasis>, la
+ validation échouera.</para>
+
+<programlisting linenumbering="unnumbered">
+<citetitle>Structure</citetitle>...
+<![CDATA['validation' => array (
+ ..
+ array(
+ 'msg' => _("[LSformat du message d'erreur]"),
+ 'function' => '[Nom de la fonction de validation]'
+ ),
+ ...
+),]]>
+...
+</programlisting>
+
+<variablelist>
+<title>Paramètres de configuration</title>
+
+<varlistentry>
+ <term>msg</term>
+ <listitem>
+ <simpara>&LSformat; du message d'erreur à afficher lorsque la validation
+ échoue. Ce format est construit avec les valeurs du &LSobject;.</simpara>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>function</term>
+ <listitem>
+ <simpara>Le nom de la fonction à exécuter. Si cette fonction n'existe pas,
+ un message d'erreur sera affiché et la validation échouera.</simpara>
+ </listitem>
+</varlistentry>
+
+</variablelist>
+
+</sect4>
+
+
+</sect3>
--- /dev/null
+<sect2 id='config-LSformat'>
+<title>Format paramétrable</title>
+<para>Un <emphasis>format paramétrable</emphasis> est une chaîne de caractères
+contenant des mots clés formés comme dans l'exemple suivant :
+<programlisting linenumbering="unnumbered">%{[nom du mot clé][:A][:B]}</programlisting>
+Le nom du mot clé peut contenir des lettres de "a" à "z", de "A" à "Z" et des
+chiffres de 0 à 9. Ces mots clés seront remplacés par les valeurs passées en
+paramètres et liées au contexte d'utilisation. Les paramètres <emphasis>:A</emphasis> et
+<emphasis>:B</emphasis> permettent d'extraire une partie de la chaîne complète
+avant la substitution.</para>
+
+<para>Le paramètre <varname>A</varname> correspond, lorsque
+<varname>B</varname> n'est pas défini, au nombre maximum de caractères à
+extraire de la chaîne de substitution. <emphasis>A</emphasis> doit être un entier
+dont le signe influ, comme expliqué ci-dessous :
+<itemizedlist>
+ <listitem>
+ <simpara>Si <varname>A</varname> est positif, les <varname>A</varname>
+ premiers caractères de la chaîne de substitution seront extraits.</simpara>
+ </listitem>
+
+ <listitem>
+ <simpara>Si <varname>A</varname> est négatif, les <varname>|A|</varname>
+ derniers caractères de la chaîne de substitution seront extraits.</simpara>
+ </listitem>
+</itemizedlist>
+Lorsque le paramètre <varname>B</varname> est défini,
+<varname>A</varname> correspond au rang du premier caractère à partir duquel la
+chaîne de substitution sera découpée et <varname>B</varname> le nombre maximum
+de caractères à extraire. Le signe de <varname>B</varname> influera comme expliqué
+dans le premier cas.
+</para>
+<important><simpara>Lorsque qu'une seule valeur clé est disponible pour la
+substitution, le nom du mot clé n'importe pas. Tous les mots clés trouvés dans
+le format seront remplacés par cette seule valeur.</simpara></important>
+</sect2>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" ?>
+<sect1 id='config-LSobject'>
+ <title>Configuration LSobject</title>
+ <para>
+ Cette partie décrit la manière de configurer les différents types de LSobjets
+ manipulés par &LdapSaisie;.
+ </para>
+
+ <para>La configuration des &LSobjects; est stockée dans le dossier <emphasis>
+ /conf/LSobjects</emphasis>. Dans ce dossier, on retrouve un fichier par type
+ d'&LSobject;, nommé de la manière suivante :
+ <programlisting>config.LSobjects.[nom du type d'LSobject].php</programlisting>
+
+ Ce fichier contient la déclaration de la configuration du type d'&LSobject;
+ qui est stocké dans la variable globale
+ <varname>$GLOBALS['LSobjects']['[nom du type d'LSobject]']</varname>.
+ </para>
+
+ <programlisting linenumbering="unnumbered">
+ <citetitle>Structure</citetitle>...
+<![CDATA[$GLOBALS['LSobjects']['[nom du type d'LSobject]'] = array (
+ 'objectclass' => array(
+ 'objetclass1',
+ 'objetclass2',
+ ...
+ ),
+ 'rdn' => 'attr1',
+
+ 'container_dn' => 'ou=people',
+ 'container_auto_create' => array(
+ // Information des configurations pour la création du conteneur du type d'LSobjet
+ // lors de la création nouveau subDn
+ ),
+
+ 'before_modify' => 'function1',
+ 'after_modify' => 'function2',
+ 'after_create' => 'function3',
+ 'after_delete' => 'function4',
+
+ 'label' => _('objet1'),
+
+ 'display_name_format' => '[format]',
+ 'orderby' => 'displayName', // Valeurs possibles : 'displayName' ou 'subDn'
+
+ // LSrelation
+ 'LSrelation' => array(
+ // Configuration des LSrelations entre ce type d'objet et les autres
+ ),
+
+ // LSform
+ 'LSform' => array (
+ // Configuration des formulaires de l'objet
+ ), // fin LSform
+
+ // Attributs
+ 'attrs' => array (
+ // Configuration des attributs du type d'LSobjet
+ )
+);]]>
+...
+</programlisting>
+
+<variablelist>
+<title>Paramètres de configuration</title>
+
+<varlistentry>
+ <term>objectclass</term>
+ <listitem>
+ <simpara>La liste des <emphasis>objectclass</emphasis> des objets.</simpara>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>rdn</term>
+ <listitem>
+ <simpara>Nom de l'attribut correspondant au <emphasis>RDN</emphasis> des
+ objets LDAP.</simpara>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>container_dn</term>
+ <listitem>
+ <simpara>Elément pour construire le <emphasis>basedn</emphasis> de stockage
+ de ce type d'objet. Par exemple, si le <emphasis>basedn</emphasis> de
+ l'annuaire est <literal>o=ls</literal> et que les objets
+ <emphasis>utilisateurs</emphasis> sont stockés dans la branche de l'annuaire
+ <literal>ou=people,o=ls</literal>, alors <parameter>container_dn</parameter>
+ devra valoir <literal>ou=people</literal>.</simpara>
+ <remark>Lorsque l'annuaire possède des &subDn;, les objets seront cherchés
+ dans le <emphasis>basedn</emphasis> résultant de la concaténation du paramètre
+ <parameter>container_dn</parameter>, d'une virgule et du
+ <emphasis>basedn</emphasis> correspondant au &subDn; courant.</remark>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>container_auto_create</term>
+ <listitem>
+ <simpara>Tableau associatif contenant les paramètres de configuration
+ nécessaires à la création des <parameter>container_dn</parameter> dans les
+ nouveaux objets utilisés comme &subDn;.
+ <link linkend="config-LSobject-container_auto_create">Voir la section
+ concernée</link>.</simpara>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>before_modify</term>
+ <listitem>
+ <simpara>Chaîne de caractères correspondant au nom d'une fonction qui sera
+ exécutée avant la modification d'un objet.
+ <link linkend="config-LSobject-triggers">Voir la section concernée</link>.
+ </simpara>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>after_modify</term>
+ <listitem>
+ <simpara>Chaîne de caractères correspondant au nom d'une fonction qui sera
+ exécutée après la modification d'un objet.
+ <link linkend="config-LSobject-triggers">Voir la section concernée</link>.
+ </simpara>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>after_create</term>
+ <listitem>
+ <simpara>Chaîne de caractères correspondant au nom d'une fonction qui sera
+ exécutée après la création d'un objet.
+ <link linkend="config-LSobject-triggers">Voir la section concernée</link>.
+ </simpara>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>after_delete</term>
+ <listitem>
+ <simpara>Chaîne de caractères correspondant au nom d'une fonction qui sera
+ exécutée après la suppression d'un objet.
+ <link linkend="config-LSobject-triggers">Voir la section concernée</link>.
+ </simpara>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>label</term>
+ <listitem>
+ <simpara>Nom générique au pluriel qualifiant le type d'objet. Exemple :
+ <emphasis>Utilisateurs</emphasis>.</simpara>
+ <important><para>Si vous utilisez la fonctionnalité d'internationalisation, il faut
+ utiliser ici la fonction de <application>gettext</application> pour que le
+ texte soit traduit si vous n'êtes pas dans la langue de référence. Exemple :
+ <programlisting>_('Utilisateurs')</programlisting></para></important>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>display_name_format</term>
+ <listitem>
+ <simpara><link linkend="config-LSformat">Format paramètrable</link> du nom
+ des objets composés à partir des valeurs d'affichage des attributs de l'objet.
+ </simpara>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>orderby</term>
+ <listitem>
+ <simpara>Paramétrage du tri par défaut des objets lors de l'affiche du
+ résultat d'une recherche.</simpara>
+ <simpara>Valeurs possibles : <literal>displayName</literal> ou <literal>subDn</literal></simpara>
+ <simpara>(Paramètre facultatif)</simpara>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>LSrelation</term>
+ <listitem>
+ <simpara>Tableau associatif contenant les paramètres de configuration
+ des &LSrelations;. <link linkend="config-LSobject-LSrelation">Voir la section
+ concernée</link>.</simpara>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>LSform</term>
+ <listitem>
+ <simpara>Tableau associatif contenant les paramètres de configuration
+ des &LSforms; des &LSobjects;. <link linkend="config-LSobject-LSform">Voir
+ la section concernée</link>.</simpara>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>LSsearch</term>
+ <listitem>
+ <simpara>Tableau associatif contenant les paramètres de configuration
+ des recherches de &LSobject; de ce type dans l'annuaire.
+ <link linkend="config-LSobject-LSsearch">Voir la section concernée</link>.
+ </simpara>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>attrs</term>
+ <listitem>
+ <simpara>Tableau associatif contenant les paramètres de configuration
+ des attributs des objets. <link linkend="config-LSattribute">Voir
+ la section concernée</link>.</simpara>
+ </listitem>
+</varlistentry>
+
+</variablelist>
+
+ &conf-LSattribute;
+ &conf-LSobject-container_auto_create;
+ &conf-LSobject-triggers;
+ &conf-LSobject-LSrelation;
+ &conf-LSobject-LSform;
+ &conf-LSobject-LSsearch;
+
+</sect1>
--- /dev/null
+<sect2 id="config-LSobject-LSform">
+ <title>LSform</title>
+ <para>Cette section décrit la manière de paramétrer les formulaires d'&LdapSaisie;
+ pour un type &LSobject; donné. Pour chaque type d'&LSobject;, il faut configurer
+ plusieurs formulaires correspondant aux vues gérées par &LdapSaisie; (création,
+ modification, ...). Les formulaires se configurent par plusieurs biais :
+
+<itemizedlist>
+
+<listitem>
+<para>Via la configuration des attributs : La configuration des attributs
+détermine la présence ou non des attributs dans les formulaires. Elle permet
+également de définir si on souhaite bloquer leur présence en lecture seulement.
+</para>
+</listitem>
+
+<listitem>
+<para>Via les droits de l'utilisateur connecté sur les attributs de l'objet
+à éditer : en fonction des droits de l'utilisateur sur un attribut, celui-ci
+apparaîtra en lecture-écriture ou en lecture uniquement voir pas du tout.
+</para>
+</listitem>
+
+<listitem>
+<para>Via la configuration au niveau de chaque type d'&LSobject; : il y est
+possible de définir le comportement globale du formulaire comme la validation
+via Ajax ou encore la disposition logique des attributs dans le formulaire.</para>
+
+<programlisting>
+<citetitle>Structure</citetitle>
+<![CDATA[$GLOBALS['LSobjects']['[nom du type d'LSobject]']['LSform'] = array (
+ 'ajaxSubmit' => [booléen],
+ 'layout' => array (
+ // Configuration de la disposition logique des attributs
+ )
+);]]>
+</programlisting>
+
+<variablelist>
+<title>Paramètres de configuration</title>
+
+<varlistentry>
+ <term>ajaxSubmit</term>
+ <listitem>
+ <simpara>Booléen définissant si le formulaire sera envoyé via une requête
+ Ajax plutôt qu'à travers un rafraîchissement de la page. Par défaut :
+ <emphasis>VRAI</emphasis>.</simpara>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>layout</term>
+ <listitem>
+ <simpara>Tableau contenant la configuration de l'affichage du formulaire :
+ il est possible de définir la disposition des attributs dans le formulaire
+ en les regroupant dans des onglets et en les faisant apparaître dans un
+ ordre logique.<link linkend='config-LSobject-LSform-layout'>Voir la section
+ concernée.</link></simpara>
+ </listitem>
+</varlistentry>
+
+</variablelist>
+
+</listitem>
+
+</itemizedlist>
+</para>
+
+<sect3 id="config-LSobject-LSform-layout">
+<title>Configuration de l'affichage</title>
+
+<para>La configuration des <emphasis>layout</emphasis> se situe dans la
+configuration des &LSobjects;, dans la variable <varname>layout</varname>
+(<emphasis>$GLOBALS['LSobjects']['[nom du type d'LSobject]']['LSform']['layout']</emphasis>).
+Cette variable est un tableau associatif dont la clé est l'identifiant de l'onglet
+et dont la valeur associée est la configuration de l'onglet.
+<programlisting>
+<citetitle>Structure</citetitle>
+<![CDATA[$GLOBALS['LSobjects']['[nom du type d'LSobject]']['LSform']['layout'] = array (
+ 'onglet1' => array(
+ 'label' => '[label de l'onglet]',
+ 'img' => 1, // Valeur possible 1 ou 0
+ 'args' => array (
+ 'arg1',
+ 'arg2',
+ ...
+ )
+ ),
+ ...
+);]]>
+</programlisting>
+
+<variablelist>
+<title>Paramètres de configuration</title>
+
+<varlistentry>
+ <term>label</term>
+ <listitem>
+ <simpara>Le label de l'onglet.</simpara>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>img</term>
+ <listitem>
+ <simpara>Affiche ou non l'image d'un éventuel attribut de type HTML
+ <link linkend="config-LSattr_html_image">LSattr_html_image</link>.</simpara>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>args</term>
+ <listitem>
+ <simpara>Tableau associatif contenant une liste ordonnée des attributs qui
+ apparaîtront dans l'onglet.</simpara>
+ </listitem>
+</varlistentry>
+
+</variablelist>
+</para>
+<important><simpara>Lorsqu'un <emphasis>layout</emphasis> est défini, celui-ci
+est <emphasis>"suivi à la lettre"</emphasis> pour l'affichage du &LSform;.
+Ainsi, si un attribut est défini dans la configuration de l'objet comme présent
+dans le &LSform; courant, mais que celui-ci n'est pas présent dans le <emphasis>
+layout</emphasis>, il ne sera pas du tout affiché.</simpara></important>
+</sect3>
+
+</sect2>
--- /dev/null
+<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>
+
+<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]',
+ 'list_function' => '[méthode1]',
+ 'getkeyvalue_function' => '[methode2]',
+ 'update_function' => '[methode3]',
+ 'remove_function' => '[methode4]',
+ 'rename_function' => '[methode5]',
+ '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.</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.</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é.</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.</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é.</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.</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>
--- /dev/null
+<sect2 id="config-LSobject-LSsearch">
+ <title>LSsearch</title>
+ <para>Cette section décrit la manière de paramétrer les recherches dans
+ l'annuaire pour un type d'&LSobject; donné.</para>
+
+<para>La configuration des <emphasis>LSsearch</emphasis> se situe dans la
+configuration des &LSobjects;, dans la variable <varname>LSsearch</varname>
+(<emphasis>$GLOBALS['LSobjects']['[nom du type d'LSobject]']['LSsearch']</emphasis>).
+<programlisting>
+<citetitle>Structure</citetitle>
+<![CDATA[$GLOBALS['LSobjects']['[nom du type d'LSobject]']['LSsearch'] = array (
+ 'attrs' => array(
+ 'attr1',
+ 'attr2',
+ ...
+ ),
+ ...
+);]]>
+</programlisting>
+
+<variablelist>
+<title>Paramètres de configuration</title>
+
+<varlistentry>
+ <term>attrs</term>
+ <listitem>
+ <para>Tableau listant les attributs pouvant être utilisés dans les filtres
+ de recherche LDAP employés par &LdapSaisie;. Lorsqu'un motif de recherche est
+ passé par l'utilisateur, &LdapSaisie; composera un filtre LDAP à partir de
+ cette liste.</para>
+ <para>Lors d'une recherche non-approximative, le filtre de recherche sera
+ composé de la manière suivante :
+ <programlisting>(|(attr1=*motif*)(attr2=*motif*)...)</programlisting></para>
+ <para>Lors d'une recherche approximative, le filtre de recherche sera
+ composé de la manière suivante :
+ <programlisting>(|(attr1=~motif)(attr2~=motif)...)</programlisting></para>
+ <important><simpara>Ces filtres, une fois composés, sont insérés dans un autre,
+ filtrant en plus sur les <emphasis>ObjectClass</emphasis> du type
+ d'&LSobject; de la manière suivante :</simpara>
+ <programlisting><![CDATA[(& (&(objectclass=oc1)(objectclass=oc2)) (filtre) )]]></programlisting></important>
+ </listitem>
+</varlistentry>
+
+</variablelist>
+</para>
+
+</sect2>
--- /dev/null
+<sect2 id="config-LSobject-container_auto_create">
+ <title>Création automatique du conteneur des LSobjets dans un subDn</title>
+ <para>Cette section décrit la manière de configurer la création automatique
+ des conteneurs des LSobjets. Si le <emphasis>basedn</emphasis> correspondant
+ à la branche de stockage des &LSobjects; n'existe pas, &LdapSaisie; tentera de
+ le créer à partir de la configuration de la variable
+ <varname>$GLOBALS['LSobjects']['[nom du type d'LSobject]']['container_auto_create']</varname>.
+
+<programlisting>
+<citetitle>Structure</citetitle>
+<![CDATA[$GLOBALS['LSobjects']['[nom du type d'LSobject]']['container_auto_create'] = array (
+ 'objectclass' => array(
+ 'objectclass1',
+ 'objectclass2',
+ ...
+ ),
+ 'attrs' => array(
+ 'attr1' => 'val1',
+ 'attr2' => array(
+ 'val2',
+ 'val3',
+ ...
+ ),
+ ...
+ )
+);]]>
+</programlisting>
+
+<variablelist>
+<title>Paramètres de configuration</title>
+
+<varlistentry>
+ <term>objectclass</term>
+ <listitem>
+ <simpara>La liste des <emphasis>objectclass</emphasis> de l'objet conteneur.</simpara>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>attrs</term>
+ <listitem>
+ <simpara>Un tableau associatif dont les clés sont les noms des attributs de
+ l'objet conteneur à définir et dont les valeurs associées sont la/les valeur(s)
+ de ces attributs.</simpara>
+ </listitem>
+</varlistentry>
+
+</variablelist>
+
+</para>
+
+</sect2>
--- /dev/null
+<sect2 id="config-LSobject-triggers">
+ <title>Déclencheurs</title>
+ <para>Cette section décrit la manière de paramétrer des déclencheurs afin que
+ &LdapSaisie; exécute durant ses processus, et à des moments bien précis des
+ traitements d'un &LSobject;, des fonctions que vous pourrez développer vous
+ même. De plus, le résultat de l'exécution de vos fonctions pourra influer
+ sur le déroulement des processus.</para>
+
+ <para>Actuellement, les évenements suivant sont gérés :
+
+<informaltable>
+ <tgroup cols="3"> <!-- on décrit le nombre de colonnes -->
+ <thead> <!-- on passe au "header" du tableau -->
+ <row>
+ <entry>Nom</entry>
+ <entry>Description</entry>
+ <entry>Bloquant</entry>
+ </row>
+ </thead>
+ <tbody> <!-- et on remplit les lignes -->
+ <row>
+ <entry><literal>before_create</literal></entry>
+ <entry><simpara>Avant la création du LSobject.</simpara></entry>
+ <entry><simpara>Oui</simpara></entry>
+ </row>
+ <row>
+ <entry><literal>after_create</literal></entry>
+ <entry><simpara>Après la création du LSobject.</simpara></entry>
+ <entry><simpara>Non</simpara></entry>
+ </row>
+ <row>
+ <entry><literal>before_modify</literal></entry>
+ <entry><simpara>Avant la modification du LSobject</simpara></entry>
+ <entry><simpara>Oui</simpara></entry>
+ </row>
+ <row>
+ <entry><literal>after_modify</literal></entry>
+ <entry><simpara>Après la modification du LSobject</simpara></entry>
+ <entry><simpara>Non</simpara></entry>
+ </row>
+ <row>
+ <entry><literal>before_rename</literal></entry>
+ <entry><simpara>Avant de renommer le LSobject</simpara></entry>
+ <entry><simpara>Oui</simpara></entry>
+ </row>
+ <row>
+ <entry><literal>after_rename</literal></entry>
+ <entry><simpara>Après avoir renommé le LSobject</simpara></entry>
+ <entry><simpara>Non</simpara></entry>
+ </row>
+ <row>
+ <entry><literal>before_delete</literal></entry>
+ <entry><simpara>Avant la suppression du LSobject</simpara></entry>
+ <entry><simpara>Oui</simpara></entry>
+ </row>
+ <row>
+ <entry><literal>after_delete</literal></entry>
+ <entry><simpara>Après la suppression du LSobject</simpara></entry>
+ <entry><simpara>Non</simpara></entry>
+ </row>
+ </tbody>
+ </tgroup>
+</informaltable>
+<note><simpara>Si un événement est dit <emphasis>bloquant</emphasis>, lors de
+l'exécution des actions liées, si une des fonctions retourne <literal>false
+</literal>, le processus s'arrêtera.</simpara></note>
+ </para>
+ <sect3>
+ <title>Configuration</title>
+ <para>La configuration des déclencheurs se fait dans la définition des types
+ d'&LSobjects;. Par exemple, pour définir les fonctions à exécuter après la
+ modification des LSobjects de type <emphasis>LSeepeople</emphasis>, c'est à
+ dire lors de leur évènement <literal>after_modify</literal>, il faut définir
+ la variable suivante :
+ <programlisting linenumbering="unnumbered"><![CDATA[$GLOBALS['LSobjects']['[nom du type d'LSobject]']['after_modify']]]></programlisting>
+ Cette variable peut contenir soit une chaine de caractères correspondant au
+ nom de la fonction à exécuter, soit un tableau de chaînes de caractères
+ correspondant aux noms des fonctions à exécuter.</para>
+ </sect3>
+ <sect3>
+ <title>Ecriture d'une fonction</title>
+ <para>Une fonction exécuté par un déclencheur d'un LSobject se déclare de la
+ manière suivante :
+ <programlisting linenumbering="unnumbered"><![CDATA[
+/*
+ * Ma fonction à exécuter lors de l'evenement [event]
+ *
+ * Paramètre :
+ * - $object : Le LSobject sur lequel l'évènement survient
+ *
+ * Valeurs retournées :
+ * - True : Tout s'est bien passé
+ * - False : Une erreur est survenue ou la fonction souhaite bloquer le
+ * processus lors d'un évènement bloquant.
+ */
+function maFonction ($object) {
+
+ // Actions
+
+}
+ ]]></programlisting>
+Cette fonction doit prendre pour seul paramètre, le LSobject sur lequel l'évènement
+survient et doit retourner soit <literal>True</literal> si tout s'est bien passé,
+soit <literal>False</literal> en cas de problème. Dans le cas d'un événement
+bloquant, si la fonction retourne <literal>False</literal>, le processus est
+arrêté.</para>
+ </sect3>
+
+</sect2>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" ?>
+<!-- Début LSprofiles -->
+<sect4 id='config-LSprofile'>
+ <title>Profils d'utilisateurs</title>
+
+ <para>Cette section décrit la manière dont sont définis les profils d'utilisateurs
+ se connectant à l'interface appelés <emphasis>LSprofile</emphasis>. Il est
+ possible de définir autant de profils d'utilisateurs que l'on souhaite. Pour
+ chaque profil d'utilisateur, il faudra définir dans quelles parties de
+ l'annuaire ce profil existe (Exemple : les admistrateurs de groupes existent
+ uniquement dans la branche de l'annuaire stockant les groupes). Enfin pour
+ chaque partie de l'annuaire, il faudra définir la manière d'identifier si
+ l'utilisateur qui se connecte appartient à ce profil.</para>
+
+<programlisting linenumbering="unnumbered">
+ <citetitle>Structure</citetitle>...
+<![CDATA['LSprofile' => array (
+ [nom d'un LSprofile] => array (
+ [basedn] => [dn utilisateur],
+ [autre basedn] => array (
+ [dn d'un utilisateur] => NULL,
+ [autre dn] => array ( // via un listage de l'attribut d'un objet
+ 'attr' => [nom de l'attribut clé de l'objet],
+ 'attr_value' => [format de la valeur de l'attribut clé],
+ 'LSobject' => [nom du type LSobject de l'objet]
+ )
+ ),
+ 'LSobjects' => array ( // via une liste d'objet sur lequel l'utilisateur a des pouvoirs
+ [nom du LSobject] => array (
+ 'attr' => [nom de l'attribut clé],
+ 'attr_value' => [format de la valeur de l'attribut clé],
+ // ou
+ 'filter' => [format du filtre de recherche],
+
+ 'basedn' => [basedn de recherche],
+ 'params' => [configuration de la recherche]
+ ),
+ ...
+ )
+ ),
+ ...
+),]]>
+...
+</programlisting>
+
+<para>
+Le paramètre <varname>LSprofiles</varname> est un tableau associatif contenant,
+en valeur clé, le nom d'un <emphasis>LSprofile</emphasis> et en valeur associée,
+la configuration nécessaire pour déterminer si l'utilisateur connecté appartient
+à ce LSprofile pour tout ou partie de l'annuaire.
+</para>
+
+<para>
+Dans chaque configuration de <emphasis>LSprofile</emphasis>, il est possible
+d'identifier l'appartenance ou non de l'utilisateur connecté de deux manières :
+</para>
+
+<itemizedlist>
+
+<!-- D - Pour basedn -->
+<listitem>
+<para>Pour une branche de l'annuaire donnée (<emphasis>basedn</emphasis>) :
+en listant les utilisateurs appartenant à ce <emphasis>LSprofile</emphasis> pour
+tous les objets de la branche. Il sera possible de lister les utilisateurs dont
+on connait le <emphasis>DN</emphasis> ou de lister les utilisateurs appartenant
+à une liste stockée dans l'annuaire (par exemple la liste des membres d'un
+groupe).</para>
+
+<!-- D - Cas pour basedn -->
+<itemizedlist>
+
+<!-- D - Liste de DNs -->
+<listitem>
+<simpara>Liste des DNs d'utilisateurs :</simpara>
+<programlisting linenumbering="unnumbered">
+ <citetitle>Structure</citetitle>...
+<![CDATA['LSprofile' => array (
+ [nom du LSprofile] => array (
+ [basedn] => [dn utilisateur],
+ // ou si plusieurs DNs
+ [autre basedn] => array (
+ [dn d'un utilisateur] => NULL,
+ [dn d'un utilisateur 2] => NULL
+ ),
+ ...
+ ),
+ ...
+),]]>
+...
+</programlisting>
+<simpara>Explication : Pour un <emphasis>LSprofile</emphasis> et un
+<emphasis>basedn</emphasis> donnés, on définit l'utilisateur appartenant au
+<emphasis>LSprofile</emphasis> en donnant son <emphasis>DN</emphasis>. Si on
+souhaite lister plusieurs utilisateurs, on utilise un tableau associatif dans
+lequel les clés sont les <emphasis>DNs</emphasis> des utilisateurs et les valeurs
+associées sont toutes <emphasis>NULL</emphasis>.</simpara>
+</listitem>
+<!-- F - Liste de DNs -->
+
+<!-- D - Liste stocké -->
+<listitem>
+<simpara>Liste d'utilisateurs stockée dans l'annuaire :</simpara>
+<programlisting linenumbering="unnumbered">
+ <citetitle>Structure</citetitle>...
+<![CDATA['LSprofile' => array (
+ [nom du LSprofile] => array (
+ [basedn] => array (
+ [DN d'un object] => array (
+ 'attr' => [nom de l'attribut clé de l'objet],
+ 'attr_value' => [format de la valeur de l'attribut clé],
+ 'LSobject' => [nom du type LSobject de l'objet]
+ )
+ ),
+ ...
+),]]>
+...
+</programlisting>
+<simpara>Explication : Pour un <emphasis>LSprofile</emphasis> et un
+<emphasis>basedn</emphasis> donnés, on liste les utilisateurs du
+<emphasis>LSprofile</emphasis> référencés dans l'attribut <varname>attr</varname>
+de l'object de type <varname>LSobject</varname> et selon le format de valeur
+décrit dans <varname>attr_value</varname>.</simpara>
+</listitem>
+<!-- F - Liste stocké -->
+
+</itemizedlist>
+<!-- F - Cas pour basedn -->
+
+</listitem>
+<!-- F - Pour basedn -->
+
+<!-- D - Pour LSobject -->
+<listitem>
+<simpara>Pour un type de <emphasis>LSobject</emphasis> donné : en listant
+les objets pour lesquels l'utilisateur aura les droits du LSprofile. Il sera
+possible, à travers une recherche paramétrable dans l'annuaire, de lister les
+objets pour lesquels l'utilisateur appartiendra au
+<emphasis>LSprofile</emphasis>.</simpara>
+<programlisting linenumbering="unnumbered">
+ <citetitle>Structure</citetitle>...
+<![CDATA['LSprofile' => array (
+ [nom d'un LSprofile] => array (
+ 'LSobjects' => array ( // via un liste d'objet pour lequel l'utilisateur
+ // appartient au LSprofile
+ [nom du LSobject] => array (
+ 'attr' => [nom de l'attribut clé],
+ 'attr_value' => [format de la valeur de l'attribut clé],
+ // or
+ 'filter' => [format du filtre de recherche],
+
+ 'basedn' => [basedn de recherche],
+ 'params' => [configuration de la recherche]
+ ),
+ ...
+ )
+ ),
+ ...
+),]]>
+...
+</programlisting>
+<para>Explications : Dans la configuration d'un <emphasis>LSprofile</emphasis>,
+la valeur clé <emphasis>LSprofile</emphasis> signifie qu'on est dans un cas de la
+délégation de droits sur des types d'LSobject. Dans ce tableau associatif, il
+est possible de définir un ou plusieurs types de LSobject pour lesquels on délègue
+des droits. Dans ce tableau la valeur clé est le nom du LSobject et la valeur
+associée est un tableau contenant la configuration permettant de dire quels sont
+les LSobjets de ce type concernés par la délégation.</para>
+<para>Cette configuration contient les paramètres d'une recherche dans l'annuaire
+en considérant que l'utilisateur connecté aura les droits du LSprofile sur les
+objets retournés. Les paramètres de la recherche sont :
+
+<variablelist>
+
+<varlistentry>
+ <term>attr</term>
+ <listitem>
+ <simpara>Nom de l'attribut des LSobjets contenant une valeur clé qui
+ permettra d'identifier l'utilisateur comme ayant droit.</simpara>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>attr_value</term>
+ <listitem>
+ <simpara>Le format de la valeur clé prise par l'attribut <varname>attr</varname>.
+ Ce format est composé à partir des données de l'objet de l'utilisateur
+ connecté. Voir le paragraphe <link linkend="config-LSformat">Format
+ paramètrable</link> pour plus d'informations sur l'écriture du format.</simpara>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>filter</term>
+ <listitem>
+ <simpara>Ce paramètre remplace les paramètres <varname>attr</varname> et
+ <varname>attr_value</varname>. Il est possible ici d'écrire directement le
+ format paramètrable du filtre recherche dans l'annuaire. Ce filtre sera
+ automatiquement agrémenté des conditions sur l'attribut <emphasis>objectclass</emphasis>.
+ Voir le paragraphe <link linkend="config-LSformat">Format paramètrable</link>
+ pour plus d'informations sur l'écriture du format.</simpara>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>basedn</term>
+ <listitem>
+ <simpara>C'est le <emphasis>basedn</emphasis> de la recherche. Il est possible
+ ainsi de la limiter sur les LSojects d'une branche précise de l'annuaire.
+ <emphasis>(Paramètre facultatif)</emphasis></simpara>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>params</term>
+ <listitem>
+ <simpara>C'est un tableau associatif contenant les paramètres étendus de la
+ recherche. Voir le paragraphe <link linkend="config-search-params">
+ Paramètres étendus des recherches dans l'annuaire</link> pour plus de détails.
+ <emphasis>(Paramètre facultatif)</emphasis></simpara>
+ </listitem>
+</varlistentry>
+
+</variablelist>
+
+</para>
+
+</listitem>
+<!-- F - Pour LSobject -->
+
+</itemizedlist>
+
+
+</sect4>
+<!-- Fin LSprofiles -->
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" ?>
+<chapter>
+<title>Configuration</title>
+
+ <para>
+ La configuration du projet est située principalement dans le dossier 'conf/'.
+ Les exceptions seront détaillées par la suite.
+ </para>
+
+ <warning>
+ <simpara>Toute la configuration du projet se fait par l'intermédiaire de
+ fichiers définissant des variables &php; dont les valeurs sont utilisées par
+ le programme. Ceci signifie que la syntaxe de ces fichiers doit être valide
+ avec l'interpréteur &php; utilisé.</simpara>
+ </warning>
+
+&conf-globale;
+
+&conf-LSobject;
+&conf-LSaddon;
+
+</chapter>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" ?>
+<!ENTITY conf SYSTEM "conf.docbook">
+<!ENTITY conf-globale SYSTEM "globale.docbook">
+<!ENTITY conf-srv-ldap SYSTEM "srv-ldap.docbook">
+<!ENTITY conf-LSprofile SYSTEM "LSprofile.docbook">
+<!ENTITY conf-subDn SYSTEM "subDn.docbook">
+<!ENTITY conf-recoverPassword SYSTEM "recoverPassword.docbook">
+<!ENTITY conf-LSformat SYSTEM "LSformat.docbook">
+<!ENTITY conf-LDAP_search_params SYSTEM "LDAP_search_params.docbook">
+
+<!ENTITY conf-LSaddon SYSTEM "LSaddon.docbook">
+
+<!ENTITY conf-LSobject SYSTEM "LSobject.docbook">
+<!ENTITY conf-LSobject-container_auto_create SYSTEM "LSobject/container_auto_create.docbook">
+<!ENTITY conf-LSobject-triggers SYSTEM "LSobject/triggers.docbook">
+<!ENTITY conf-LSobject-LSform SYSTEM "LSobject/LSform.docbook">
+<!ENTITY conf-LSobject-LSsearch SYSTEM "LSobject/LSsearch.docbook">
+<!ENTITY conf-LSobject-LSrelation SYSTEM "LSobject/LSrelation.docbook">
+
+<!ENTITY conf-LSattribute SYSTEM "LSattribute.docbook">
+<!ENTITY conf-LSattribute-LSattr_html SYSTEM "LSattribute/LSattr_html.docbook">
+<!ENTITY conf-LSattribute-LSattr_ldap SYSTEM "LSattribute/LSattr_ldap.docbook">
+<!ENTITY conf-LSattribute-check-data SYSTEM "LSattribute/check-data.docbook">
+<!ENTITY conf-LSattribute-validation SYSTEM "LSattribute/validation.docbook">
+<!ENTITY conf-LSattribute-triggers SYSTEM "LSattribute/triggers.docbook">
+
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" ?>
+<sect1 id='config-globale'>
+ <title>Configuration globale</title>
+ <para>
+ La plus grande partie de la configuration globale se trouve dans le fichier
+ <filename>config.inc.php</filename>.
+ </para>
+
+<programlisting linenumbering="unnumbered">
+ <citetitle>Structure</citetitle>
+<![CDATA[// Variables globales
+$GLOBALS['LSconfig'] = array(
+ // Variables globales
+);
+
+// Autres variables indépendantes
+$var1 = 'val1'
+$var2 = 'val2'
+...
+?>]]>
+</programlisting>
+
+<sect2>
+<title>Variables globales</title>
+
+<!-- Début Variables globales -->
+<variablelist>
+
+<varlistentry>
+ <term>NetLDAP2</term>
+ <listitem>
+ <simpara>Chemin vers la librairie PEAR &netldap;.</simpara>
+ <informalexample>
+ <programlisting><![CDATA[/usr/share/php/Net/LDAP2.php]]></programlisting>
+ </informalexample>
+ </listitem>
+</varlistentry>
+
+
+<varlistentry>
+ <term>Smarty</term>
+ <listitem>
+ <simpara>Chemin vers le moteur de template &smarty;.</simpara>
+ <informalexample>
+ <programlisting><![CDATA[/usr/share/php/smarty/libs/Smarty.class.php]]></programlisting>
+ </informalexample>
+ </listitem>
+</varlistentry>
+
+
+<varlistentry>
+ <term>lang</term>
+ <listitem>
+ <simpara>Paramètre utilisé pour l'internationalisation.</simpara>
+ <informalexample>
+ <programlisting><![CDATA[fr_FR.UTF8]]></programlisting>
+ </informalexample>
+ </listitem>
+</varlistentry>
+
+
+<varlistentry>
+ <term>cacheLSprofiles</term>
+ <listitem>
+ <simpara>Activation/Désactivation de la mise en cache des profils des
+ utilisateurs connectés (&LSprofiles;).</simpara>
+ <simpara>Valeurs possibles : <literal>True</literal> ou <literal>False</literal></simpara>
+ <simpara>Valeur recommandée : <literal>True</literal></simpara>
+ <important><simpara>Ce paramètre a une action globale mais non prioritaire
+ sur le comportement de l'application.</simpara></important>
+ </listitem>
+</varlistentry>
+
+
+<varlistentry>
+ <term>cacheSubDn</term>
+ <listitem>
+ <simpara>Activation/Désactivation de la mise en cache des niveaux de
+ connexion (&subDn;) dans l'annuaire.</simpara>
+ <simpara>Valeurs possibles : <emphasis>True</emphasis> ou <emphasis>False</emphasis></simpara>
+ <simpara>Valeur recommandée : <emphasis>True</emphasis></simpara>
+
+ <important><simpara>Ce paramètre a une action globale mais non prioritaire
+ sur le comportement de l'application.</simpara></important>
+ </listitem>
+</varlistentry>
+
+
+<varlistentry>
+ <term>cacheSearch</term>
+ <listitem>
+ <simpara>Activation/Désactivation de la mise en cache du résultat des
+ recherches dans l'annuaire.</simpara>
+ <simpara>Valeurs possibles : <emphasis>True</emphasis> ou
+ <emphasis>False</emphasis></simpara>
+ <simpara>Valeur recommandée : <emphasis>True</emphasis></simpara>
+
+ <important><simpara>Ce paramètre a une action globale mais non prioritaire
+ sur le comportement de l'application.</simpara></important>
+ </listitem>
+</varlistentry>
+
+
+<varlistentry>
+ <term>keepLSsessionActive</term>
+ <listitem>
+ <simpara>Activation/Désactivation du maintient de la LSsession active.</simpara>
+ <simpara>Valeurs possibles : <emphasis>True</emphasis> ou
+ <emphasis>False</emphasis></simpara>
+
+ <important><simpara>Ce paramètre a une action globale mais non prioritaire
+ sur le comportement de l'application.</simpara></important>
+ </listitem>
+</varlistentry>
+
+
+<varlistentry>
+ <term>ldap_servers</term>
+ <listitem>
+ <simpara>Configuration des serveurs LDAP.
+ <link linkend="config-srv-ldap">Voir section concernée</link>.</simpara>
+ </listitem>
+</varlistentry>
+
+</variablelist>
+
+&conf-srv-ldap;
+
+</sect2>
+
+&conf-LSformat;
+&conf-LDAP_search_params;
+
+</sect1>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" ?>
+<!-- Début recoverPassword -->
+<sect4 id='config-recoverPassword'>
+ <title>Récupération de mot de passe</title>
+
+ <para>Cette section décrit la manière de configurer la récupération de mot de
+ passe par les utilisateurs. Le mécanisme de récupération de mot de passe
+ fonctionne en deux parties :
+
+ <itemizedlist>
+
+ <!-- D - 1ère étape -->
+ <listitem>
+<para>Dans un premier lieu, l'utilisateur ayant perdu son mot de passe accède
+à l'interface de récupération à partir de la page de connexion. L'interface lui
+demande de saisir son identifiant et éventuellement de sélectionner le serveur
+LDAP concerné. Une fois ces informations saisies, une recherche de l'utilisateur
+est effectuée dans l'annuaire et si celui-ci est trouvé, la valeur de l'attribut
+<varname>recoveryHashAttr</varname> de l'objet est alors redéfinie avec une valeur
+aléatoire.</para>
+<para>Un mail est ensuite envoyé à l'utilisateur en utilisant la première valeur
+de l'attribut <varname>mailAttr</varname> comme adresse. Ce mail est formé à
+partir des paramètres du tableau associatif <varname>recoveryHashMail</varname>.
+Celui-ci doit contenir le sujet du mail dans <varname>subject</varname> et le
+corps du message dans <varname>msg</varname>. Ces deux informations sont des
+<emphasis>formats paramètrables</emphasis> composés avec, comme valeur clé,
+l'URL de retour à laquelle l'utilisateur devra se rendre pour accèder à la
+seconde étape de la récupération de son mot de passe.</para>
+ </listitem>
+ <!-- F - 1ère étape -->
+
+ <!-- D - 2nd étape -->
+ <listitem>
+<para>L'utilisateur doit donc se rendre sur l'interface par l'intermédiaire
+de l'URL qui lui aura été fournie dans le mail de l'étape précédente. Cette URL
+contient la valeur de l'attribut <varname>recoveryHashAttr</varname> précédement
+définie. A partir de cette information, une recherche est effectuée dans l'annuaire
+pour retrouver l'utilisateur correspondant.</para>
+<para>Si l'utilisateur est retrouvé, un nouveau mot de passe lui est généré en
+utilisant les paramètres de configuration éventuellement définis dans la
+configuration HTML de l'attribut "mot de passe". Pour avoir plus d'information
+sur ces paramètres, consulter la documentation du type d'attribut HTML
+<link linkend="config-LSattr_html_password"><emphasis>LSattr_html_password</emphasis></link>.
+L'attribut <varname>recoveryHashAttr</varname> est quant à lui
+supprimé.</para>
+<para>Ensuite, un mail est composé à partir des paramètres du tableau associatif
+<varname>newPasswordMail</varname> et est envoyé à l'utilisateur. Ce tableau
+doit contenir le sujet du mail dans <varname>subject</varname> et le corps du
+message dans <varname>msg</varname>. Ces deux informations sont des
+<emphasis>formats paramètrables</emphasis> composés avec, comme valeur clé, le
+nouveau mot de passe de l'utilisateur.</para>
+ </listitem>
+ <!-- F - 2nd étape -->
+
+ </itemizedlist>
+
+ </para>
+
+
+
+<programlisting linenumbering="unnumbered">
+ <citetitle>Structure</citetitle>...
+<![CDATA['recoverPassword' => array(
+ 'mailAttr' => '[attribut mail]',
+ 'recoveryHashAttr' => '[attribut hash]',
+ 'recoveryEmailSender' => '[adresse mail utilisée par LdapSaisie pour l'envoi des mails]',
+ 'recoveryHashMail' => array( // 1er mail : avec l'URL pour l'accès à la 2nde partie
+ 'subject' => '[sujet du mail]',
+ 'msg' => "[message contenant le mot clé %{url}]"
+ ),
+ 'newPasswordMail' => array( // 2nd mail : avec le mot de passe
+ 'subject' => '[sujet du mail]',
+ 'msg' => "[message contenant le mot clé %{mdp}]"
+ )
+),]]>
+...
+</programlisting>
+
+
+</sect4>
+<!-- Fin recoverPassword -->
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" ?>
+<sect3 id="config-srv-ldap">
+ <title>Configuration des serveurs LDAP</title>
+
+<para>Cette section décrit le tableau de configuration des différents serveurs
+LDAP utilisés par l'application. Ce tableau contient lui même un tableau par
+serveur LDAP.</para>
+
+<programlisting linenumbering="unnumbered">
+ <citetitle>Structure</citetitle>...
+<![CDATA[$GLOBALS['LSconfig'] = array(
+ ...
+ 'ldap_servers' => array(
+ array (
+ 'name' => [nom de l'annuaire],
+ 'ldap_config'=> array(
+ // Définition des paramètres de connexion à l'annuaire
+ ),
+ 'LSprofiles' => array (
+ // Définition des LSprofiles
+ ),
+ 'cacheLSprofiles' => [boolean],
+ 'cacheSearch' => [boolean],
+ 'authObjectType' => [LSobject],
+ 'authObjectTypeAttrPwd' => [attribut],
+ 'LSaccess' => array (
+ [Type LSobject 1],
+ [Type LSobject 2],
+ ...
+ ),
+ 'subDn' => array(
+ // Définition des sous-niveaux de l'annuaire
+ ),
+ 'subDnLabel' => [nom des sous-niveaux],
+ 'recoverPassword' => array(
+ // Définition des paramètres de configuration de la récupération de mot de passe
+ ),
+ 'emailSender' => [email],
+ 'keepLSsessionActive' => [booléen]
+ )
+ ...
+);]]>
+...
+</programlisting>
+
+<!-- Début Paramètres Configuration -->
+<variablelist>
+<title>Paramètres de configuration</title>
+
+<varlistentry>
+ <term>name</term>
+ <listitem>
+ <simpara>Le nom d'affichage de ce serveur Ldap
+ (utilisé lorsque plusieurs serveur LDAP sont déclarés).</simpara>
+ </listitem>
+</varlistentry>
+
+
+<varlistentry>
+ <term>ldap_config</term>
+ <listitem>
+ <simpara>Informations de connexion au serveur LDAP. Ces informations sont
+ structurées selon les attentes de la librairie &netldap;.
+ <ulink url='http://pear.php.net/manual/fr/package.networking.net-ldap.connecting.php'>
+ Plus d'informations</ulink>
+ </simpara>
+ </listitem>
+</varlistentry>
+
+
+<varlistentry>
+ <term>LSprofiles</term>
+ <listitem>
+ <simpara>Définition des profils d'utilisateurs se connectant à l'annuaire.
+ <link linkend="config-LSprofile">Voir la section concernée</link>.
+ </simpara>
+ </listitem>
+</varlistentry>
+
+
+<varlistentry>
+ <term>cacheLSprofiles</term>
+ <listitem>
+ <simpara>Activation/Désactivation de la mise en cache des &LSprofiles; des
+ utilisateurs connectés à ce serveur.</simpara>
+ </listitem>
+</varlistentry>
+
+
+<varlistentry>
+ <term>cacheSearch</term>
+ <listitem>
+ <simpara>Activation/Désactivation de la mise en cache du résultat des
+ recherches sur ce serveur.</simpara>
+ </listitem>
+</varlistentry>
+
+
+<varlistentry>
+ <term>authObjectType</term>
+ <listitem>
+ <simpara>Nom du type d'&LSobject; pouvant être utilisé pour authentifier un
+ utilisateur se connectant à l'interface.</simpara>
+ </listitem>
+</varlistentry>
+
+
+<varlistentry>
+ <term>authObjectTypeAttrPwd</term>
+ <listitem>
+ <simpara>Nom de l'attribut "mot de passe" du type d'&LSobject; utilisé pour
+ l'authentification des utilisateurs se connectant à l'interface.</simpara>
+ </listitem>
+</varlistentry>
+
+
+<varlistentry id="config-LSaccess">
+ <term>LSaccess</term>
+ <listitem>
+ <simpara>Définition des types d'&LSobjects; devant apparaître dans le menu de
+ l'interface.</simpara>
+ <important><simpara>Ce paramètre n'est utilisé que pour les annuaires n'ayant
+ pas de sous-niveaux (&subDn;).</simpara></important>
+ </listitem>
+</varlistentry>
+
+
+<varlistentry>
+ <term>subDn</term>
+ <listitem>
+ <simpara>Définition des sous-niveaux de connexion à l'annuaire.
+ <link linkend="config-subDn">Voir section concernée</link>.</simpara>
+ <important><simpara>Ce paramètre remplace le paramètre
+ <link linkend="config-LSaccess">LSaccess</link> dans le cas d'un annuaire
+ multi-niveaux.</simpara></important>
+ </listitem>
+</varlistentry>
+
+
+<varlistentry>
+ <term>subDnLabel</term>
+ <listitem>
+ <simpara>Définition du label utilisé pour qualifier les sous-niveaux de
+ connexion.</simpara>
+ <important><simpara>Ce paramètre est utile uniquement dans le cas d'un annuaire
+ multi-niveaux.</simpara></important>
+ </listitem>
+</varlistentry>
+
+
+<varlistentry>
+ <term>recoverPassword</term>
+ <listitem>
+ <simpara>Définition des paramètres de la récupération de mot de passe.
+ <link linkend="config-recoverPassword">Voir la section concernée</link>.</simpara>
+ </listitem>
+</varlistentry>
+
+
+<varlistentry>
+ <term>emailSender</term>
+ <listitem>
+ <simpara>Adresse mail utilisée par &LdapSaisie; pour envoyer des e-mails en
+ relation avec cet annuaire. Cette adresse est celle utilisée par défaut.
+ L'adresse utilisée peut également être configurée dans le contexte de
+ configuration du module devant envoyer des e-mails.</simpara>
+ </listitem>
+</varlistentry>
+
+<varlistentry>
+ <term>keepLSsessionActive</term>
+ <listitem>
+ <simpara>Activation/Désactivation du maintient de la LSsession active.</simpara>
+ <simpara>Valeurs possibles : <emphasis>True</emphasis> ou
+ <emphasis>False</emphasis></simpara>
+ </listitem>
+</varlistentry>
+
+
+</variablelist>
+<!-- Fim Paramètres Configuration -->
+
+&conf-LSprofile;
+
+&conf-subDn;
+
+&conf-recoverPassword;
+
+</sect3>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" ?>
+<!-- Début subDn -->
+<sect4 id='config-subDn'>
+ <title>Sous-niveaux de connexion</title>
+
+ <para>Cette section décrit la manière de définir des sous-niveaux de connexion
+ à l'annuaire (<emphasis>subDn</emphasis>). Le concept de sous-niveau de
+ connexion sert à déclarer les niveaux logiques de l'annuaire. Par exemple, dans un
+ annuaire dans lequel sont stockés des objets concernant plusieurs organisations
+ et que celles-ci se distinguent grâce à la présence d'une séparation dans
+ l'arbre, il sera alors possible de définir des sous-niveaux de connexion pour
+ chacune des organisations.</para>
+
+<programlisting linenumbering="unnumbered">
+ <citetitle>Exemple d'arborescence d'annuaire utilisant le concept de
+ sous-niveaux correspondant à des sociétés</citetitle>
+|- o=ls
+| |- ou=companies
+| | |- ou=company1
+| | | |- ou=people
+| | | |- ou=groups
+| | |- ou=company2
+| | | |- ou=people
+| | | |- ou=groups
+| |- ou=people
+| |- ou=groups
+
+</programlisting>
+
+<para>Explications : Il est possible dans cet exemple de définir des
+sous-niveaux de connexion correspondants aux sociétés. Dans chacune de ces
+sociétés, on retrouve les <emphasis>OU</emphasis> correspondant au type
+d'<emphasis>LSobjets</emphasis>. Lors de la connexion à l'interface, l'utilisateur
+devra choisir dans quel sous-niveau de l'annuaire il souhaite se connecter. Une
+fois connecté, l'utilisateur manipulera uniquement les objets du sous-niveau de
+l'annuaire dans lequel il se trouve. Il lui sera également possible de changer
+de sous-niveau de connexion à travers l'interface : une liste déroulante est
+disponible pour cela dans le menu.</para>
+
+<para>
+Il existe deux manières de déclarer des sous-niveaux de connexion à l'annuaire :
+<itemizedlist>
+
+<!-- D - Déclaration manuelle -->
+<listitem>
+<simpara>En déclarant manuellement un <emphasis>subDn</emphasis> de l'annuaire
+et en lui donnant un nom.</simpara>
+</listitem>
+<!-- F - Déclaration manuelle -->
+
+<!-- D - via les LSobjects -->
+<listitem>
+<simpara>En listant les <emphasis>LSobjets</emphasis> d'un type précis et en
+utilisant leurs données pour constituer le nom des sous-niveaux. Cette liste est
+constituée en effectuant une recherche dans l'annuaire. Il est possible de définir
+un <emphasis>basedn</emphasis> particulier pour cette recherche.</simpara>
+</listitem>
+<!-- F - via les LSobjets -->
+
+</itemizedlist>
+
+Pour chacune de ces méthodes on définira également les types
+d'<emphasis>LSobjets</emphasis> qui sont présents dans cette branche de
+l'annuaire.
+</para>
+
+<programlisting linenumbering="unnumbered">
+ <citetitle>Structure</citetitle>...
+<![CDATA['subDn' => array(
+ // Déclaration manuelle
+ '[Nom du sous-niveau]' => array(
+ 'dn' => '[basedn du sous-niveau]',
+ 'LSobjects' => array( // Liste des types d'LSobjets présents dans le sous-niveau
+ [LSobject1],
+ [LSobject2],
+ ...
+ )
+ ),
+ // Liste de LSobjets
+ 'LSobject' => array(
+ '[type d'LSobject]' => array( // le type d'LSobjet à lister
+ 'basedn' => '[basedn]', // Le basedn de la recherche
+ 'displayValue' => '[format]', // Format du nom des sous-niveaux
+ 'LSobjects' => array( // Liste des types d'LSobjets présents dans les sous-niveaux
+ [LSobject1],
+ [LSobject2],
+ ...
+ )
+ )
+ )
+),]]>
+...
+</programlisting>
+
+
+</sect4>
+<!-- Fin subDn -->
--- /dev/null
+DOCBOOK_FILE=../LdapSaisie.docbook
+
+all: html pdf
+
+# HTML
+html: html/LdapSaisie.html
+
+html/LdapSaisie.html:
+ cd html; make html
+
+clean_html:
+ cd html; make clean
+
+# PDF
+pdf: pdf/LdapSaisie.pdf
+
+pdf/LdapSaisie.pdf:
+ cd pdf; make pdf
+
+clean_pdf:
+ cd pdf; make clean
+
+clean: clean_html clean_pdf
--- /dev/null
+DOCBOOK_FILE=../../LdapSaisie.docbook
+XSL_FILE=../../styles/LS.xsl
+XSL_MULTI_FILE=../../styles/LS-multi.xsl
+XSL_HELP_FILE=../../styles/LS-help.xsl
+
+XSLTPROC=xsltproc
+
+all: html
+
+html: all-in-one/LdapSaisie.html online/index.html help/index.html
+
+all-in-one/LdapSaisie.html: $(DOCBOOK_FILE)
+ $(XSLTPROC) --output all-in-one/LdapSaisie.html $(XSL_FILE) $(DOCBOOK_FILE)
+
+online/index.html: $(DOCBOOK_FILE)
+ cd online; $(XSLTPROC) -stringparam chunker.output.indent yes \
+ ../$(XSL_MULTI_FILE) ../$(DOCBOOK_FILE)
+
+help/index.html: $(DOCBOOK_FILE)
+ cd help; $(XSLTPROC) ../$(XSL_HELP_FILE) ../$(DOCBOOK_FILE)
+
+clean:
+ rm -f all-in-one/LdapSaisie.html online/* help/*
--- /dev/null
+DOCBOOK_FILE=../../LdapSaisie.docbook
+JW=jw
+PDF_FILE=LdapSaisie.pdf
+
+all: pdf
+
+pdf: LdapSaisie.pdf
+
+LdapSaisie.pdf: $(DOCBOOK_FILE)
+ SP_ENCODING=XML $(JW) -f docbook -b pdf "$(DOCBOOK_FILE)"
+
+clean:
+ rm -f $(PDF_FILE)
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" ?>
+<sect1>
+ <title>Arborescence du projet</title>
+
+ <variablelist>
+ <title>Racine</title>
+ <!-- Début - conf -->
+ <varlistentry>
+ <term><filename>conf/</filename></term>
+ <listitem>
+ <simpara>Contient les fichiers de configuration.</simpara>
+
+ <!-- Début - conf - Sous dossiers-->
+ <variablelist>
+
+ <varlistentry>
+ <term><filename>LSobjects/</filename></term>
+ <listitem>
+ <simpara>Configuration des LSobjets.</simpara>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><filename>LSaddons/</filename></term>
+ <listitem>
+ <simpara>Configuration des LSaddons.</simpara>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+ <!-- Fin - conf - Sous dossiers -->
+
+ </listitem>
+ </varlistentry>
+ <!-- Fin - conf -->
+
+ <!-- Début - include -->
+ <varlistentry>
+ <term><filename>includes/</filename></term>
+
+ <listitem>
+ <simpara>Contient les fichiers des ressources.</simpara>
+
+ <!-- Début - include - Sous dossiers-->
+ <variablelist>
+
+ <varlistentry>
+ <term><filename>addons/</filename></term>
+ <listitem>
+ <simpara>Les addons au projet.</simpara>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><filename>class/</filename></term>
+ <listitem>
+ <simpara>Les fichiers de définition des classes &php;.</simpara>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><filename>js/</filename></term>
+ <listitem>
+ <simpara>Les fichiers Javascript.</simpara>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><filename>libs/</filename></term>
+ <listitem>
+ <simpara>Les librairies utilisées.</simpara>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+ <!-- Fin - include - Sous dossiers -->
+
+ </listitem>
+ </varlistentry>
+ <!-- Fin - include -->
+
+ <varlistentry>
+ <term><filename>l10n/</filename></term>
+ <listitem>
+ <simpara>Les fichiers d'internationalisation.</simpara>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><filename>lsexample/</filename></term>
+ <listitem>
+ <simpara>Les fichiers relatifs à l'annuaire d'exemple.</simpara>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><filename>templates/</filename></term>
+ <listitem>
+ <simpara>Les fichiers <emphasis>template</emphasis> de l'interface.
+ Il y a un sous-dossier par template.</simpara>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><filename>css/</filename></term>
+ <listitem>
+ <simpara>Les fichiers css de l'interface. Il y a un sous-dossier par
+ template CSS.</simpara>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><filename>images/</filename></term>
+ <listitem>
+ <simpara>Les images de l'interface. Il y a un sous-dossier par template
+ d'image.</simpara>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><filename>tmp/</filename></term>
+ <listitem>
+ <simpara>Les fichiers temporaires (y compris le cache des templates).</simpara>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+</sect1>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" ?>
+<chapter>
+
+<title>Installation</title>
+
+<sect1>
+ <title>Pré-requis</title>
+ <itemizedlist>
+ <listitem><simpara>&php; 5 avec <parameter>magic_quotes_gpc</parameter> à <literal>off</literal></simpara></listitem>
+ <listitem><simpara>Le support <application>LDAP</application> dans &php; (paquet php5-ldap dans <application>Debian</application>)</simpara></listitem>
+ <listitem><simpara>Le support <application>mhash</application> dans &php; (paquet php5-mash dans <application>Debian</application>)</simpara></listitem>
+ <listitem><simpara>&netldap;</simpara></listitem>
+ <listitem><simpara>&smarty;</simpara></listitem>
+ <listitem><simpara>L'utisateur exécutant le serveur web doit avoir les droits d'écriture sur le dossier 'tmp'.</simpara></listitem>
+ </itemizedlist>
+ <warning><simpara>La librairie &netldap; oblige le fait que la racine DSE de
+ l'annuaire soit lisible en anonyme sinon la connexion à l'annuaire échouera
+ systématiquement.</simpara></warning>
+</sect1>
+
+<sect1 id="install-download">
+ <title>Téléchargement</title>
+ <para>Il n'existe pas encore de version stable publiée. Vous pouvez obtenir le
+ code source soit en le rapatriant à partir du serveur Subversion, soit en téléchargeant
+ le dernier snapshot nocturne de l'arbre Subversion.
+ </para>
+
+ <sect2>
+ <title>A partir de Subversion</title>
+ <para>Le dépôt Subversion peut être récupéré anonymement en utilisant la
+ commande suivante :
+ <screen>
+ <command>svn checkout svn://labs.libre-entreprise.org/svnroot/ldapsaisie</command>
+ </screen>
+ La racine web de l'application se trouvera alors dans le dossier <emphasis>
+ /ldapsaisie/trunk/</emphasis>.
+ </para>
+ </sect2>
+
+ <sect2>
+ <title>A partir des snapshot</title>
+ <para>Toutes les nuits, un snapshot de l'arbre Subversion est réalisé et est
+ téléchargeable au format <emphasis>tar.gz</emphasis> à l'adresse suivante :
+ <ulink url='http://labs.libre-entreprise.org/snapshots.php?group_id=118'>
+ http://labs.libre-entreprise.org/snapshots.php?group_id=118</ulink>
+ </para>
+ </sect2>
+
+</sect1>
+
+&install-arbo;
+
+<sect1>
+ <title>Les étapes de l'installation</title>
+ <para>Cette section décrit rapidement les différentes étapes de l'installation
+ de LdapSaisie.</para>
+
+<orderedlist>
+ <listitem><simpara>Téléchargement et décompression si nécessaire.
+ <link linkend="install-download">Plus de détails</link></simpara></listitem>
+
+ <listitem><simpara>Configuration globale : Cette partie est principalement
+ contenue dans le fichier <emphasis>conf/config.inc.php</emphasis>.Il s'agit en
+ particulier de configurer la connexion à votre annuaire. Pour plus de détails,
+ reportez-vous à <link linkend="config-globale">la section concernée</link>.
+ </simpara>
+ <note><simpara>Il est possible de passer l'application en mode <emphasis>debug
+ </emphasis> ce qui peut être utile par la suite.</simpara></note>
+ </listitem>
+
+ <listitem><simpara>Configuration des types de &LSobjects; : Chaque type d'objet
+ manipulé par LdapSaisie doit correspondre avec un type de LSobject.</simpara>
+
+ <orderedlist>
+
+ <listitem><para>Création du fichier de classe : Ce fichier contient la
+ déclaration de la classe PHP correspondant au type de LSobject. Cette classe
+ étend la classe <emphasis>LSldapObject</emphasis> qui contient pour ainsi dire
+ toute les méthodes et proprités nécessaires pour les types de LSobject simples
+ (sans &LSrelation;). Les fichiers des classes sont contenus dans le dossier
+ <emphasis>/includes/class/</emphasis> et portent les noms composés de la
+ manière suivante :
+ <programlisting>class.LSobjects.[nom du type d'LSobject].php</programlisting>
+ Le plus simple pour cette étape est de recopier un des fichiers d'exemple et
+ de l'adapter en changeant le nom du type d'objet dans l'ensemble du fichier.
+ Pour cela, le fichier de classe du type <emphasis>LSeepeople</emphasis> est
+ le plus simple car il ne contient que le strict minimum.</para></listitem>
+
+ <listitem><simpara>Configurer vos LSobject : Cette partie est certainement la
+ plus longue et consiste à déclarer l'ensemble des informations relatives aux
+ types des objets LDAP manipulés. Les fichiers d'exemples fournis vous seront
+ certainement d'une aide précieuse. Pour plus de détails, reportez-vous à
+ <link linkend="config-LSobject">la section concernée</link>.</simpara>
+ </listitem>
+
+ <listitem><simpara>Configurer si nécessaire les relations entre les objets
+ appelés &LSrelations;. Cette opération consiste dans un premier temps à écrire
+ les méthodes PHP nécessaires pour gérer ces relations : pour cela regardez le
+ fichier de classe du type <emphasis>LSeegroup</emphasis>. Il faudra ensuite
+ déclarer ces relations dans la configuration des types d'LSobjects : Pour plus
+ de détails, reportez-vous à <link linkend="config-LSobject-LSrelation">la
+ section concernée</link>.</simpara>
+ </listitem>
+
+ </orderedlist>
+
+ </listitem>
+
+ <listitem><simpara>Personnaliser l'interface : Il est possible de personnaliser
+ à votre goût l'interface en écrivant votre template ou en modifiant simplement
+ les fichiers CSS. Une partie de cette documentation concernera bientôt cette
+ problématique. Patience...</simpara></listitem>
+
+</orderedlist>
+</sect1>
+
+</chapter>
--- /dev/null
+<chapter>
+<title>Introduction</title>
+<para>LdapSaisie est une application web d'administration d'annuaire LDAP développée
+en PHP/Javascript. Cette application a pour but d'abstraire la complexité d'un
+annuaire par l'intermédiraire d'une interface d'administration simple et intuitive.
+L'application a été concue avec pour objectif premier une modularité maximum, ce
+qui permet l'extention ou l'adaptation facile de l'application par l'intermédiaire
+de modules, d'extentions et de greffons. Cette application peut être utilisée pour
+administrer le système d'information basé sur l'annuaire LDAP et également en
+paralèlle pour permettre aux utilisateurs d'avoir accès aux données les concernants
+et éventuellement de les modifier.</para>
+
+<sect1>
+<title>Fonctionnalités</title>
+<para>De part sa modularité, &LdapSaisie; est facilement extensible. Cependant,
+voici une liste non-exhaustive de ses fonctionnalités :</para>
+<itemizedlist>
+<listitem><simpara>Gestion d'annuaire simple et multi-branches</simpara></listitem>
+<listitem><simpara>Gestion d'un nombre illimité de types d'objets</simpara></listitem>
+<listitem><simpara>Gestion d'un nombre illimité de populations se connectant à
+l'interface</simpara></listitem>
+<listitem><simpara>Gestion fine des droits des utilisateurs, permettant la
+maitrise des droits d'accès sur les objets de l'annuaire et leurs atributs, tout
+en permettant la délégation de droits.</simpara></listitem>
+
+<listitem><simpara>Gestion d'un grand nombre de types d'attributs :</simpara>
+
+ <itemizedlist>
+ <listitem><simpara>Texte (court ou long)</simpara></listitem>
+ <listitem><simpara>Date (format paramétrable)</simpara></listitem>
+ <listitem><simpara>Booléen (valeurs paramétrables)</simpara></listitem>
+ <listitem><simpara>Image/Photo</simpara></listitem>
+ <listitem><simpara>Mot de passe (génération de mot passe avec gestion d'une
+ politique fine)</simpara></listitem>
+ <listitem><simpara>Adresse mail</simpara></listitem>
+ <listitem><simpara>Flux RSS</simpara></listitem>
+ <listitem><simpara>Lien web (URL)</simpara></listitem>
+ <listitem><simpara>Adresse XMPP</simpara></listitem>
+ <listitem><simpara><emphasis>Maildir</emphasis></simpara></listitem>
+ <listitem><simpara>Quota de mails</simpara></listitem>
+ <listitem><simpara>Clef publique SSH</simpara></listitem>
+ <listitem><simpara>Liste déroulante à choix simple ou multiple</simpara></listitem>
+ <listitem><simpara>Relation à d'autres objets de l'annuaire/ Exemple : membres
+ d'un groupe, parrain d'un utilisateur, ... (valeur clé paramétrable)</simpara></listitem>
+ </itemizedlist>
+
+ <note><simpara>Chaque type d'attribut à des fonctionnalités qui lui sont propres
+ et qui rendent plus facile et agréable l'utilisation de l'interface (génération
+ automatique de mot de passe, génération des valeurs d'un champ à partir
+ d'autres, ...).</simpara></note>
+
+</listitem>
+
+<listitem><simpara>Gestion d'un grand nombre de règles de vérification des valeurs
+ des attributs :</simpara>
+
+ <itemizedlist>
+ <listitem><simpara>Alpha-numérique</simpara></listitem>
+ <listitem><simpara>Lettres uniquement</simpara></listitem>
+ <listitem><simpara>Longeur maximale/minimale d'une chaine de caractères</simpara></listitem>
+ <listitem><simpara>Valeur différente de zéro</simpara></listitem>
+ <listitem><simpara>Pas de signe de ponctuation</simpara></listitem>
+ <listitem><simpara>Valeur numérique</simpara></listitem>
+ <listitem><simpara>Comparaison de valeur</simpara></listitem>
+ <listitem><simpara>Date</simpara></listitem>
+ <listitem><simpara>Adresse mail</simpara></listitem>
+ <listitem><simpara>Poids d'une image</simpara></listitem>
+ <listitem><simpara>Taille d'une image</simpara></listitem>
+ <listitem><simpara>Type de fichiers images</simpara></listitem>
+ <listitem><simpara>Politique de mot de passe (longueur/caractères
+ autorisés/caractères obligatoires)</simpara></listitem>
+ </itemizedlist>
+
+</listitem>
+
+<listitem><simpara>Gestion simplifiée des relations entre les objets de
+l'annuaire</simpara></listitem>
+<listitem><simpara>Interface facilement personnalisable grâce à l'utilisation
+d'un système de template.</simpara></listitem>
+<listitem><simpara>Possibilité de postionner des déclencheurs permettant
+d'exécuter vos propres scripts, fonctions ou méthodes au moments précis ou
+l'utilisateur créé, modifie ou supprime un objet ou un de ses attributs.
+Ces déclencheurs, en fonction de leur positionnement, peuvent influencer le
+comportement de l'application en empêchant par exemple, la validation des données
+d'un formulaire.</simpara></listitem>
+<listitem><simpara>Gestion fine de l'affichage des attributs en fonction de l'écran
+(=vue) sur lequel se trouve l'utilisateur.</simpara></listitem>
+<listitem><simpara>Gestion des dépendances entre attributs, permettant par exemple
+de regénérer automatiquement la valeur d'un attribut caché lors de la modification
+d'un autre.</simpara></listitem>
+<listitem><simpara>Possibilité de gérer des attributs entièrement cachés, dont les
+valeurs seront modifiées lors de la modification d'attribut en
+dépendance.</simpara></listitem>
+</itemizedlist>
+</sect1>
+</chapter>
+
--- /dev/null
+<?xml version='1.0'?>
+<xsl:stylesheet
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:fo="http://www.w3.org/1999/XSL/Format"
+ version="1.0">
+
+<xsl:import href="/usr/share/xml/docbook/stylesheet/nwalsh/htmlhelp/htmlhelp.xsl"/>
+<xsl:param name="chunk.section.depth" select="4"/>
+<xsl:param name="chunk.first.sections" select="1"/>
+
+<xsl:param name="html.stylesheet" select="'../../../styles/LS.css'"/>
+
+<xsl:param name="admon.graphics" select="1"/>
+<xsl:param name="admon.graphics.path">../../../images/</xsl:param>
+<xsl:param name="admon.graphics.extension">.png</xsl:param>
+
+<xsl:param name="section.autolabel" select="1"></xsl:param>
+<xsl:param name="toc.section.depth">5</xsl:param>
+
+</xsl:stylesheet>
--- /dev/null
+<?xml version='1.0'?>
+<xsl:stylesheet
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:fo="http://www.w3.org/1999/XSL/Format"
+ version="1.0">
+
+<xsl:import href="/usr/share/xml/docbook/stylesheet/nwalsh/xhtml/chunk.xsl"/>
+<xsl:param name="chunk.section.depth" select="4"/>
+<xsl:param name="chunk.first.sections" select="1"/>
+
+<xsl:param name="html.stylesheet" select="'../../../styles/LS.css'"/>
+
+<xsl:param name="admon.graphics" select="1"/>
+<xsl:param name="admon.graphics.path">../../../images/</xsl:param>
+<xsl:param name="admon.graphics.extension">.png</xsl:param>
+
+<xsl:param name="section.autolabel" select="1"></xsl:param>
+<xsl:param name="toc.section.depth">5</xsl:param>
+
+</xsl:stylesheet>
--- /dev/null
+body {
+ font-family: sans-serif;
+}
+
+hr {
+ border: none;
+ border-bottom: 1px solid;
+}
+
+/*
+ * Title
+ */
+h2.title, h3.title, h4.title, h5.title, h6.title{
+ color: #000;
+ font-weight: bold;
+ border-bottom: 1px solid;
+}
+
+h2.title {
+ font-size: 24px;
+}
+
+h3.title {
+ font-size: 20px;
+}
+
+h4.title {
+ font-size: 16px;
+}
+
+h5.title, h6.title {
+ font-size: 14px;
+}
+
+h5.title {
+ margin-left: 2em;
+}
+
+/*
+ * Menu
+ */
+div.toc a {
+ text-decoration: none;
+}
+
+/*
+ * Code
+ */
+pre.programlisting {
+ border-style: solid;
+ border-color: #60B7D4;
+ -moz-border-radius: 6px;
+ border-width: 1px 1px 1px 6px;
+ opacity: 0.7;
+ background-color: #D4E8EE;
+ padding: 0.5em;
+ width: 90%;
+ margin: auto;
+ color: #111;
+}
+
+em.citetitle {
+ -moz-border-radius: 6px;
+ background-color: #60B7D4;
+ font-family: sans-serif;
+ font-size: 1em;
+ font-style: normal;
+ padding: 5px;
+ margin: 0.2em;
+ margin-top: -1em;
+ display: block;
+ width: 50%;
+ -moz-border-radius: 6px;
+}
+
+/*
+ * Warning / Important / Note
+ */
+div.warning, div.important, div.note {
+ margin: 10px;
+ padding: 10px;
+ -moz-border-radius: 20px;
+}
+
+div.warning table, div.important table, div.note table {
+ color: #fff;
+ border: none;
+}
+
+div.warning table th, div.important table th, div.note table th {
+ background-color: transparent;
+ font-size: 1.2em;
+}
+
+div.warning a, div.important a, div.note a {
+ color: #fff;
+ font-weight: bold;
+}
+
+/*
+ * Warning
+ */
+div.warning {
+ background-color: #FF3B3B;
+}
+
+
+/*
+ * Important
+ */
+div.important {
+ background-color: #366CEB;
+}
+
+/*
+ * Note
+ */
+div.note {
+ background-color: #4D4D4D;
+}
+
+/*
+ * Tableau
+ */
+table {
+ border: 1px solid #000;
+ border-collapse: collapse;
+}
+
+td {
+ padding: 0.3em;
+}
+
+th {
+ background-color: #D4E8EE;
+ font-weight: bold;
+}
+
+div.navheader th {
+ background-color: transparent;
+}
+
+span.term {
+ font-family: courier;
+ font-size: 1.1em;
+ margin: 5px;
+}
--- /dev/null
+<?xml version='1.0'?>
+<xsl:stylesheet
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:fo="http://www.w3.org/1999/XSL/Format"
+ version="1.0">
+
+<xsl:import href="/usr/share/xml/docbook/stylesheet/nwalsh/html/docbook.xsl"/>
+
+<xsl:param name="html.stylesheet" select="'../../../styles/LS.css'"/>
+
+<xsl:param name="admon.graphics" select="1"/>
+<xsl:param name="admon.graphics.path">../../../images/</xsl:param>
+<xsl:param name="admon.graphics.extension">.png</xsl:param>
+
+<xsl:param name="section.autolabel" select="1"></xsl:param>
+<xsl:param name="toc.section.depth">5</xsl:param>
+</xsl:stylesheet>