- Documentation : commit initial.
authorBenjamin Renard <brenard@easter-eggs.com>
Tue, 17 Mar 2009 19:21:10 +0000 (19:21 +0000)
committerBenjamin Renard <brenard@easter-eggs.com>
Tue, 17 Mar 2009 19:21:10 +0000 (19:21 +0000)
83 files changed:
doc/LS.entities.xml [new file with mode: 0644]
doc/LdapSaisie.docbook [new file with mode: 0644]
doc/Makefile [new file with mode: 0644]
doc/conf/LDAP_search_params.docbook [new file with mode: 0644]
doc/conf/LSaddon.docbook [new file with mode: 0644]
doc/conf/LSaddon/LSaddon.entities.xml [new file with mode: 0644]
doc/conf/LSaddon/LSaddon_maildir.docbook [new file with mode: 0644]
doc/conf/LSattribute.docbook [new file with mode: 0644]
doc/conf/LSattribute/LSattr_html.docbook [new file with mode: 0644]
doc/conf/LSattribute/LSattr_html/LSattr_html.entities.xml [new file with mode: 0644]
doc/conf/LSattribute/LSattr_html/LSattr_html_boolean.docbook [new file with mode: 0644]
doc/conf/LSattribute/LSattr_html/LSattr_html_date.docbook [new file with mode: 0644]
doc/conf/LSattribute/LSattr_html/LSattr_html_image.docbook [new file with mode: 0644]
doc/conf/LSattribute/LSattr_html/LSattr_html_mail.docbook [new file with mode: 0644]
doc/conf/LSattribute/LSattr_html/LSattr_html_mailQuota.docbook [new file with mode: 0644]
doc/conf/LSattribute/LSattr_html/LSattr_html_maildir.docbook [new file with mode: 0644]
doc/conf/LSattribute/LSattr_html/LSattr_html_password.docbook [new file with mode: 0644]
doc/conf/LSattribute/LSattr_html/LSattr_html_rss.docbook [new file with mode: 0644]
doc/conf/LSattribute/LSattr_html/LSattr_html_select_list.docbook [new file with mode: 0644]
doc/conf/LSattribute/LSattr_html/LSattr_html_select_object.docbook [new file with mode: 0644]
doc/conf/LSattribute/LSattr_html/LSattr_html_ssh_key.docbook [new file with mode: 0644]
doc/conf/LSattribute/LSattr_html/LSattr_html_text.docbook [new file with mode: 0644]
doc/conf/LSattribute/LSattr_html/LSattr_html_textarea.docbook [new file with mode: 0644]
doc/conf/LSattribute/LSattr_html/LSattr_html_url.docbook [new file with mode: 0644]
doc/conf/LSattribute/LSattr_html/LSattr_html_xmpp.docbook [new file with mode: 0644]
doc/conf/LSattribute/LSattr_ldap.docbook [new file with mode: 0644]
doc/conf/LSattribute/LSattr_ldap/LSattr_ldap.entities.xml [new file with mode: 0644]
doc/conf/LSattribute/LSattr_ldap/LSattr_ldap_ascii.docbook [new file with mode: 0644]
doc/conf/LSattribute/LSattr_ldap/LSattr_ldap_boolean.docbook [new file with mode: 0644]
doc/conf/LSattribute/LSattr_ldap/LSattr_ldap_date.docbook [new file with mode: 0644]
doc/conf/LSattribute/LSattr_ldap/LSattr_ldap_image.docbook [new file with mode: 0644]
doc/conf/LSattribute/LSattr_ldap/LSattr_ldap_numeric.docbook [new file with mode: 0644]
doc/conf/LSattribute/LSattr_ldap/LSattr_ldap_password.docbook [new file with mode: 0644]
doc/conf/LSattribute/check-data.docbook [new file with mode: 0644]
doc/conf/LSattribute/check_data/LSattribute-check_data.entities.xml [new file with mode: 0644]
doc/conf/LSattribute/check_data/alphanumeric.docbook [new file with mode: 0644]
doc/conf/LSattribute/check_data/date.docbook [new file with mode: 0644]
doc/conf/LSattribute/check_data/email.docbook [new file with mode: 0644]
doc/conf/LSattribute/check_data/filesize.docbook [new file with mode: 0644]
doc/conf/LSattribute/check_data/imagefile.docbook [new file with mode: 0644]
doc/conf/LSattribute/check_data/imagesize.docbook [new file with mode: 0644]
doc/conf/LSattribute/check_data/lettersonly.docbook [new file with mode: 0644]
doc/conf/LSattribute/check_data/maxlength.docbook [new file with mode: 0644]
doc/conf/LSattribute/check_data/mimetype.docbook [new file with mode: 0644]
doc/conf/LSattribute/check_data/minlength.docbook [new file with mode: 0644]
doc/conf/LSattribute/check_data/nonzero.docbook [new file with mode: 0644]
doc/conf/LSattribute/check_data/nopunctuation.docbook [new file with mode: 0644]
doc/conf/LSattribute/check_data/numeric.docbook [new file with mode: 0644]
doc/conf/LSattribute/check_data/password.docbook [new file with mode: 0644]
doc/conf/LSattribute/check_data/rangelength.docbook [new file with mode: 0644]
doc/conf/LSattribute/check_data/regex.docbook [new file with mode: 0644]
doc/conf/LSattribute/check_data/required.docbook [new file with mode: 0644]
doc/conf/LSattribute/check_data/telephonenumber.docbook [new file with mode: 0644]
doc/conf/LSattribute/triggers.docbook [new file with mode: 0644]
doc/conf/LSattribute/validation.docbook [new file with mode: 0644]
doc/conf/LSformat.docbook [new file with mode: 0644]
doc/conf/LSobject.docbook [new file with mode: 0644]
doc/conf/LSobject/LSform.docbook [new file with mode: 0644]
doc/conf/LSobject/LSrelation.docbook [new file with mode: 0644]
doc/conf/LSobject/LSsearch.docbook [new file with mode: 0644]
doc/conf/LSobject/container_auto_create.docbook [new file with mode: 0644]
doc/conf/LSobject/triggers.docbook [new file with mode: 0644]
doc/conf/LSprofile.docbook [new file with mode: 0644]
doc/conf/conf.docbook [new file with mode: 0644]
doc/conf/conf.entities.xml [new file with mode: 0644]
doc/conf/globale.docbook [new file with mode: 0644]
doc/conf/recoverPassword.docbook [new file with mode: 0644]
doc/conf/srv-ldap.docbook [new file with mode: 0644]
doc/conf/subDn.docbook [new file with mode: 0644]
doc/exports/Makefile [new file with mode: 0644]
doc/exports/html/Makefile [new file with mode: 0644]
doc/exports/pdf/Makefile [new file with mode: 0644]
doc/images/important.png [new file with mode: 0644]
doc/images/note.png [new file with mode: 0644]
doc/images/tip.png [new file with mode: 0644]
doc/images/warning.png [new file with mode: 0644]
doc/install/arbo.docbook [new file with mode: 0644]
doc/install/install.docbook [new file with mode: 0644]
doc/intro/intro.docbook [new file with mode: 0644]
doc/styles/LS-help.xsl [new file with mode: 0644]
doc/styles/LS-multi.xsl [new file with mode: 0644]
doc/styles/LS.css [new file with mode: 0644]
doc/styles/LS.xsl [new file with mode: 0644]

diff --git a/doc/LS.entities.xml b/doc/LS.entities.xml
new file mode 100644 (file)
index 0000000..05e1a73
--- /dev/null
@@ -0,0 +1,23 @@
+<?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>">
diff --git a/doc/LdapSaisie.docbook b/doc/LdapSaisie.docbook
new file mode 100644 (file)
index 0000000..0c27dac
--- /dev/null
@@ -0,0 +1,49 @@
+<?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>
diff --git a/doc/Makefile b/doc/Makefile
new file mode 100644 (file)
index 0000000..3ca6173
--- /dev/null
@@ -0,0 +1,13 @@
+DOCBOOK_FILE=LdapSaisie.docbook
+
+all:    validate export
+
+# Validation
+validate:
+                               xmllint --valid --noout $(DOCBOOK_FILE) 
+
+export:
+                               cd exports; make all
+
+clean:
+                               cd exports; make clean
diff --git a/doc/conf/LDAP_search_params.docbook b/doc/conf/LDAP_search_params.docbook
new file mode 100644 (file)
index 0000000..e96a375
--- /dev/null
@@ -0,0 +1,57 @@
+<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>
diff --git a/doc/conf/LSaddon.docbook b/doc/conf/LSaddon.docbook
new file mode 100644 (file)
index 0000000..93cbad7
--- /dev/null
@@ -0,0 +1,11 @@
+<?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>
diff --git a/doc/conf/LSaddon/LSaddon.entities.xml b/doc/conf/LSaddon/LSaddon.entities.xml
new file mode 100644 (file)
index 0000000..73773cb
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!ENTITY conf-LSaddon_maildir SYSTEM "LSaddon_maildir.docbook">
+
+
+
+
diff --git a/doc/conf/LSaddon/LSaddon_maildir.docbook b/doc/conf/LSaddon/LSaddon_maildir.docbook
new file mode 100644 (file)
index 0000000..1a09f7b
--- /dev/null
@@ -0,0 +1,5 @@
+<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>
diff --git a/doc/conf/LSattribute.docbook b/doc/conf/LSattribute.docbook
new file mode 100644 (file)
index 0000000..5125ac4
--- /dev/null
@@ -0,0 +1,237 @@
+<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>
diff --git a/doc/conf/LSattribute/LSattr_html.docbook b/doc/conf/LSattribute/LSattr_html.docbook
new file mode 100644 (file)
index 0000000..33ec2f1
--- /dev/null
@@ -0,0 +1,22 @@
+<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>
diff --git a/doc/conf/LSattribute/LSattr_html/LSattr_html.entities.xml b/doc/conf/LSattribute/LSattr_html/LSattr_html.entities.xml
new file mode 100644 (file)
index 0000000..6339df2
--- /dev/null
@@ -0,0 +1,16 @@
+<?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">
diff --git a/doc/conf/LSattribute/LSattr_html/LSattr_html_boolean.docbook b/doc/conf/LSattribute/LSattr_html/LSattr_html_boolean.docbook
new file mode 100644 (file)
index 0000000..9b0cf15
--- /dev/null
@@ -0,0 +1,14 @@
+<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>
diff --git a/doc/conf/LSattribute/LSattr_html/LSattr_html_date.docbook b/doc/conf/LSattribute/LSattr_html/LSattr_html_date.docbook
new file mode 100644 (file)
index 0000000..236e916
--- /dev/null
@@ -0,0 +1,40 @@
+<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>
diff --git a/doc/conf/LSattribute/LSattr_html/LSattr_html_image.docbook b/doc/conf/LSattribute/LSattr_html/LSattr_html_image.docbook
new file mode 100644 (file)
index 0000000..02f7120
--- /dev/null
@@ -0,0 +1,6 @@
+<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>
diff --git a/doc/conf/LSattribute/LSattr_html/LSattr_html_mail.docbook b/doc/conf/LSattribute/LSattr_html/LSattr_html_mail.docbook
new file mode 100644 (file)
index 0000000..631b237
--- /dev/null
@@ -0,0 +1,10 @@
+<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>
diff --git a/doc/conf/LSattribute/LSattr_html/LSattr_html_mailQuota.docbook b/doc/conf/LSattribute/LSattr_html/LSattr_html_mailQuota.docbook
new file mode 100644 (file)
index 0000000..74fca6b
--- /dev/null
@@ -0,0 +1,7 @@
+<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>
diff --git a/doc/conf/LSattribute/LSattr_html/LSattr_html_maildir.docbook b/doc/conf/LSattribute/LSattr_html/LSattr_html_maildir.docbook
new file mode 100644 (file)
index 0000000..2b8fa32
--- /dev/null
@@ -0,0 +1,82 @@
+<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>
diff --git a/doc/conf/LSattribute/LSattr_html/LSattr_html_password.docbook b/doc/conf/LSattribute/LSattr_html/LSattr_html_password.docbook
new file mode 100644 (file)
index 0000000..fd58d68
--- /dev/null
@@ -0,0 +1,157 @@
+<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>
diff --git a/doc/conf/LSattribute/LSattr_html/LSattr_html_rss.docbook b/doc/conf/LSattribute/LSattr_html/LSattr_html_rss.docbook
new file mode 100644 (file)
index 0000000..5580c50
--- /dev/null
@@ -0,0 +1,10 @@
+<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>
diff --git a/doc/conf/LSattribute/LSattr_html/LSattr_html_select_list.docbook b/doc/conf/LSattribute/LSattr_html/LSattr_html_select_list.docbook
new file mode 100644 (file)
index 0000000..dc8e1d4
--- /dev/null
@@ -0,0 +1,100 @@
+<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>
diff --git a/doc/conf/LSattribute/LSattr_html/LSattr_html_select_object.docbook b/doc/conf/LSattribute/LSattr_html/LSattr_html_select_object.docbook
new file mode 100644 (file)
index 0000000..9847fba
--- /dev/null
@@ -0,0 +1,67 @@
+<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>
diff --git a/doc/conf/LSattribute/LSattr_html/LSattr_html_ssh_key.docbook b/doc/conf/LSattribute/LSattr_html/LSattr_html_ssh_key.docbook
new file mode 100644 (file)
index 0000000..1477355
--- /dev/null
@@ -0,0 +1,6 @@
+<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>
diff --git a/doc/conf/LSattribute/LSattr_html/LSattr_html_text.docbook b/doc/conf/LSattribute/LSattr_html/LSattr_html_text.docbook
new file mode 100644 (file)
index 0000000..378eeca
--- /dev/null
@@ -0,0 +1,96 @@
+<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>
diff --git a/doc/conf/LSattribute/LSattr_html/LSattr_html_textarea.docbook b/doc/conf/LSattribute/LSattr_html/LSattr_html_textarea.docbook
new file mode 100644 (file)
index 0000000..b67de46
--- /dev/null
@@ -0,0 +1,7 @@
+<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>
diff --git a/doc/conf/LSattribute/LSattr_html/LSattr_html_url.docbook b/doc/conf/LSattribute/LSattr_html/LSattr_html_url.docbook
new file mode 100644 (file)
index 0000000..05e61c3
--- /dev/null
@@ -0,0 +1,11 @@
+<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>
diff --git a/doc/conf/LSattribute/LSattr_html/LSattr_html_xmpp.docbook b/doc/conf/LSattribute/LSattr_html/LSattr_html_xmpp.docbook
new file mode 100644 (file)
index 0000000..9a8d211
--- /dev/null
@@ -0,0 +1,14 @@
+<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>
diff --git a/doc/conf/LSattribute/LSattr_ldap.docbook b/doc/conf/LSattribute/LSattr_ldap.docbook
new file mode 100644 (file)
index 0000000..948656d
--- /dev/null
@@ -0,0 +1,12 @@
+<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>
diff --git a/doc/conf/LSattribute/LSattr_ldap/LSattr_ldap.entities.xml b/doc/conf/LSattribute/LSattr_ldap/LSattr_ldap.entities.xml
new file mode 100644 (file)
index 0000000..95bb528
--- /dev/null
@@ -0,0 +1,7 @@
+<?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">
diff --git a/doc/conf/LSattribute/LSattr_ldap/LSattr_ldap_ascii.docbook b/doc/conf/LSattribute/LSattr_ldap/LSattr_ldap_ascii.docbook
new file mode 100644 (file)
index 0000000..1a144ff
--- /dev/null
@@ -0,0 +1,6 @@
+<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>
diff --git a/doc/conf/LSattribute/LSattr_ldap/LSattr_ldap_boolean.docbook b/doc/conf/LSattribute/LSattr_ldap/LSattr_ldap_boolean.docbook
new file mode 100644 (file)
index 0000000..8d96e14
--- /dev/null
@@ -0,0 +1,37 @@
+<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>
diff --git a/doc/conf/LSattribute/LSattr_ldap/LSattr_ldap_date.docbook b/doc/conf/LSattribute/LSattr_ldap/LSattr_ldap_date.docbook
new file mode 100644 (file)
index 0000000..faaef03
--- /dev/null
@@ -0,0 +1,47 @@
+<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>
diff --git a/doc/conf/LSattribute/LSattr_ldap/LSattr_ldap_image.docbook b/doc/conf/LSattribute/LSattr_ldap/LSattr_ldap_image.docbook
new file mode 100644 (file)
index 0000000..ce9dcce
--- /dev/null
@@ -0,0 +1,7 @@
+<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>
diff --git a/doc/conf/LSattribute/LSattr_ldap/LSattr_ldap_numeric.docbook b/doc/conf/LSattribute/LSattr_ldap/LSattr_ldap_numeric.docbook
new file mode 100644 (file)
index 0000000..91284d0
--- /dev/null
@@ -0,0 +1,7 @@
+<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>
diff --git a/doc/conf/LSattribute/LSattr_ldap/LSattr_ldap_password.docbook b/doc/conf/LSattribute/LSattr_ldap/LSattr_ldap_password.docbook
new file mode 100644 (file)
index 0000000..2a7dd85
--- /dev/null
@@ -0,0 +1,55 @@
+<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>
diff --git a/doc/conf/LSattribute/check-data.docbook b/doc/conf/LSattribute/check-data.docbook
new file mode 100644 (file)
index 0000000..52be7c7
--- /dev/null
@@ -0,0 +1,66 @@
+<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>
diff --git a/doc/conf/LSattribute/check_data/LSattribute-check_data.entities.xml b/doc/conf/LSattribute/check_data/LSattribute-check_data.entities.xml
new file mode 100644 (file)
index 0000000..74bad91
--- /dev/null
@@ -0,0 +1,19 @@
+<?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">
diff --git a/doc/conf/LSattribute/check_data/alphanumeric.docbook b/doc/conf/LSattribute/check_data/alphanumeric.docbook
new file mode 100644 (file)
index 0000000..b8ac6e4
--- /dev/null
@@ -0,0 +1,6 @@
+<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>
diff --git a/doc/conf/LSattribute/check_data/date.docbook b/doc/conf/LSattribute/check_data/date.docbook
new file mode 100644 (file)
index 0000000..8d8a331
--- /dev/null
@@ -0,0 +1,21 @@
+<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>
diff --git a/doc/conf/LSattribute/check_data/email.docbook b/doc/conf/LSattribute/check_data/email.docbook
new file mode 100644 (file)
index 0000000..05c70b0
--- /dev/null
@@ -0,0 +1,29 @@
+<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>
diff --git a/doc/conf/LSattribute/check_data/filesize.docbook b/doc/conf/LSattribute/check_data/filesize.docbook
new file mode 100644 (file)
index 0000000..2a17620
--- /dev/null
@@ -0,0 +1,25 @@
+<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>
diff --git a/doc/conf/LSattribute/check_data/imagefile.docbook b/doc/conf/LSattribute/check_data/imagefile.docbook
new file mode 100644 (file)
index 0000000..a42ee96
--- /dev/null
@@ -0,0 +1,12 @@
+<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>
diff --git a/doc/conf/LSattribute/check_data/imagesize.docbook b/doc/conf/LSattribute/check_data/imagesize.docbook
new file mode 100644 (file)
index 0000000..36c305a
--- /dev/null
@@ -0,0 +1,39 @@
+<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>
diff --git a/doc/conf/LSattribute/check_data/lettersonly.docbook b/doc/conf/LSattribute/check_data/lettersonly.docbook
new file mode 100644 (file)
index 0000000..37e885c
--- /dev/null
@@ -0,0 +1,5 @@
+<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>
diff --git a/doc/conf/LSattribute/check_data/maxlength.docbook b/doc/conf/LSattribute/check_data/maxlength.docbook
new file mode 100644 (file)
index 0000000..016e14d
--- /dev/null
@@ -0,0 +1,18 @@
+<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>
diff --git a/doc/conf/LSattribute/check_data/mimetype.docbook b/doc/conf/LSattribute/check_data/mimetype.docbook
new file mode 100644 (file)
index 0000000..c5e0aef
--- /dev/null
@@ -0,0 +1,27 @@
+<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>
diff --git a/doc/conf/LSattribute/check_data/minlength.docbook b/doc/conf/LSattribute/check_data/minlength.docbook
new file mode 100644 (file)
index 0000000..c6997ef
--- /dev/null
@@ -0,0 +1,18 @@
+<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>
diff --git a/doc/conf/LSattribute/check_data/nonzero.docbook b/doc/conf/LSattribute/check_data/nonzero.docbook
new file mode 100644 (file)
index 0000000..16f835d
--- /dev/null
@@ -0,0 +1,4 @@
+<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>
diff --git a/doc/conf/LSattribute/check_data/nopunctuation.docbook b/doc/conf/LSattribute/check_data/nopunctuation.docbook
new file mode 100644 (file)
index 0000000..73df567
--- /dev/null
@@ -0,0 +1,6 @@
+<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>
diff --git a/doc/conf/LSattribute/check_data/numeric.docbook b/doc/conf/LSattribute/check_data/numeric.docbook
new file mode 100644 (file)
index 0000000..e9ddb85
--- /dev/null
@@ -0,0 +1,4 @@
+<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>
diff --git a/doc/conf/LSattribute/check_data/password.docbook b/doc/conf/LSattribute/check_data/password.docbook
new file mode 100644 (file)
index 0000000..cffccf1
--- /dev/null
@@ -0,0 +1,41 @@
+<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>
diff --git a/doc/conf/LSattribute/check_data/rangelength.docbook b/doc/conf/LSattribute/check_data/rangelength.docbook
new file mode 100644 (file)
index 0000000..a7c053f
--- /dev/null
@@ -0,0 +1,19 @@
+<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>
diff --git a/doc/conf/LSattribute/check_data/regex.docbook b/doc/conf/LSattribute/check_data/regex.docbook
new file mode 100644 (file)
index 0000000..517b691
--- /dev/null
@@ -0,0 +1,18 @@
+<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>
diff --git a/doc/conf/LSattribute/check_data/required.docbook b/doc/conf/LSattribute/check_data/required.docbook
new file mode 100644 (file)
index 0000000..efc636b
--- /dev/null
@@ -0,0 +1,5 @@
+<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>
diff --git a/doc/conf/LSattribute/check_data/telephonenumber.docbook b/doc/conf/LSattribute/check_data/telephonenumber.docbook
new file mode 100644 (file)
index 0000000..63163f0
--- /dev/null
@@ -0,0 +1,6 @@
+<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>
diff --git a/doc/conf/LSattribute/triggers.docbook b/doc/conf/LSattribute/triggers.docbook
new file mode 100644 (file)
index 0000000..0769439
--- /dev/null
@@ -0,0 +1,101 @@
+<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>
diff --git a/doc/conf/LSattribute/validation.docbook b/doc/conf/LSattribute/validation.docbook
new file mode 100644 (file)
index 0000000..b827c00
--- /dev/null
@@ -0,0 +1,137 @@
+<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>
diff --git a/doc/conf/LSformat.docbook b/doc/conf/LSformat.docbook
new file mode 100644 (file)
index 0000000..3a8ec60
--- /dev/null
@@ -0,0 +1,36 @@
+<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&nbsp;:
+<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&nbsp;:
+<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>
diff --git a/doc/conf/LSobject.docbook b/doc/conf/LSobject.docbook
new file mode 100644 (file)
index 0000000..7275a01
--- /dev/null
@@ -0,0 +1,225 @@
+<?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>
diff --git a/doc/conf/LSobject/LSform.docbook b/doc/conf/LSobject/LSform.docbook
new file mode 100644 (file)
index 0000000..c53828e
--- /dev/null
@@ -0,0 +1,128 @@
+<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>
diff --git a/doc/conf/LSobject/LSrelation.docbook b/doc/conf/LSobject/LSrelation.docbook
new file mode 100644 (file)
index 0000000..50970d7
--- /dev/null
@@ -0,0 +1,113 @@
+<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>
diff --git a/doc/conf/LSobject/LSsearch.docbook b/doc/conf/LSobject/LSsearch.docbook
new file mode 100644 (file)
index 0000000..700bfc3
--- /dev/null
@@ -0,0 +1,47 @@
+<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>
diff --git a/doc/conf/LSobject/container_auto_create.docbook b/doc/conf/LSobject/container_auto_create.docbook
new file mode 100644 (file)
index 0000000..28cf7f4
--- /dev/null
@@ -0,0 +1,52 @@
+<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>
diff --git a/doc/conf/LSobject/triggers.docbook b/doc/conf/LSobject/triggers.docbook
new file mode 100644 (file)
index 0000000..be776b8
--- /dev/null
@@ -0,0 +1,109 @@
+<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>
diff --git a/doc/conf/LSprofile.docbook b/doc/conf/LSprofile.docbook
new file mode 100644 (file)
index 0000000..152f907
--- /dev/null
@@ -0,0 +1,234 @@
+<?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&nbsp;:
+</para>
+
+<itemizedlist>
+
+<!-- D - Pour basedn -->
+<listitem>
+<para>Pour une branche de l'annuaire donnée (<emphasis>basedn</emphasis>)&nbsp;: 
+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&nbsp;:</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&nbsp;: 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&nbsp;:</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&nbsp;: 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é&nbsp;: 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&nbsp;: 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&nbsp;:
+
+<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 -->
diff --git a/doc/conf/conf.docbook b/doc/conf/conf.docbook
new file mode 100644 (file)
index 0000000..83b1a91
--- /dev/null
@@ -0,0 +1,22 @@
+<?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>
diff --git a/doc/conf/conf.entities.xml b/doc/conf/conf.entities.xml
new file mode 100644 (file)
index 0000000..51c2311
--- /dev/null
@@ -0,0 +1,26 @@
+<?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">
+
diff --git a/doc/conf/globale.docbook b/doc/conf/globale.docbook
new file mode 100644 (file)
index 0000000..f60c1c7
--- /dev/null
@@ -0,0 +1,134 @@
+<?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>
diff --git a/doc/conf/recoverPassword.docbook b/doc/conf/recoverPassword.docbook
new file mode 100644 (file)
index 0000000..c72724a
--- /dev/null
@@ -0,0 +1,81 @@
+<?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&nbsp;:
+  <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 -->
diff --git a/doc/conf/srv-ldap.docbook b/doc/conf/srv-ldap.docbook
new file mode 100644 (file)
index 0000000..80f75af
--- /dev/null
@@ -0,0 +1,189 @@
+<?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>
diff --git a/doc/conf/subDn.docbook b/doc/conf/subDn.docbook
new file mode 100644 (file)
index 0000000..276a5e0
--- /dev/null
@@ -0,0 +1,97 @@
+<?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&nbsp;: 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&nbsp;:
+<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 -->
diff --git a/doc/exports/Makefile b/doc/exports/Makefile
new file mode 100644 (file)
index 0000000..3c81608
--- /dev/null
@@ -0,0 +1,23 @@
+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
diff --git a/doc/exports/html/Makefile b/doc/exports/html/Makefile
new file mode 100644 (file)
index 0000000..8629159
--- /dev/null
@@ -0,0 +1,23 @@
+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/*
diff --git a/doc/exports/pdf/Makefile b/doc/exports/pdf/Makefile
new file mode 100644 (file)
index 0000000..d2a720c
--- /dev/null
@@ -0,0 +1,13 @@
+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)
diff --git a/doc/images/important.png b/doc/images/important.png
new file mode 100644 (file)
index 0000000..dc8c8a4
Binary files /dev/null and b/doc/images/important.png differ
diff --git a/doc/images/note.png b/doc/images/note.png
new file mode 100644 (file)
index 0000000..df1e0a9
Binary files /dev/null and b/doc/images/note.png differ
diff --git a/doc/images/tip.png b/doc/images/tip.png
new file mode 100644 (file)
index 0000000..2000f20
Binary files /dev/null and b/doc/images/tip.png differ
diff --git a/doc/images/warning.png b/doc/images/warning.png
new file mode 100644 (file)
index 0000000..3c8a37d
Binary files /dev/null and b/doc/images/warning.png differ
diff --git a/doc/install/arbo.docbook b/doc/install/arbo.docbook
new file mode 100644 (file)
index 0000000..ad4c098
--- /dev/null
@@ -0,0 +1,128 @@
+<?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>
diff --git a/doc/install/install.docbook b/doc/install/install.docbook
new file mode 100644 (file)
index 0000000..ff41a96
--- /dev/null
@@ -0,0 +1,117 @@
+<?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>
diff --git a/doc/intro/intro.docbook b/doc/intro/intro.docbook
new file mode 100644 (file)
index 0000000..e85f761
--- /dev/null
@@ -0,0 +1,97 @@
+<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>
+
diff --git a/doc/styles/LS-help.xsl b/doc/styles/LS-help.xsl
new file mode 100644 (file)
index 0000000..e106054
--- /dev/null
@@ -0,0 +1,20 @@
+<?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>  
diff --git a/doc/styles/LS-multi.xsl b/doc/styles/LS-multi.xsl
new file mode 100644 (file)
index 0000000..c6ee825
--- /dev/null
@@ -0,0 +1,20 @@
+<?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>  
diff --git a/doc/styles/LS.css b/doc/styles/LS.css
new file mode 100644 (file)
index 0000000..286780b
--- /dev/null
@@ -0,0 +1,147 @@
+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;
+}
diff --git a/doc/styles/LS.xsl b/doc/styles/LS.xsl
new file mode 100644 (file)
index 0000000..83aa89f
--- /dev/null
@@ -0,0 +1,17 @@
+<?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>