- Documentation : commit initial.

This commit is contained in:
Benjamin Renard 2009-03-17 19:21:10 +00:00
parent 05c2157f69
commit 13dff86fd1
83 changed files with 3968 additions and 0 deletions

23
doc/LS.entities.xml Normal file
View file

@ -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>">

49
doc/LdapSaisie.docbook Normal file
View file

@ -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>

13
doc/Makefile Normal file
View file

@ -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

View file

@ -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>

11
doc/conf/LSaddon.docbook Normal file
View file

@ -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>

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!ENTITY conf-LSaddon_maildir SYSTEM "LSaddon_maildir.docbook">

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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">

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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">

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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">

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

36
doc/conf/LSformat.docbook Normal file
View file

@ -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>

225
doc/conf/LSobject.docbook Normal file
View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

234
doc/conf/LSprofile.docbook Normal file
View file

@ -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 -->

22
doc/conf/conf.docbook Normal file
View file

@ -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>

View file

@ -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">

134
doc/conf/globale.docbook Normal file
View file

@ -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>

View file

@ -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 -->

189
doc/conf/srv-ldap.docbook Normal file
View file

@ -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>

97
doc/conf/subDn.docbook Normal file
View file

@ -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 -->

23
doc/exports/Makefile Normal file
View file

@ -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

23
doc/exports/html/Makefile Normal file
View file

@ -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/*

13
doc/exports/pdf/Makefile Normal file
View file

@ -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)

BIN
doc/images/important.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

BIN
doc/images/note.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

BIN
doc/images/tip.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

BIN
doc/images/warning.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

128
doc/install/arbo.docbook Normal file
View file

@ -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>

117
doc/install/install.docbook Normal file
View file

@ -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>

97
doc/intro/intro.docbook Normal file
View file

@ -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>

20
doc/styles/LS-help.xsl Normal file
View file

@ -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>

20
doc/styles/LS-multi.xsl Normal file
View file

@ -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>

147
doc/styles/LS.css Normal file
View file

@ -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;
}

17
doc/styles/LS.xsl Normal file
View file

@ -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>