Compare commits

..

No commits in common. "2de8c720b5e4431131588b9509462834ab93b234" and "11a8448b0ae0c61fda3e18819654e1c9bbc806ae" have entirely different histories.

276 changed files with 11435 additions and 8489 deletions

3
.gitignore vendored
View file

@ -5,6 +5,3 @@ vendor
/src/local.*
tests-report*.xml
.phplint-cache
/ldapsaisie-snapshot.tar.gz
/dist
/.env

View file

@ -1,7 +1,5 @@
stages:
- tests
- build
- publish
tests:bullseye:
image:
@ -86,99 +84,14 @@ tests:jessie:
- rm -f .phplint-cache
- /tmp/vendor/bin/phplint src
build:debian-sid:
image: brenard/debian-python-deb:debian11
stage: build
tests:doc:
image: registry.gitlab.com/pipeline-components/xmllint:latest
stage: tests
rules:
- changes:
- doc/*.docbook
- doc/*.xml
- doc/**/*.docbook
- doc/**/*.xml
script:
- ./build-deb.sh --install-build-deps --sid
artifacts:
paths:
- dist/*
build:snapshot:
stage: build
image: alpine
script:
- tar -czf ldapsaisie-snapshot.tar.gz --exclude=ldapsaisie-snapshot.tar.gz ./
artifacts:
paths:
- ldapsaisie-snapshot.tar.gz
build:doc:
stage: build
image: python:alpine
before_script:
- apk add make
script:
- cd doc
- make public_html LdapSaisie.html
artifacts:
paths:
- doc/public_html/
- doc/LdapSaisie.html
build:doc:pdf:
stage: build
image:
name: pink33n/html-to-pdf
entrypoint: ["/bin/sh", "-c"]
needs:
- build:doc
script:
- /usr/local/bin/entrypoint --url file://$(pwd)/doc/LdapSaisie.html --pdf doc/LdapSaisie.pdf
artifacts:
paths:
- doc/LdapSaisie.pdf
build:doc:epub:
stage: build
image:
name: pandoc/core
entrypoint: ["/bin/sh", "-c"]
needs:
- build:doc
before_script:
- apk add make
script:
- cd doc
- test ! -d venv && mkdir venv && touch public_html LdapSaisie.html
- make LdapSaisie.epub
artifacts:
paths:
- doc/LdapSaisie.epub
publish:
stage: publish
image: alpine:latest
needs:
- 'build:doc'
- 'build:doc:pdf'
- 'build:doc:epub'
- 'build:snapshot'
before_script:
- apk update && apk add openssh-client rsync
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | base64 -d | ssh-add -
- mkdir ~/.ssh
- echo "$SSH_HOST_KEY" | base64 -d > ~/.ssh/known_hosts
script:
- rsync -atv --exclude '.git*' --delete --progress ./doc/public_html/ $SSH_USER@$SSH_HOST:doc/
- rsync -atv ./doc/LdapSaisie.html ./doc/LdapSaisie.pdf ./doc/LdapSaisie.epub $SSH_USER@$SSH_HOST:doc/
- rsync -atv ldapsaisie-snapshot.tar.gz $SSH_USER@$SSH_HOST:download/ldapsaisie-snapshot.tar.gz
publish:debian-sid:
stage: publish
image: debian:stable-slim
needs:
- 'build:debian-sid'
before_script:
- apt-get update
- apt-get install -y --no-install-recommends rsync openssh-client dupload
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | base64 -d | ssh-add -
- mkdir ~/.ssh
- echo "$SSH_HOST_KEY" | base64 -d > ~/.ssh/known_hosts
- echo "$DUPLOAD_CONFIG" | base64 -d > ~/.dupload.conf
script:
- echo "Publish Sid debian packages on APT repository..."
- dupload --to debian-sid dist/ldapsaisie*changes
- xmllint --valid --noout doc/LdapSaisie.docbook

View file

@ -1,132 +0,0 @@
#!/bin/bash
INSTALL_BUILD_DEPS=0
SID=0
function usage() {
[ -n "$@" ] && echo -e "$@\n" > /dev/stderr
echo "Usage: $0 [--install-build-deps] [--sid]"
[ -n "$@" ] && exit 1
}
idx=1
while [ $idx -le $# ]
do
OPT=${!idx}
case $OPT in
--install-build-deps)
INSTALL_BUILD_DEPS=1
;;
--sid)
SID=1
;;
-x)
set -x
;;
*)
usage "Unkown parameter '$OPT'"
esac
let idx=idx+1
done
# Enter source directory
cd $( dirname $0 )
# Install build dependencies
if [ $INSTALL_BUILD_DEPS -eq 1 ]
then
apt-get update
apt-get install --no-install-recommends --yes devscripts equivs sed rsync git lsb-release wget ca-certificates
mk-build-deps --install --tool='apt-get -o Debug::pkgProblemResolver=yes --no-install-recommends --yes' debian/control
fi
DEBIAN_RELEASE=$( lsb_release -r -s|sed 's/\..*$//' )
# Install build dependencies based on Debian release
if [ $INSTALL_BUILD_DEPS -eq 1 ]
then
# On Debian Stretch, install GitPython using pip because strect version of python3-git have bugs
if [ $DEBIAN_RELEASE -eq 9 ]
then
apt-get install --no-install-recommends --yes python3-pip
python3 -m pip install GitPython
else
apt-get install --no-install-recommends --yes python3-git
fi
fi
# Install GPG key (if provided)
if [ -n "$GPG_KEY" ]
then
[ $INSTALL_BUILD_DEPS -eq 1 ] && apt-get install --no-install-recommends --yes gnupg2
echo "$GPG_KEY"|base64 -d|gpg --import
fi
# Retreive source package name
SOURCE_PACKAGE_NAME=$( grep -E ^Source: debian/control|sed 's/^Source: //' )
[ $SID -eq 1 ] && DEBIAN_CODENAME=sid || DEBIAN_CODENAME=$( lsb_release -c -s )
# Clean previous build
rm -fr $SOURCE_PACKAGE_NAME-build-deps* dist
# Compute version using git describe
VERSION="$( git describe --tags 2> /dev/null )"
# If no tag exist, git describe will fail: in this case, compute a 0.0 version with same format
# as git describe
[ $? -ne 0 ] && VERSION="0.0-$( git log --oneline|wc -l )-$( git describe --tags --always )"
# Create dist directory
mkdir dist
DIST_DIR=dist/$SOURCE_PACKAGE_NAME-$VERSION
rsync -av --exclude 'dist' --exclude '.git*' --exclude 'build.sh' --exclude 'docker-builds.sh' ./ $DIST_DIR/
# Check gitdch is installed
GITDCH=$(which gitdch)
set -e
if [ -z "$GITDCH" ]
then
TMP_GITDCH=$(mktemp -d)
echo "Temporary install gitdch in $TMP_GITDCH"
wget -O $TMP_GITDCH/gitdch https://gitea.zionetrix.net/bn8/gitdch/raw/master/gitdch
chmod +x $TMP_GITDCH/gitdch
GITDCH=$TMP_GITDCH/gitdch
else
TMP_GITDCH=""
fi
# Compute gitdch extra args
GITDCH_EXTRA_ARGS=()
[ -n "$DEBFULLNAME" ] && GITDCH_EXTRA_ARGS+=( "--maintainer-name" "$DEBFULLNAME" )
[ -n "$DEBEMAIL" ] && GITDCH_EXTRA_ARGS+=( "--maintainer-email" "$DEBEMAIL" )
if [ -e debian/changelog ]
then
LAST_MANUAL_COMMIT_ID=$( git log --oneline -n1 -- debian/changelog|awk '{print $1}' )
GITDCH_EXTRA_ARGS+=( "--append" "--revision" "${LAST_MANUAL_COMMIT_ID}..HEAD" )
fi
# Generate debian changelog using generate_debian_changelog.py
$GITDCH \
--package-name $SOURCE_PACKAGE_NAME \
--version="${VERSION}" \
--code-name $DEBIAN_CODENAME \
--output $DIST_DIR/debian/changelog \
--release-notes ../release-notes.md \
--exclude "^CI: " \
--exclude "^debian: " \
--exclude "\.gitlab-ci\.yml" \
--exclude "build\.sh" \
--exclude "README\.md" \
--exclude "^Merge branch " \
--verbose "${GITDCH_EXTRA_ARGS[@]}"
# Clean temporary gitdch installation
[ -n "$TMP_GITDCH" ] && rm -fr $TMP_GITDCH
# Build debian package
BUILD_ARGS=""
[ -z "$GPG_KEY" ] && BUILD_ARGS="--no-sign" || echo "GPG key provide, enable package signing."
cd $DIST_DIR/
dpkg-buildpackage $BUILD_ARGS

40
buildDoc.sh Executable file
View file

@ -0,0 +1,40 @@
#!/bin/bash
ROOT_DIR=$( cd `dirname $0`; pwd )
LOCAL_CFG_DIR=$ROOT_DIR/config.local
# Import config
if [ ! -f $LOCAL_CFG_DIR/local.sh ]
then
echo "Error : You don't have create your own local.sh file in config.local directory. You could rely on the local.sh.example file to create your version."
exit 1
fi
source $LOCAL_CFG_DIR/local.sh
cd $ROOT_DIR/doc
make clean >> $LOG_FILE 2>&1
make >> $LOG_FILE 2>&1 &
export P=$!
trap exitwhell INT
function exitwhell() {
kill -9 $P 2> /dev/null
echo " -- INT -- "
}
while [ -d /proc/$P ]
do
echo -n .
sleep 1
done
echo done.
if [ -n "$EXPORT_DOC_DIR" ]
then
$ROOT_DIR/buildDocExports.sh
fi

167
buildDocExports.sh Executable file
View file

@ -0,0 +1,167 @@
#!/bin/bash
ROOT_DIR=$( cd `dirname $0`; pwd )
LOCAL_CFG_DIR=$ROOT_DIR/config.local
# Import config
if [ ! -f $LOCAL_CFG_DIR/local.sh ]
then
echo "Error : You don't have create your own local.sh file in config.local directory. You could rely on the local.sh.example file to create your version."
exit 1
fi
source $LOCAL_CFG_DIR/local.sh
if [ ! -n "$EXPORT_DOC_DIR" ]
then
echo "The EXPORT_DOC_DIR variable is not define. Export doc is disabled."
exit 0
fi
if [ ! -d "$EXPORT_DOC_DIR" ]
then
echo "Error : Export directory $EXPORT_DOC_DIR does not exist !"
exit 2
fi
DOC_DIR=$ROOT_DIR/doc
TMP_DIR=`mktemp -d`
ERROR=0
echo "-> Export documentation in $EXPORT_DOC_DIR :"
# PDF
if [ -n "$PDF" ]
then
echo -en "\t- PDF : "
# PDF
cp -f $DOC_DIR/exports/pdf/LdapSaisie.pdf $EXPORT_DOC_DIR/LdapSaisie.pdf
if [ $? -ne 0 ]
then
echo -e "\n-> Error"
ERROR=1
else
echo Ok
fi
fi
# EPUB
if [ -n "$EPUB" ]
then
echo -en "\t- EPUB : "
# EPUB
cp -f $DOC_DIR/exports/epub/LdapSaisie.epub $EXPORT_DOC_DIR/LdapSaisie.epub
if [ $? -ne 0 ]
then
echo -e "\n-> Error"
ERROR=1
else
echo Ok
fi
fi
# ALL-IN-ONE
if [ -n "$ALL_IN_ONE" ]
then
echo -en "\t- All-In-One : "
rm -fr $TMP_DIR/$ALL_IN_ONE
mkdir $TMP_DIR/$ALL_IN_ONE
cp $DOC_DIR/exports/html/all-in-one/LdapSaisie.html $TMP_DIR/$ALL_IN_ONE/
sed -i 's/\.\.\/\.\.\/\.\.\///g' $TMP_DIR/$ALL_IN_ONE/LdapSaisie.html
# IMAGES
cp -fr $IMAGES $TMP_DIR/$ALL_IN_ONE/images
mkdir $TMP_DIR/$ALL_IN_ONE/styles
cp $CSS $TMP_DIR/$ALL_IN_ONE/styles/
echo "done. Build archive and move it later ..."
fi
# ONLINE
if [ -n "$ONLINE" ]
then
echo -en "\t- On-line : "
rm -fr $TMP_DIR/$ONLINE
mkdir $TMP_DIR/$ONLINE
cp -fr $DOC_DIR/exports/html/online/*.html $TMP_DIR/$ONLINE
sed -i 's/\.\.\/\.\.\/\.\.\///g' $TMP_DIR/$ONLINE/*
# IMAGES
cp -fr $IMAGES $TMP_DIR/$ONLINE/images
mkdir $TMP_DIR/$ONLINE/styles
cp $CSS $TMP_DIR/$ONLINE/styles/
echo "done. Build archive and move it later ..."
fi
# DOCBOOK
if [ -n "$DOCBOOK" ]
then
echo -en "\t- Docbook : "
rm -fr $TMP_DIR/$DOCBOOK
mkdir $TMP_DIR/$DOCBOOK
cd $DOC_DIR
for i in `find -type d|grep -v 'export'`
do
mkdir -p $TMP_DIR/$DOCBOOK/$i
done
for i in `find -type f|egrep -v '(Makefile|^./export)'`
do
cp $i $TMP_DIR/$DOCBOOK/$i
done
echo "done. Build archive and move it later ..."
fi
echo "-> Build archives and move all in export directory :"
cd $TMP_DIR/
for i in $ALL_IN_ONE $ONLINE $DOCBOOK
do
echo -e "\t$i : "
echo -en "\t\t+ Archive : "
tar -cjf LdapSaisie--Doc--$i.tar.bz2 $i && mv LdapSaisie--Doc--$i.tar.bz2 $EXPORT_DOC_DIR/
if [ $? -eq 0 ]
then
echo Ok
else
echo -e "\n-> Error"
ERROR=1
fi
echo -en "\t\t+ Web dir : "
[ ! -d "$EXPORT_DOC_DIR/$i" ] && echo "you must create export $i directory manualy before run this script. (path : $EXPORT_DOC_DIR/$i)" && continue
rm -fr $EXPORT_DOC_DIR/$i/* && cp -fr $i/* $EXPORT_DOC_DIR/$i/ && rm -fr $i
if [ $? -eq 0 ]
then
echo Ok
else
echo -e "\n-> Error"
ERROR=1
fi
done
if [ -n "$LAST_UPDATE_FILE" ]
then
echo -n "-> Create last-update file : "
echo "Last update :" > $LAST_UPDATE_FILE
date >> $LAST_UPDATE_FILE
cd $ROOT_DIR
git log|head -n 1 >> $LAST_UPDATE_FILE
echo >> $LAST_UPDATE_FILE
echo done.
fi
rm -fr $TMP_DIR
exit $ERROR

42
checkDocExportsNecessity.sh Executable file
View file

@ -0,0 +1,42 @@
#!/bin/bash
ROOT_DIR=$( cd `dirname $0`; pwd )
LOCAL_CFG_DIR=$ROOT_DIR/config.local
# Import config
if [ ! -f $LOCAL_CFG_DIR/local.sh ]
then
echo "Error : You don't have create your own local.sh file in config.local directory. You could rely on the local.sh.example file to create your version."
exit 1
fi
source $LOCAL_CFG_DIR/local.sh
if [ ! -n "$EXPORT_DOC_DIR" ]
then
echo "The EXPORT_DOC_DIR variable is not define. Export doc is disabled."
exit 0
fi
if [ ! -d "$EXPORT_DOC_DIR" ]
then
echo "Error : Export directory $EXPORT_DOC_DIR does not exist !"
exit 2
fi
if [ ! -n "$LAST_UPDATE_FILE" ]
then
echo "Error : The LAST_UPDATE_FILE is necessary for update detection !"
exit 3
fi
cd $ROOT_DIR
CURRENT=`grep ^commit $LAST_UPDATE_FILE | cut -d ' ' -f 2`
if [ "`git diff $CURRENT -- doc`" != "" ]
then
echo "Export documentation is necessary"
echo "================================="
echo "Current doc exports was generated from the commit $CURRENT."
echo "Changes have been made since."
fi

View file

@ -1,2 +1,2 @@
lsexample
doc/LdapSaisie.html
doc/exports/html/debian/LdapSaisie.html

2
debian/rules vendored
View file

@ -4,7 +4,7 @@
dh $@ --with bash-completion
override_dh_auto_build:
make -C $(CURDIR)/doc -f Makefile debian
make -C $(CURDIR)/doc/exports/html -f Makefile debian
override_dh_clean:
dh_clean

5
doc/.gitignore vendored
View file

@ -1,5 +0,0 @@
public_html
LdapSaisie.html
LdapSaisie.pdf
LdapSaisie.epub
venv

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

@ -0,0 +1,45 @@
<?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 PEAR "<application><ulink url='http://pear.php.net/'>PEAR</ulink></application>">
<!ENTITY PEAR_Console_Table "<application><ulink url='https://pear.php.net/package/Console_Table'>Console_Table</ulink></application>">
<!ENTITY PEAR_Net_FTP "<application><ulink url='https://pear.php.net/package/Net_FTP'>Net_FTP</ulink></application>">
<!ENTITY PEAR_Mail "<application><ulink url='https://pear.php.net/package/Mail'>Mail</ulink></application>">
<!ENTITY PEAR_Mail_Mime "<application><ulink url='https://pear.php.net/package/Mail_Mime'>Mail_Mime</ulink></application>">
<!ENTITY PhpSecLib "<application><ulink url='https://github.com/phpseclib/phpseclib'>PhpSecLib</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 CAS "<application><ulink url='http://www.jasig.org/cas'>CAS</ulink></application>">
<!ENTITY phpCAS "<application><ulink url='http://www.ja-sig.org/wiki/display/CASC/phpCAS'>phpCAS</ulink></application>">
<!ENTITY PhpLdapAdmin "<application><ulink url='http://phpldapadmin.sourceforge.net'>PhpLdapAdmin</ulink></application>">
<!ENTITY TinyMCE "<application><ulink url='https://www.tinymce.com'>TinyMCE</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 customActions "<link linkend='config-LSobject-customActions'>customActions</link>">
<!ENTITY customSearchActions "<link linkend='config-LSobject-customSearchActions'>customActions</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>">
<!ENTITY LSauthMethod "<link linkend='config-LSauthMethod'>LSauthMethod</link>">
<!ENTITY LSselect "<emphasis>LSselect</emphasis>">
<!ENTITY LSsearch "<link linkend='config-LSobject-LSsearch'>LSsearch</link>">
<!ENTITY LSformElement "<link linkend='contrib-LSformElements'>LSformElement</link>">
<!ENTITY LSformElements "<link linkend='contrib-LSformElements'>LSformElements</link>">
<!ENTITY LSformRule "<link linkend='contrib-LSformRules'>LSformRule</link>">
<!ENTITY LSformRules "<link linkend='contrib-LSformRules'>LSformRules</link>">
<!ENTITY GIT_RAW_ROOT_URL "https://gitlab.easter-eggs.com/ee/ldapsaisie/-/raw/master">

60
doc/LdapSaisie.docbook Normal file
View file

@ -0,0 +1,60 @@
<?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 % conf-LSauthMethod-entities SYSTEM "conf/LSauthMethod/LSauthMethod.entities.xml">
%conf-LSauthMethod-entities;
<!ENTITY intro SYSTEM "intro/intro.docbook">
<!ENTITY install SYSTEM "install/install.docbook">
<!ENTITY install-arbo SYSTEM "install/arbo.docbook">
<!ENTITY upgrade SYSTEM "upgrade/upgrade.docbook">
<!ENTITY api SYSTEM "api/api.docbook">
<!ENTITY contrib SYSTEM "contrib/contrib.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.3</releaseinfo>
</bookinfo>
&intro;
&install;
&upgrade;
&conf;
&api;
&contrib;
</book>

View file

@ -1,37 +1,16 @@
build: venv public_html LdapSaisie.html LdapSaisie.pdf LdapSaisie.epub
DOCBOOK_FILE=LdapSaisie.docbook
public_html: venv
venv/bin/mkdocs build -s
all: validate export
LdapSaisie.html: venv public_html
venv/bin/htmlark public_html/print_page/index.html -o LdapSaisie.html
# Validation
validate:
xmllint --valid --noout $(DOCBOOK_FILE)
LdapSaisie.pdf: LdapSaisie.html
docker run -v $(CURDIR):/workspace pink33n/html-to-pdf --url file:///workspace/LdapSaisie.html --pdf LdapSaisie.pdf
export:
cd exports; make all
LdapSaisie.epub: LdapSaisie.html
pandoc LdapSaisie.html \
-f html \
--toc \
--standalone \
--top-level-division=chapter \
--highlight-style style/pygments.theme \
--css style/epub.css \
--metadata=title:"Documentation LdapSaisie" \
--metadata=author:"Benjamin Renard" \
--metadata=lang:"fr-FR" \
--metadata=cover-image:"../logos/ldapsaisie-logo.png" \
--pdf-engine=weasyprint \
-o LdapSaisie.epub
venv:
python3 -m venv venv
venv/bin/python -m pip install -r requirements.txt
html:
cd exports/html; make all-in-one/LdapSaisie.html
clean:
rm -fr venv public_html LdapSaisie.html LdapSaisie.pdf LdapSaisie.epub
serve: venv
venv/bin/mkdocs serve
debian: LdapSaisie.html
cd exports; make clean

35
doc/README Normal file
View file

@ -0,0 +1,35 @@
Makefile :
##########
The root Makefile permit currently 3 actions :
* Validation : For the xml validation of docbook files
make validate
* Export : For build the documentation exports in all available formats
make export
* Clean : Delete non-sources files
make clean
Dependencies :
##############
For validation :
================
* xmllint command (in debian package libxml2-utils)
For exports :
=============
* in HTML :
~~~~~~~~~~~
+ xsltproc command (in debian package xsltproc)
+ XSL stylesheets by N.Walsh (html/docbook.xsl, htmlhelp/htmlhelp.xsl
and xhtml/chunk.xsl) (in debian package docbook-xsl)
* in PDF :
~~~~~~~~~~
+ jw command (in debian package docbook-utils)
* in EPUB :
~~~~~~~~~~~
+ dbtoepub command ((in debian package dbtoepub)

630
doc/api/api.docbook Normal file
View file

@ -0,0 +1,630 @@
<?xml version="1.0" encoding="UTF-8" ?>
<chapter id="api">
<title>API</title>
<para>Depuis la version 4.0, LdapSaisie offre une API visant à permettre de faire
les mêmes choses que ce qu'il est possible d'accomplir via l'interface web. L'idée
n'est bien entendue pas de se substituer systématiquement à la possibilité de se
connecter directement à l'annuaire, mais plutôt d'offrir une API web pour l'intégration
d'outil préférant ce mode d'interaction, ou encore, pour exposer des méthodes accès aux
données de l'annuaire tout en profitant des logiques métiers implémentées/configurées
dans LdapSaisie : validation syntaxique et d'unicité, règle de génération et
d'interdépendances des attributs, déclencheurs, ...</para>
<note><simpara>Cette API est actuellement dans une phase de test et n'offre pas encore
toutes les fonctionnalités proposées dans l'interface web. Elle est vouée à évoluer pour
intégrer petit à petit un maximum de fonctionnalités. Des contributions à ce sujet seront
plus qu'appréciée !</simpara></note>
<sect1 id="api-auth">
<title>Authentification</title>
<para>L'authentification à l'API utilise le même composant <literal>LSauth</literal> que
lors d'une authentification à l'interface web, cependant, ce composant s'adapte pour
prendre en compte de mode de connexion. Par défaut, la méthode d'authentification utilisée
sera &LSauthMethod_HTTP; et permettra de se connecter en spécifiant le nom d'utilisateur
et le mot de l'utilisateur cherchant à se connecter via une authentification basique HTTP.
</para>
<warning><simpara>Il est à noter que tous les types d'utilisateur ne peuvent pas forcément
utiliser l'API : le paramètre <literal>api_access</literal> doit être explicitement
positionné à <literal>True</literal> dans <link linkend='config-srv-ldap'>la configuration
du serveur LDAP</link>.</simpara></warning>
<para>Une fois connecté, l'utilisateur endossera les droits associés à ses &LSprofiles;,
tout comme un utilisateur connecté à l'interface web.</para>
</sect1>
<sect1 id="api-methods">
<title>Méthodes exposées</title>
<para>Les URLs des méthodes de l'API ont été construites par mimétisme sur celle de l'interface
web et sous la racine web <literal>api/</literal>. Par ailleurs, un numéro de version d'API a
été insérée dans chacune d'elles afin d'anticiper toutes évolutions futures majeures nécéssitants
de conserver une rétrocompatibilité avec les anciennes versions de l'API.</para>
<para>Toutes les méthodes retournent des informations au format JSON et accepte le paramètre
<literal>pretty</literal> permettant d'obtenir un retour plus facilement lisible. Les chaines de
caractères échangées doivent par ailleurs être encodées en UTF-8. On trouvera par ailleurs dans
le retour JSON :
<variablelist>
<varlistentry>
<term>success</term>
<listitem><simpara>Booléen précisant si l'action demandée a correctement été exécutée.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>messages</term>
<listitem><simpara>Ce tableau pourra être présent et lister les messages d'informations générées
par l'action demandée. Il s'agira des mêmes messages que ceux affichés dans l'interface web
lorsque les actions équivalentes y sont faites.</simpara></listitem>
</varlistentry>
<varlistentry>
<term>errors</term>
<listitem><simpara>Ce tableau pourra être présent et lister les messages d'erreurs générées
par l'action demandée.</simpara></listitem>
</varlistentry>
</variablelist>
</para>
<note><simpara>Les messages d'informations et d'erreurs générées par l'application sont traduites dans
la langue courante qui peut être spécifiée via le paramètre <literal>lang</literal> accepté par toutes
les méthodes (exemple : <literal>fr_FR</literal> ou <literal>en_US</literal>).</simpara></note>
<para>Lorsqu'une méthode cible un type d'objets, voir un objet en particulier, ces informations seront
transmises dans l'URL appelée. Si le type d'objet ou l'objet demandé est introuvable, une erreur HTTP
404 sera générée.</para>
<important><simpara>Sauf précision contraire, toutes les méthodes exposées sont accessibles uniquement
via les méthodes HTTP <literal>GET</literal> ou <literal>POST</literal>. L'accès via une autre méthode
retournera une erreur 404.</simpara></important>
<!-- Début Liste des méthodes exposées -->
<variablelist>
<title>Liste des méthodes exposées</title>
<varlistentry>
<term>/api/1.0/object/[object type]</term>
<listitem>
<para>Cette méthode permet de rechercher/lister les informations d'un type d'objets de
l'annuaire en particulier. Le type de l'objet est précisé dans l'URL et doit être encodé en
conséquence. Par mimétisme du comportement de l'interface web, la recherche est paginée et
accepte des paramètres similaires en plus de paramètre plus appropriés à un fonctionnement
programmatique :
<variablelist>
<title>Paramètres acceptés</title>
<varlistentry>
<term>filter</term>
<listitem><simpara>Permet de spécifier un filtre de recherche LDAP personnalisé. Celui-ci
sera combiné avec les paramètres propres au type d'objets recherchés et aux autres
paramètres spécifiés (<literal>pattern</literal> par exemple).</simpara>
<warning><simpara>Du fait d'une limitation de la classe <literal>Net_LDAP2_Filter</literal>
utilisée pour analyser le filtre passé en paramètre, seuls les filtres simples du type
<literal>(attribut=valeur)</literal> sont acceptés ici. Pour les mêmes raisons, il est
important que le filtre spécifié soit toujours entourné de paranthèses.</simpara></warning>
</listitem>
</varlistentry>
<varlistentry>
<term>predefinedFilter</term>
<listitem><simpara>Permet de spécifier un des filtres de recherche LDAP prédéfinis dans la
configuration du type d'objet.</simpara></listitem>
</varlistentry>
<varlistentry>
<term>pattern</term>
<listitem><simpara>Permet de spécifier un mot clé de recherche, comme proposé dans
l'interface web.</simpara></listitem>
</varlistentry>
<varlistentry>
<term>approx</term>
<listitem><simpara>Booléen permettant d'activer/désactiver la recherche approximative
sur le mot clé. Les valeurs acceptées sont <literal>1</literal> ou <literal>0</literal>.
</simpara></listitem>
</varlistentry>
<varlistentry>
<term>basedn</term>
<listitem><simpara>Permet de spécifier une base de recherche personnalisé pour la recherche.
</simpara></listitem>
</varlistentry>
<varlistentry>
<term>subDn</term>
<listitem><simpara>Dans le cas d'un serveur LDAP configuré avec des <link linkend="config-subDn">
sous-niveaux de connexion</link>, permet de spécifier le sous-niveau pour la recherche.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>scope</term>
<listitem><simpara>Permet de spécifier l'étendue de la recherche dans l'annuaire. Valeurs acceptées:
<literal>sub</literal>, <literal>one</literal> et <literal>base</literal>.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>recursive</term>
<listitem><simpara>Booléen permettant d'activer/désactiver la recherche recursive, c'est à dire une
recherche à la racine de l'annuaire (ou du <link linkend="config-subDn">sous-niveau de connexion</link>)
avec une étendue de recherche maximale. Les valeurs acceptées sont <literal>1</literal> ou
<literal>0</literal>.</simpara></listitem>
</varlistentry>
<varlistentry>
<term>displayFormat</term>
<listitem><simpara>Permet de spécifier un &LSformat; personnalisé pour le nom des objets dans le résultat
de recherche.</simpara></listitem>
</varlistentry>
<varlistentry>
<term>extraDisplayedColumns</term>
<listitem><simpara>Booléen permettant d'activer le retour des colonnes personnalisées dans le résultat
de recherche. Les valeurs acceptées sont <literal>1</literal> ou <literal>0</literal>.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>attributes</term>
<listitem><simpara>Liste des attributs supplémentaires que devra retourner la recherche.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>attributesDetails</term>
<listitem><simpara>Permet d'obtenir les détails sur les valeurs des attributs (au lieu des valeurs
au format attendu en cas de création/modification de l'objet). Seul la présence de ce paramètre
suffit à activer ce comportement, sa valeur n'a pas d'importance.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>sortBy</term>
<listitem><simpara>Permet de préciser sur quelle information le résultat de recherche doit être
trié. Valeurs acceptées : <literal>displayName</literal>, <literal>subDn</literal> ou un des noms
des colonnes personnalisées.</simpara></listitem>
</varlistentry>
<varlistentry>
<term>sortDirection</term>
<listitem><simpara>Permet de préciser l'ordre de tri du résultat de recherche. Valeurs acceptées :
<literal>ASC</literal> (A-Z) ou <literal>DESC</literal> (Z-A).</simpara></listitem>
</varlistentry>
<varlistentry>
<term>page</term>
<listitem><simpara>Permet de préciser la page du résultat de recherche.</simpara></listitem>
</varlistentry>
<varlistentry>
<term>nbObjectsByPage</term>
<listitem><simpara>Permet de préciser le nombre maximum d'objets retournés par page du résultat de
recherche.</simpara></listitem>
</varlistentry>
<varlistentry>
<term>all</term>
<listitem><simpara>Permet de réclamer le résultat complet de la recherche (désactivation
de la pagination). Seul la présence de ce paramètre suffit à activer ce comportement, sa
valeur n'a pas d'importance.</simpara></listitem>
</varlistentry>
<varlistentry>
<term>as_list</term>
<listitem><simpara>Permet de réclamer un résultat de recherche dans lequel, la clé <literal>
objects</literal> sera une liste et non un dictionnaire. Dans ce cas, le DN de l'objet est fourni
dans la clé <literal>dn</literal> des détails des objets.</simpara></listitem>
</varlistentry>
<varlistentry>
<term>withoutCache</term>
<listitem><simpara>Booléen permettant de désactiver l'utilisation du cache. Les valeurs acceptées
sont <literal>1</literal> ou <literal>0</literal>.</simpara></listitem>
</varlistentry>
<varlistentry>
<term>keepParamsBetweenSearches</term>
<listitem><simpara>Booléen permettant d'activer/désactiver le stockage en session des paramètres de
recherche (optionnel, par défaut : <literal>Faux</literal>). Les valeurs acceptées sont
<literal>1</literal> ou <literal>0</literal>.</simpara></listitem>
</varlistentry>
</variablelist>
</para>
<programlisting linenumbering="unnumbered">
<citetitle>Exemple</citetitle>
<![CDATA[# curl -u username:secret 'https://ldapsaisie/api/1.0/object/LSpeople?extraDisplayedColumns=1&pretty'
{
"success": true,
"objects": {
"uid=hmartin,ou=people,o=ls": {
"name": "Henri MARTIN",
"Mail": "henri.martin@ls.com"
},
"uid=s.ldapsaisie,ou=people,o=ls": {
"name": "Secretariat LdapSaisie",
"Mail": "secretariat@ldapsaisie.biz"
},
"uid=ls,ou=people,o=ls": {
"name": "LdapSaisie",
"Mail": "ldap.saisie@ls.com"
},
"uid=erwpa,ou=people,o=ls": {
"name": "Erwan PAGE",
"Mail": "erwan.page@ldapsaisie.biz"
},
"uid=user2,ou=people,ou=company1,ou=companies,o=ls": {
"name": "prenom2 nom2",
"Mail": "user2@ls.com"
}
},
"total": 14,
"params": {
"keepParamsBetweenSearches": false,
"filter": null,
"pattern": null,
"predefinedFilter": false,
"basedn": null,
"scope": null,
"sizelimit": 0,
"attronly": false,
"approx": false,
"recursive": true,
"attributes": [],
"onlyAccessible": true,
"sortDirection": null,
"sortBy": null,
"sortlimit": 0,
"displayFormat": "%{cn}",
"nbObjectsByPage": 25,
"withoutCache": false,
"extraDisplayedColumns": true
},
"page": 1,
"nbPages": 3
}]]>
</programlisting>
</listitem>
</varlistentry>
<varlistentry>
<term>/api/1.0/object/[object type]/[dn]</term>
<listitem>
<para>Cette méthode permet de récupérer les informations d'un objet de l'annuaire au format
JSON. Le type de l'objet et son DN sont précisés dans l'URL et doivent être encodés en
conséquence. Par défaut, les valeurs des attributs retournées sont au format tel qu'attendu
en cas de création/modification de l'objet. Il est cependant possible d'ajouter le paramètre
<literal>details</literal> afin d'obtenir des informations complémentaires sur les valeurs
des attributs.
<programlisting linenumbering="unnumbered">
<citetitle>Exemple</citetitle>
<![CDATA[# curl -u username:secret 'https://ldapsaisie/api/1.0/object/LSpeople/uid=hmartin,ou=people,o=ls?pretty'
{
"success": true,
"dn": "uid=hmartin,ou=people,o=ls",
"type": "LSpeople",
"name": "Henri MARTIN",
"details": false,
"attributes": {
"uid": "hmartin",
"givenName": "Henri",
"sn": "MARTIN",
"cn": "Henri MARTIN",
"mail": "henri.martin@ls.com",
"personalTitle": "M.",
"description": [],
"jpegPhoto": null,
"lsGodfatherDn": [
"uid=eeggs,ou=people,o=ls"
],
"uidNumber": "101022",
"gidNumber": "102001",
"loginShell": "no",
"homeDirectory": "\/home\/com",
"gecos": null,
"shadowExpire": null,
"shadowMax": null,
"shadowInactive": null,
"shadowLastChange": null,
"sambaSID": "S-1-5-21-2421470416-3566881284-3047381809-203044",
"sambaPrimaryGroupSID": "S-1-5-21-2421470416-3566881284-3047381809-205003",
"sambaAcctFlags": [
"U"
],
"sambaHomeDrive": null,
"sambaHomePath": null,
"sambaProfilePath": null,
"sambaLogonScript": null,
"sambaLogonTime": null,
"sambaLogoffTime": null,
"sambaKickoffTime": null,
"sambaPwdLastSet": null,
"sambaPwdMustChange": null,
"sambaPwdCanChange": null
},
"relations": {
"groups": {
"cn=direction,ou=groups,o=ls": "direction",
"cn=secretariat,ou=groups,o=ls": "secretariat"
},
"godfather": []
}
}]]>
</programlisting>
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>/api/1.0/object/[object type]/create</term>
<listitem>
<para>Cette méthode permet de créer un objet dans l'annuaire. Le type de l'objet qui sera créé est
précisé dans l'URL et doit être encodé en conséquence. Les informations de l'objet doivent est
transmises au format <literal>x-www-form-urlencoded</literal>. Elles peuvent également être au
format <literal>multipart/form-data</literal>, en particulier si votre requête contient une image.
Par mimétisme avec l'interface web, seuls les attributs prévus dans le formulaire de création du
type d'objet peuvent être passées ici. De la même manière, les attributs non-spécifiés ici, pouront
être auto-générés en accord avec leur configuration et la requête sera acceptée uniquement si tous les
attributs obligatoires y sont spécifiés ou s'ils peuvent être auto-générés.</para>
<para>Le format et la syntaxe des valeurs des attributs dépends de leur type HTML. Ainsi, par exemple,
un attribut de type HTML <literal>boolean</literal> acceptera comme valeurs possibles <literal>yes
</literal> ou <literal>no</literal>. Pour plus de détails sur le type de valeur acceptée par un type
d'attribut HTML en particulier, consultez sa documentation. Vous pouvez également analyser le code de
la méthode <literal>getPostData()</literal> de la classe PHP correspondante.</para>
<para>Si l'application détecte un souci avec les informations transmises pour les attributs, un tableau
<literal>fields_errors</literal> sera présent dans la réponse JSON et contiendra pour chacun des attributs
problématique, un tableau des messages d'erreurs générées par l'application.</para>
<para>Si le type d'objet en prévoit, vous pouvez également utiliser un
<link linkend="config-LSobject-LSform-dataEntryForm">masque de saisie</link> via le paramètre <literal>
dataEntryForm</literal>.</para>
<programlisting linenumbering="unnumbered">
<citetitle>Exemple</citetitle>
<![CDATA[# curl -u username:secret 'https://ldapsaisie/api/1.0/object/LSpeople/create?pretty' -d "uid=foo.bar&personalTitle=M.&givenName=foo&sn=bar&cn=Foo Bar&mail=foo.bar@example.com&userPassword=Y0urS3cr3t&lsGodfatherDn[]=uid=admin,ou=people,o=ls&gidNumber=70000"
{
"success": true,
"type": "LSpeople",
"dn": "uid=foo.bar,ou=people,o=ls",
"name": "Foo Bar",
"messages": [
"Le mail de notification a \u00e9t\u00e9 envoy\u00e9.",
"L'objet a \u00e9t\u00e9 ajout\u00e9."
]
}]]>
</programlisting>
</listitem>
</varlistentry>
<varlistentry>
<term>/api/1.0/object/[object type]/[dn]/modify</term>
<listitem>
<para>Cette méthode permet de modifier un objet dans l'annuaire. Le type de l'objet et son DN sont
précisés dans l'URL et doivent être encodés en conséquence. Les informations de l'objet à modifier
doivent être transmises au même format que pour la méthode <literal>create</literal> (voir ci-dessus).
Comme pour cette dernière, seuls les attributs prévus dans le formulaire de modification du type
d'objet peuvent être passées ici et la réponse JSON pourra contenir un tableau <literal>fields_errors
</literal> contenant les erreurs générées par l'application au sujet des valeurs transmises pour les
attributs.</para>
<programlisting linenumbering="unnumbered">
<citetitle>Exemple</citetitle>
<![CDATA[# curl -u username:secret 'https://ldapsaisie/api/1.0/object/LSpeople/uid=foo.bar,ou=people,o=ls/modify?pretty' -d "givenName=foo&sn=bar&cn=Foo Bar"
{
"dn": "uid=foo.bar,ou=people,o=ls",
"type": "LSpeople",
"name": "Foo Bar",
"success": true,
"messages": [
"L'objet a bien \u00e9t\u00e9 modifi\u00e9."
]
}]]>
</programlisting>
</listitem>
</varlistentry>
<varlistentry>
<term>/api/1.0/object/[object type]/[dn]/remove</term>
<listitem>
<para>Cette méthode permet de supprimer un objet dans l'annuaire. Le type de l'objet et son DN sont
précisés dans l'URL et doivent être encodés en conséquence.</para>
<programlisting linenumbering="unnumbered">
<citetitle>Exemple</citetitle>
<![CDATA[# curl -u username:secret 'https://ldapsaisie/api/1.0/object/LSpeople/uid=foo.bar,ou=people,o=ls/remove?pretty'
{
"dn": "uid=foo.bar,ou=people,o=ls",
"type": "LSpeople",
"name": "Foo Bar",
"success": true,
"messages": [
"Foo Bar a bien \u00e9t\u00e9 supprim\u00e9."
]
}]]>
</programlisting>
</listitem>
</varlistentry>
<varlistentry>
<term>/api/1.0/object/[object type]/import</term>
<listitem>
<para>Cette méthode permet d'importer des objets d'un type en particulier à partir de données
d'import formatées selon un &ioFormat; configuré pour ce type d'objets. Le type de l'objet
est précisé dans l'URL et doit être encodé en conséquence. Par mimétisme du comportement de
l'interface web, cette méthode accepte des paramètres similaires et s'attend à récupérer les
données d'import dans le corps de la requête.
<variablelist>
<title>Paramètres acceptés</title>
<varlistentry>
<term>ioFormat</term>
<listitem><simpara>Le nom de l'&ioFormat; des données d'import.</simpara></listitem>
</varlistentry>
<varlistentry>
<term>updateIfExists</term>
<listitem><simpara>Booléen permettant d'activer/désactiver la mise à jour des données
des objets s'ils existent déjà. Si ce mode est inactif et qu'un objet des données
d'import existe déjà, une erreur sera remontée. Les valeurs acceptées sont <literal>1
</literal> ou <literal>0</literal>.
</simpara></listitem>
</varlistentry>
<varlistentry>
<term>justTry</term>
<listitem><simpara>Booléen permettant d'activer/désactiver le mode de vérification des
données d'import uniquement. Si ce mode est actif, les données d'import seront analysées
pour vérifier qu'elles sont correctes, mais l'import en lui-même ne sera pas effectué.
Les valeurs acceptées sont <literal>1</literal> ou <literal>0</literal>.
</simpara>
<note><simpara>Le retour de cette méthode en mode <literal>justTry</literal> est identique
à une exécution en mode normal. Ce mode permet donc d'anticiper le résultat d'un import à
partir d'un jeu de données sources.</simpara></note>
<warning><simpara>En mode <literal>justTry</literal>, seul la vérification syntaxique des
données est fiable, car les informations doublonnées au sein des données d'import ne pourront
être détectées.</simpara></warning>
</listitem>
</varlistentry>
</variablelist>
</para>
<para>En cas d'erreurs détectées dans les informations des objets des données d'import, le tableau
<literal>errors</literal> du retour de la méthode contiendra une entrée pour chaque objet en erreur
sous le format d'un dictionnaire dont la clé <literal>data</literal> reprendra les informations de
l'objet telle que chargé (ou générée) depuis les données sources, ainsi qu'un dictionnaire sous la
clé <literal>errors</literal> qui contiendra les erreurs globales concernant l'objet sous la clé
<literal>globals</literal> et les erreurs propres à ses attributs dans un dictionnaire sous la clé
<literal>attrs</literal>.</para>
<note><simpara>Les erreurs d'importation sur un objet sont non-bloquantes : l'importation des autres
objets ne sera pas interrompue.</simpara></note>
<programlisting linenumbering="unnumbered">
<citetitle>Exemple</citetitle>
<![CDATA[# curl -u username:secret --data-binary @/path/to/input.file 'https://ldapsaisie/api/1.0/object/LSpeople/import?ioFormat=mycsv&pretty'
{
"success": false,
"LSobject": "LSpeople",
"ioFormat": "mycsv",
"updateIfExists": false,
"justTry": false,
"imported": {
"uid=rturin,ou=people,o=ls": "M. Roger TURIN"
},
"updated": [],
"errors": [
{
"data": {
"uid": [
"lmartin"
],
"personalTitle": [
"Mme"
],
"givenName": [
"Ludivine"
],
"sn": [
"MARTIN"
],
"mail": [
"lmartin@gmail.com"
],
"userPassword": [
"123Yh%uT"
],
"gidNumber": [
"102009"
],
"loginShell": [
"no"
],
"cn": [
"Mme Ludivine MARTIN"
]
},
"errors": {
"globals": [
"Un objet existe d\u00e9j\u00e0 dans l'annuaire LDAP avec le DN uid=lmartin,ou=people,o=ls."
],
"attrs": []
}
}
],
"messages": [
"Le mail de notification a \u00e9t\u00e9 envoy\u00e9."
]
}]]>
</programlisting>
</listitem>
</varlistentry>
<varlistentry>
<term>/api/1.0/object/[object type]/export</term>
<listitem>
<para>Cette méthode permet d'exporter les objets d'un type en particulier dans un &ioFormat;
configuré pour ce type d'objets. Le type de l'objet est précisé dans l'URL et doit être encodé
en conséquence.</para>
<variablelist>
<title>Paramètres acceptés</title>
<varlistentry>
<term>ioFormat</term>
<listitem><simpara>Le nom de l'&ioFormat;.</simpara></listitem>
</varlistentry>
</variablelist>
<para>En tant normal, le retour de cette méthode sera directement le fichier d'export demandé.
Cependant, si une erreur survient, les paramètres d'export seront repris dans le retour
<literal>JSON</literal> de la méthode qui contiendra également les erreurs survenues.</para>
<programlisting linenumbering="unnumbered">
<citetitle>Exemple</citetitle>
<![CDATA[# curl -u username:secret --data-binary @/path/to/input.file 'https://ldapsaisie/api/1.0/object/LSpeople/export?ioFormat=mycsv&pretty'
login;civility;firstname;name;mail;password;gid;shell
hmartin;M.;Henri;MARTIN;henri.martin@ls.com;********;102001;no
s.ldapsaisie;M.;Secretariat;LdapSaisie;secretariat@ldapsaisie.biz;********;70000;no
ls;M.;Ldap;Saisie;ldap.saisie@ls.com;********;102001;no
erwpa;M.;Erwan;PAGEARD;erwan.page@ldapsaisie.biz;********;102009;no
[...]]]>
</programlisting>
</listitem>
</varlistentry>
<varlistentry>
<term>/api/1.0/object/[object type]/[dn]/relation/[relation]</term>
<listitem>
<para>Cette méthode permet de gérer les objets en relation avec un objet en particulier de
l'annuaire. Le type de l'objet, son DN et le nom de la relation sont précisés dans l'URL et
doivent être encodés en conséquence. Cette méthode accepte les paramètres <literal>add
</literal> et <literal>remove</literal> permettant de lister le ou les DN d'objet(s) à
respectivement ajouter ou supprimer parmis les objets actuellement en relation avec l'objet
spécifié. Si aucun DN n'est spécifié comme devant être ajouté ou supprimé, la méthode
retournera simplement les DN des objets en relation. En cas de modification demandée, la
méthode retournera la nouvelle liste des DNs des objets en relation, quel que soit le résultat
de l'opération de mise à jour.</para>
<programlisting linenumbering="unnumbered">
<citetitle>Exemple</citetitle>
<![CDATA[# curl -u username:secret 'https://ldapsaisie/api/1.0/object/LSpeople/uid=foo.bar,ou=people,o=ls/relation/groups?pretty&add[]=cn=ls,ou=groups,o=ls&add[]=cn=invite,ou=groups,o=ls'
{
"dn": "uid=foo.bar,ou=people,o=ls",
"type": "LSpeople",
"name": "Foo Bar",
"relation": "groups",
"success": true,
"relatedObjects": [
"cn=ls,ou=groups,o=ls",
"cn=invite,ou=groups,o=ls"
],
"messages": [
"Objects in relation updated."
]
}]]>
</programlisting>
</listitem>
</varlistentry>
</variablelist>
</sect1>
</chapter>

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>

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

@ -0,0 +1,25 @@
<?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;. Ces addons peuvent avoir un
fichier de configuration et il sera alors stocké dans le dossier
<literal>conf/LSaddons/</literal> et potera le nom
<literal>config.LSaddons.[addon name].php</literal>.
</para>
&conf-LSaddon_accesslog;
&conf-LSaddon_asterisk;
&conf-LSaddon_exportSearchResultAsCSV;
&conf-LSaddon_impersonate;
&conf-LSaddon_LSaccessRightsMatrixView;
&conf-LSaddon_mail;
&conf-LSaddon_maildir;
&conf-LSaddon_mailquota;
&conf-LSaddon_phpldapadmin;
&conf-LSaddon_ppolicy;
&conf-LSaddon_showSupportInfo;
&conf-LSaddon_showTechInfo;
</sect1>

View file

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!ENTITY conf-LSaddon_accesslog SYSTEM "LSaddon_accesslog.docbook">
<!ENTITY conf-LSaddon_asterisk SYSTEM "LSaddon_asterisk.docbook">
<!ENTITY conf-LSaddon_exportSearchResultAsCSV SYSTEM "LSaddon_exportSearchResultAsCSV.docbook">
<!ENTITY conf-LSaddon_impersonate SYSTEM "LSaddon_impersonate.docbook">
<!ENTITY conf-LSaddon_LSaccessRightsMatrixView SYSTEM "LSaddon_LSaccessRightsMatrixView.docbook">
<!ENTITY conf-LSaddon_mail SYSTEM "LSaddon_mail.docbook">
<!ENTITY conf-LSaddon_maildir SYSTEM "LSaddon_maildir.docbook">
<!ENTITY conf-LSaddon_mailquota SYSTEM "LSaddon_mailquota.docbook">
<!ENTITY conf-LSaddon_phpldapadmin SYSTEM "LSaddon_phpldapadmin.docbook">
<!ENTITY conf-LSaddon_ppolicy SYSTEM "LSaddon_ppolicy.docbook">
<!ENTITY conf-LSaddon_showSupportInfo SYSTEM "LSaddon_showSupportInfo.docbook">
<!ENTITY conf-LSaddon_showTechInfo SYSTEM "LSaddon_showTechInfo.docbook">

View file

@ -0,0 +1,11 @@
<sect2 id="config-LSaddon_LSaccessRightsMatrixView">
<title>LSaddon_LSaccessRightsMatrixView</title>
<para>Cet &LSaddon; offre une interface de visualisation des droits d'accès
des différents &LSprofiles; configurés. Pour chaque type d'objet, la matrice
des droits d'accès par attribut et par profil est affiché sous la forme d'un
tableau.</para>
<para>Le fichier de configuration permet de définir au travers la variable
<literal>$GLOBALS['LSaccessRightsMatrixView_allowed_LSprofiles']</literal>
la liste des &LSprofiles; autorisés à accéder à cette interface.</para>
</sect2>

View file

@ -0,0 +1,46 @@
<sect2 id="config-LSaddon_accesslog">
<title>LSaddon_accesslog</title>
<para>Cet &LSaddon; fournit la fonction <literal>showObjectAccessLogs()</literal> pouvant être utilisée comme &customActions; et permettant d'afficher les logs d'accès produits par <ulink url="https://www.openldap.org/doc/admin24/overlays.html#Access%20Logging">l'overlay OpenLDAP accesslog</ulink> sur un objet de l'annuaire.</para>
<para>La constante <literal>LS_ACCESSLOG_BASEDN</literal> du fichier de configuration de l'addon (<literal>conf/LSaddons/config.LSaddons.accesslog.php</literal>) permet d'indiquer le base DN de la base stockant les logs :</para>
<programlisting linenumbering="unnumbered">
<citetitle>Configuration accesslog</citetitle>
<![CDATA[// Accesslog base DN
define('LS_ACCESSLOG_BASEDN', 'cn=ldapsaisie-accesslog');]]>
</programlisting>
<warning>
<para>LdapSaisie se connectera à la base stockant les logs d'accès de l'annuaire avec les mêmes paramètres de connexion que pour la base principale (excepté le base DN). Pensez à ajuster les ACLs de la base stockant les logs d'accès pour autoriser l'utilisateur d'LdapSaisie à se connecter et lire les informations qu'elle contient.</para>
<programlisting linenumbering="unnumbered">
<citetitle>Exemple d'ACL à mettre en place</citetitle><![CDATA[to *
by dn.exact=uid=ldapsaisie,ou=sysaccounts,o=ls read
by * break
]]>
</programlisting>
</warning>
<para>Ci-dessous, vous trouverez un exemple de configuration de la fonction <literal>showObjectAccessLogs()</literal> comme &customActions; :</para>
<programlisting linenumbering="unnumbered">
<citetitle>Exemple d'utilisation</citetitle><![CDATA[$GLOBALS['LSobjects']['LSpeople'] = array (
[...]
'customActions' => array (
'showObjectAccessLogs' => array (
'function' => 'showObjectAccessLogs',
'label' => 'Show access logs',
'hideLabel' => true,
'noConfirmation' => true,
'disableOnSuccessMsg' => true,
'icon' => 'clock',
'rights' => array (
'admin'
),
),
),
[...]
);]]>
</programlisting>
</sect2>

View file

@ -0,0 +1,7 @@
<sect2 id="config-LSaddon_asterisk">
<title>LSaddon_asterisk</title>
<para>Cet &LSaddon; est utilisé pour gérer les fonctionnalités spécifiques au serveur de téléphonie Asterisk.
Cet &LSaddon; donne accès à une fonction permettant l'encodage d'un mot de passe au format spécifique attendu
par Asterisk. Ce format est un hash MD5 d'une chaine de caractère composée du nom d'utilisateur, d'une chaine
fixe spécifiée dans la configuration d'Asterisk et du mot de passe en clair.</para>
</sect2>

View file

@ -0,0 +1,50 @@
<sect2 id="config-LSaddon_exportSearchResultAsCSV">
<title>LSaddon_exportSearchResultAsCSV</title>
<para>Cet &LSaddon; fournie une fonction du même nom pouvant être utilisée
comme &customSearchActions; et permettant de télécharger le résultat d'une
recherche au format CSV. L'export généré reprend exactement le contenu des
colonnes du tableau du résultat de la recherche. Le DN de l'objet LDAP
correspondant est également fournis dans une colonne.</para>
<para>Des paramètres de configuration sont disponibles dans le fichier de
configuration <literal>config.LSaddons.exportSearchResultAsCSV.php</literal>.
Ils permettent notamment de contrôller le format du fichier CSV généré.</para>
<programlisting linenumbering="unnumbered">
<citetitle>Structure du fichier</citetitle>
<![CDATA[// CSV file delimiter
define('LS_EXPORTSEARCHRESULTASCSV_DELIMITER',',');
// CSV file enclosure
define('LS_EXPORTSEARCHRESULTASCSV_ENCLOSURE','"');
// CSV file escape character (available since PHP 5.5.4)
define('LS_EXPORTSEARCHRESULTASCSV_ESCAPE_CHAR','\\');]]>
</programlisting>
<para>Ci-dessous, vous trouverez un exemple de configuration de la fonction
<literal>exportSearchResultAsCSV()</literal> comme &customSearchActions; :</para>
<programlisting linenumbering="unnumbered">
<citetitle>Exemple d'utilisation</citetitle><![CDATA[$GLOBALS['LSobjects']['LSpeople']['LSsearch'] = array (
[...]
'customActions' => array (
'exportSearchResultAsCSV' => array (
'label' => 'Export result as CSV',
'icon' => 'export_csv',
'function' => 'exportSearchResultAsCSV',
'noConfirmation' => true,
'disableOnSuccessMsg' => true,
'rights' => array (
'admin'
)
),
),
[...]
);]]>
</programlisting>
<note><simpara>Le label et l'icône fournis dans cet exemple sont traduits
et délivrés avec &LdapSaisie;.</simpara></note>
</sect2>

View file

@ -0,0 +1,30 @@
<sect2 id="config-LSaddon_impersonate">
<title>LSaddon_impersonate</title>
<para>Cet &LSaddon; fournie une fonction du même nom pouvant être utilisée
comme &customActions; et permettant de se reconnecter en tant qu'un autre
utilisateur de l'annuaire.</para>
<para>Ci-dessous, vous trouverez un exemple de configuration de la fonction
<literal>impersonate()</literal> comme &customActions; :</para>
<programlisting linenumbering="unnumbered">
<citetitle>Exemple d'utilisation</citetitle><![CDATA[$GLOBALS['LSobjects']['LSpeople'] = array (
[...]
'customActions' => array (
'impersonate' => array (
'function' => 'impersonate',
'label' => 'Reconnect as this user',
'hideLabel' => True,
'noConfirmation' => true,
'disableOnSuccessMsg' => true,
'icon' => 'user_go',
'rights' => array (
'admin'
),
),
),
[...]
);]]>
</programlisting>
</sect2>

View file

@ -1,11 +1,13 @@
# LSaddon_mail
<sect2 id="config-LSaddon_mail">
<title>LSaddon_mail</title>
<para>Cet &LSaddon; est utilisé pour gérer l'envoie de mail. Il utilise
pour cela les librairies &PEAR; <emphasis>Mail</emphasis> et <emphasis>
Mail_Mime</emphasis> qui doivent être installés. Cet &LSaddon; doit être
configuré en éditant son fichier de configuration
<literal>config.LSaddons.mail.php</literal>.</para>
Cet [LSaddon](index.md#configuration-des-lsaddons) est utilisé pour gérer l'envoie de mail. Il
utilise pour cela les librairies [PEAR](http://pear.php.net/) *Mail* et *Mail_Mime* qui doivent être
installés. Cet [LSaddon](index.md#configuration-des-lsaddons) doit être configuré en éditant son
fichier de configuration `config.LSaddons.mail.php`.
```php
<programlisting linenumbering="unnumbered">
<citetitle>Structure du fichier</citetitle>/*
***********************************************
* Configuration du support de l'envoi de mail *
***********************************************
@ -67,20 +69,22 @@ $GLOBALS['MAIL_HEARDERS = array();
// Catch all sent emails
$GLOBALS['MAIL_CATCH_ALL'] = array();
```
</programlisting>
Cet [LSaddon](index.md#configuration-des-lsaddons) offre la possibilité d'utilisé la fonction PHP
`sendMail()` :
```
bool sendMail(
<string> $to,
<string> $subject,
<string> $msg,
<array(string)> $headers,
<array> $attachments,
<string> $eol,
<string> $encoding,
<boolean> $html
);
```
<para>Cet &LSaddon; offre la possibilité d'utilisé la fonction &php;
<function>sendMail()</function>.
<funcsynopsis>
<funcprototype>
<funcdef>bool <function>sendMail</function></funcdef>
<paramdef>string <parameter>$to</parameter></paramdef>
<paramdef>string <parameter>$subject</parameter></paramdef>
<paramdef>string <parameter>$msg</parameter></paramdef>
<paramdef>array <parameter>$headers</parameter></paramdef>
<paramdef>array <parameter>$attachments</parameter></paramdef>
<paramdef>string <parameter>$eol</parameter></paramdef>
<paramdef>string <parameter>$encoding</parameter></paramdef>
<paramdef>boolean <parameter>$html</parameter></paramdef>
</funcprototype>
</funcsynopsis>
</para>
</sect2>

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,60 @@
<sect2 id="config-LSaddon_mailquota">
<title>LSaddon_mailquota</title>
<para>Cet &LSaddon; fournie une fonction <literal>mailquota_get_usage</literal>
pouvant être utilisée pour récupérer l'utilisation du quota d'une boîte mail
IMAP. Pour cela, &LdapSaisie; se connecte au serveur IMAP en utilisant un
compte maître.</para>
<para>Cet &LSaddon; fournie une également une fonction
<literal>mailquota_show_usage</literal> pouvant être utilisée comme
&customActions; et permettant d'afficher l'utilisation du quota de la
boîte mail correspondante via une message dynamique (<literal>LSinfo</literal>).
</para>
<para>Des paramètres de configuration sont disponibles dans le fichier de
configuration <literal>config.LSaddons.mailquota.php</literal>.</para>
<programlisting linenumbering="unnumbered">
<citetitle>Structure du fichier</citetitle>
<![CDATA[// IMAP Mailbox connection string LSformat (composed with LSldapObject attributes)
// See : https://php.net/imap_open (parameter $mailbox)
define('MAILQUOTA_IMAP_MAILBOX','{localhost}');
// IMAP Master user
define('MAILQUOTA_IMAP_MASTER_USER', 'ldapsaisie');
// IMAP Master user's password
define('MAILQUOTA_IMAP_MASTER_USER_PWD', 'secret');
// IMAP Master user LSformat composed with :
// * masteruser = master username (MAILQUOTA_IMAP_MASTER_USER)
// * LSldapObject attributes
define('MAILQUOTA_IMAP_MASTER_USER_FORMAT', '%{mail}*%{masteruser}');
// IMAP quota root mailbox
define('MAILQUOTA_IMAP_QUOTA_ROOT_MAILBOX', 'INBOX');]]>
</programlisting>
<para>Ci-dessous, vous trouverez un exemple de configuration de la fonction
<literal>mailquota_show_usage()</literal> comme &customActions;</para>
<programlisting linenumbering="unnumbered">
<citetitle>Exemple d'utilisation</citetitle><![CDATA[$GLOBALS['LSobjects']['LSpeople'] = array (
[...]
'customActions' => array (
'showmailquotausage' => array (
'function' => 'mailquota_show_usage',
'label' => 'Show mail quota usage',
'noConfirmation' => true,
'disableOnSuccessMsg' => true,
'icon' => 'mail',
'rights' => array (
'admin'
)
),
[...]
),
[...]
);]]>
</programlisting>
</sect2>

View file

@ -0,0 +1,44 @@
<sect2 id="config-LSaddon_phpldapadmin">
<title>LSaddon_phpldapadmin</title>
<para>Cet &LSaddon; est utilisé pour permettre un lien facile entre le logiciel
&PhpLdapAdmin; et LdapSaisie. Il sera possible ainsi à partir d'un objet dans
LdapSaisie de voir ce même objet dans &PhpLdapAdmin;.</para>
<para>Il est necessaire de configurer l'URL de votre installation de &PhpLdapAdmin; dans
le fichier de configuration <literal>config.LSaddons.phpldapadmin.php</literal>.</para>
<programlisting linenumbering="unnumbered">
<citetitle>Structure du fichier</citetitle>
<![CDATA[// PhpLdapAdmin View Object URL format
define('LS_PHPLDAPADMIN_VIEW_OBJECT_URL_FORMAT','//'.$_SERVER['SERVER_NAME'].'/phpldapadmin/cmd.php?cmd=template_engine&server_id=0&dn=%{dn}');]]>
</programlisting>
<para>Cet &LSaddon; offre la possibilité d'utilisé la fonction &php;
<function>redirectToPhpLdapAdmin()</function> comme &customActions;.
<funcsynopsis>
<funcprototype>
<funcdef>bool <function>redirectToPhpLdapAdmin</function></funcdef>
<paramdef>LSldapObject <parameter>$ldapObject</parameter></paramdef>
</funcprototype>
</funcsynopsis>
</para>
<programlisting linenumbering="unnumbered">
<citetitle>Exemple d'utilisation</citetitle><![CDATA[$GLOBALS['LSobjects']['LSpeople'] = array (
[...]
'customActions' => array (
'redirectPhpLdapAdmin' => array (
'function' => 'redirectToPhpLdapAdmin',
'label' => 'See in PhpLdapAdmin',
'hideLabel' => True,
'noConfirmation' => true,
'disableOnSuccessMsg' => true,
'icon' => 'phpldapadmin',
'rights' => array (
'admin'
)
),
),
[...]
);]]>
</programlisting>
</sect2>

View file

@ -0,0 +1,176 @@
<sect2 id="config-LSaddon_ppolicy">
<title>LSaddon_ppolicy</title>
<para>Cet &LSaddon; fourni :
<itemizedlist>
<listitem><para>une fonction <literal>ppolicy_extraDisplayColumn_password_expiration</literal>
pouvant être utilisée pour la génération d'une <emphasis>extraDisplayedColumn</emphasis>
affichant l'état d'expiration du mot de passe des objets d'une recherche.
<programlisting linenumbering="unnumbered">
<citetitle>Exemple d'utilisation</citetitle>
<![CDATA[$GLOBALS['LSobjects']['LSpeople']['LSsearch'] = array (
[...]
'extraDisplayedColumns' => array (
[...]
'password_expiration' => array (
'label' => 'Password expiration',
'generateFunction' => 'ppolicy_extraDisplayColumn_password_expiration',
'additionalAttrs' => array('pwdChangedTime', 'pwdPolicySubentry'),
'escape' => false,
'cssStyle' => 'width: 14em; text-align: center;'
),
[...]
),
[...]
);]]>
</programlisting>
</para></listitem>
<listitem><para>une fonction <literal>ppolicy_export_search_info</literal>
pouvant être utilisée comme <link linkend="config-LSobject-customSearchActions">actions
personnalisées sur les recherches d'&LSobjects;</link> pour exporter au format CSV les
informations des politiques de mots de passe des objets retournés par la recherche.
<programlisting linenumbering="unnumbered">
<citetitle>Exemple d'utilisation</citetitle>
<![CDATA[$GLOBALS['LSobjects']['LSpeople']['LSsearch'] = array (
[...]
'customActions' => array (
'exportPpolicyInfo' => array (
'label' => 'Export password policy info',
'icon' => 'export_csv',
'function' => 'ppolicy_export_search_info',
'noConfirmation' => true,
'disableOnSuccessMsg' => true,
'rights' => array (
'admin',
),
),
),
[...]
);]]>
</programlisting>
</para></listitem>
<listitem><para>la méthode d'API <literal>exportPpolicyInfo</literal> permettant d'exporter
les informations des politiques de mots de passe de tous les objets d'un type donné. Cette méthode
est accessible via l'URL au format suivant :
<literal>/api/1.0/exportPpolicyInfo/[object type]</literal></para></listitem>
<listitem><para>la commande CLI <literal>export_ppolicy_info</literal> permettant d'exporter
les informations des politiques de mots de passe de tous les objets d'un type donné.
<programlisting linenumbering="unnumbered">
<citetitle>Utilisation</citetitle>
ldapsaisie export_ppolicy_info [object type] [-o|--output filepath] [-j|--json [-p|--pretty]]
</programlisting>
</para></listitem>
</itemizedlist>
</para>
<para>Des paramètres de configuration sont disponibles dans le fichier de
configuration <literal>config.LSaddons.ppolicy.php</literal>.</para>
<programlisting linenumbering="unnumbered">
<citetitle>Structure du fichier</citetitle>
<![CDATA[// Default password policy object DN (set to null if no default policy is configured)
define('LS_PPOLICY_DEFAULT_DN', null);
// Ppolicy password warning expiration threshold (in seconds)
define('LS_PPOLICY_WARNING_EXPIRATION_THRESHOLD', 7 * 86400);
// Ppolicy password critical expiration threshold (in seconds)
define('LS_PPOLICY_CRITICAL_EXPIRATION_THRESHOLD', 2 * 86400);
// CSV file delimiter
define('LS_PPOLICY_CSV_DELIMITER',';');
// CSV file enclosure
define('LS_PPOLICY_CSV_ENCLOSURE','"');
// CSV file escape character (available since PHP 5.5.4)
define('LS_PPOLICY_CSV_ESCAPE_CHAR','\\');
// List of LSprofiles who are granted to use the exportPpolicyInfo API method
$GLOBALS['LS_PPOLICY_API_GRANTED_PROFILES'] = array('admin');
// List of extra attributes to include in Ppolicy info export
$GLOBALS['LS_PPOLICY_INFO_EXPORT_EXTRA_ATTRS'] = array();]]>
</programlisting>
<variablelist>
<title>Paramètres de configuration</title>
<varlistentry>
<term>LS_PPOLICY_DEFAULT_DN</term>
<listitem>
<simpara>Constante définissant le DN de la politique par défaut. Si aucune politique par défaut
n'est définie, ce paramètre doit valoir <literal>null</literal>.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>LS_PPOLICY_WARNING_EXPIRATION_THRESHOLD</term>
<listitem>
<simpara>Constante définissant le seuil d'alerte pour l'expiration des mots de passe (en
seconde). Par défaut : 7 jours.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>LS_PPOLICY_CRITICAL_EXPIRATION_THRESHOLD</term>
<listitem>
<simpara>Constante définissant le seuil critique pour l'expiration des mots de passe (en
seconde). Par défaut : 2 jours.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>LS_PPOLICY_CSV_DELIMITER</term>
<listitem>
<simpara>Constante définissant le caractère utilisé lors de la génération de l'export CSV
comme séparateur de champ. Par défaut : un point-virgule.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>LS_PPOLICY_CSV_ENCLOSURE</term>
<listitem>
<simpara>Constante définissant le caractère utilisé lors de la génération de l'export CSV
pour l'encadrement des champs. Par défaut : un guillemet double.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>LS_PPOLICY_CSV_ESCAPE_CHAR</term>
<listitem>
<simpara>Constante définissant le caractère utilisé lors de la génération de l'export CSV
pour l'échappement des champs. Par défaut : une barre oblique inverse.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>$GLOBALS['LS_PPOLICY_API_GRANTED_PROFILES']</term>
<listitem>
<simpara>Tableau global listant les &LSprofiles; autorisés à utiliser la méthode d'API
<literal>exportPpolicyInfo</literal>.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>$GLOBALS['LS_PPOLICY_INFO_EXPORT_EXTRA_ATTRS']</term>
<listitem>
<simpara>Tableau global listant les attributs supplémentaires à inclure lors de l'export des
informations de politique de mots de passe.</simpara>
</listitem>
</varlistentry>
</variablelist>
</sect2>

View file

@ -0,0 +1,44 @@
<sect2 id="config-LSaddon_showSupportInfo">
<title>LSaddon_showSupportInfo</title>
<para>Cet &LSaddon; fourni une page affichant les informations utiles pour
l'équipe assurant le support de l'application. Cette page est accessible à
l'adresse <literal>addon/showSupportInfo/showMySupportInfo</literal>. Elle
compile (et permet de télécharger) l'ensemble des informations utiles à
l'appréciation du contexte d'accès à l'application par l'utilisateur.</para>
<para>Cette page est accessible par tous les utilisateurs connectés à
l'application. Cependant, par défaut, il n'y a aucun lien d'accès à celle-ci.
Il est possible d'ajouter un lien d'accès dans le menu et modifiant la valeur
de la constante <literal>SHOW_SUPPORT_INFO_IN_MENU</literal> à
<literal>True</literal>.</para>
<para>Une fonction <literal>showMySupportInfo()</literal> est également
fournie et peut-être utilisée comme &customActions;. Elle redirigera alors
l'utilisateur vers cette page. Ci-dessous, vous trouverez un exemple de
configuration de la fonction <literal>showMySupportInfo()</literal> comme
&customActions; :</para>
<programlisting linenumbering="unnumbered">
<citetitle>Exemple d'utilisation</citetitle><![CDATA[$GLOBALS['LSobjects']['LSpeople'] = array (
[...]
'customActions' => array (
'showMySupportInfo' => array (
'function' => 'showMySupportInfo',
'label' => 'Show my support information',
'hideLabel' => True,
'noConfirmation' => true,
'disableOnSuccessMsg' => true,
'icon' => 'terminal',
'rights' => array (
'self'
),
),
),
[...]
);]]>
</programlisting>
<note><simpara>Le label et l'icône fournis dans cet exemple sont traduits et
délivrés avec &LdapSaisie;.</simpara></note>
</sect2>

View file

@ -0,0 +1,33 @@
<sect2 id="config-LSaddon_showTechInfo">
<title>LSaddon_showTechInfo</title>
<para>Cet &LSaddon; fournie une fonction du même nom pouvant être utilisée
comme &customActions; et permettant d'afficher les informations techniques
d'un objet de l'annuaire.</para>
<para>Ci-dessous, vous trouverez un exemple de configuration de la fonction
<literal>showTechInfo()</literal> comme &customActions; :</para>
<programlisting linenumbering="unnumbered">
<citetitle>Exemple d'utilisation</citetitle><![CDATA[$GLOBALS['LSobjects']['LSpeople'] = array (
[...]
'customActions' => array (
'showTechInfo' => array (
'function' => 'showTechInfo',
'label' => 'Show technical information',
'hideLabel' => True,
'noConfirmation' => true,
'disableOnSuccessMsg' => true,
'icon' => 'tech_info',
'rights' => array (
'admin'
),
),
),
[...]
);]]>
</programlisting>
<note><simpara>Le label et l'icône fournis dans cet exemple sont traduits et
délivrés avec &LdapSaisie;.</simpara></note>
</sect2>

View file

@ -0,0 +1,294 @@
<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',
'displayAttrName' => '[booleen]',
'help_info' => '[Message d'aide sur l'attribut attr1]',
'help_info_in_view' => '[booleen]',
'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
),
'no_value_label' => '[No set value label]',
'multiple' => 0,
'required' => 1,
'generate_function' => 'fonction1',
'generate_value_format' => '[LSformat]',
'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
),
'onDisplay' => 'fonction2'
'before_modify' => 'function1',
'after_modify' => 'function2'
),
/* ----------- 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>displayAttrName</term>
<listitem>
<simpara>Booléen définissant si le nom de l'attribut doit être affiché en
préfixe du message d'aide (paramètre <parameter>help_info</parameter>).</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>help_info_in_view</term>
<listitem>
<simpara>Booléen définissant si le message d'aide doit être affiché sur la vue
de visualisation de l'objet.</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>ldap_type</term>
<listitem>
<simpara>Le type LDAP de l'attribut (facultatif, par défaut: &LSattr_ldap_ascii;).
<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 (facultatif, par défaut: &LSattr_html_text;).
<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>no_value_label</term>
<listitem>
<simpara>Label affiché lorsque l'attribut n'a pas de valeur (facultatif).</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>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>generate_value_format</term>
<listitem>
<simpara>&LSformat; permettant la génération de l'attribut.</simpara>
<note><simpara>Cette méthode de génération est utilisée uniquement si aucune fonction de génération
de la valeur n'est définie (paramètre <parameter>generate_function</parameter>).</simpara></note>
</listitem>
</varlistentry>
<varlistentry>
<term>default_value</term>
<listitem>
<simpara>Valeur par défaut de l'attribut.</simpara>
<warning><simpara>Il doit s'agir de la valeur telque retournée par le formulaire web.
Ainsi, par exemple dans le cas d'un attribut booléen, les valeurs possibles sont <literal>yes</literal> ou
<literal>no</literal>.</simpara></warning>
<note><simpara>Cette valeur est également utilisée dans le cadre de la génération automatique
de la valeur de l'attribut si aucune autre méthode n'est disponible (via une fonction ou un &LSformat;).</simpara></note>
</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ée avec la fonction
définie dans le paramètre <varname>generate_function</varname> de
l'attribut.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>onDisplay</term>
<listitem>
<simpara>Nom ou liste de nom des fonctions retournant les valeurs d'affichages
de l'attribut. Si c'est une liste, chacune des fonctions seront executée les
unes après les autres. Ces fonctions seront éxecutées, en passant en premier
paramètre, le tableau des valeurs de l'objet.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>before_modify</term>
<listitem>
<simpara>Chaîne de caractères (ou tableau de chaine de caractères) correspondant
au nom d'une ou plusieurs fonctions qui seront exécutées 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>Chaîne de caractères (ou tableau de chaine de caractères) correspondant
au nom d'une ou plusieurs fonctions qui seront exécutées 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,31 @@
<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_jsonCompositeAttribute;
&conf-LSattr_html_labeledValue;
&conf-LSattr_html_mail;
&conf-LSattr_html_maildir;
&conf-LSattr_html_mailQuota;
&conf-LSattr_html_password;
&conf-LSattr_html_postaladdress;
&conf-LSattr_html_pre;
&conf-LSattr_html_rss;
&conf-LSattr_html_sambaAcctFlags;
&conf-LSattr_html_select_box;
&conf-LSattr_html_select_list;
&conf-LSattr_html_select_object;
&conf-LSattr_html_ssh_key;
&conf-LSattr_html_tel;
&conf-LSattr_html_text;
&conf-LSattr_html_textarea;
&conf-LSattr_html_url;
&conf-LSattr_html_valueWithUnit;
&conf-LSattr_html_wywiwyg;
&conf-LSattr_html_xmpp;
</sect3>

View file

@ -0,0 +1,32 @@
<?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_jsonCompositeAttribute SYSTEM "LSattr_html_jsonCompositeAttribute.docbook">
<!ENTITY conf-LSattr_html_labeledValue SYSTEM "LSattr_html_labeledValue.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_postaladdress SYSTEM "LSattr_html_postaladdress.docbook">
<!ENTITY conf-LSattr_html_pre SYSTEM "LSattr_html_pre.docbook">
<!ENTITY conf-LSattr_html_rss SYSTEM "LSattr_html_rss.docbook">
<!ENTITY conf-LSattr_html_sambaAcctFlags SYSTEM "LSattr_html_sambaAcctFlags.docbook">
<!ENTITY conf-LSattr_html_select_box SYSTEM "LSattr_html_select_box.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_tel SYSTEM "LSattr_html_tel.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_valueWithUnit SYSTEM "LSattr_html_valueWithUnit.docbook">
<!ENTITY conf-LSattr_html_wywiwyg SYSTEM "LSattr_html_wywiwyg.docbook">
<!ENTITY conf-LSattr_html_xmpp SYSTEM "LSattr_html_xmpp.docbook">
<!ENTITY LSattr_html_date "<link linkend='config-LSattr_html_jsonCompositeAttribute'>LSattr_html_date</link>">
<!ENTITY LSattr_html_jsonCompositeAttribute "<link linkend='config-LSattr_html_jsonCompositeAttribute'>LSattr_html_jsonCompositeAttribute</link>">
<!ENTITY LSattr_html_sambaAcctFlags "<link linkend='config-LSattr_html_sambaAcctFlags'>LSattr_html_sambaAcctFlags</link>">
<!ENTITY LSattr_html_select_list "<link linkend='config-LSattr_html_select_list'>LSattr_html_select_list</link>">
<!ENTITY LSattr_html_text "<link linkend='config-LSattr_html_text'>LSattr_html_text</link>">
<!ENTITY LSattr_html_textarea "<link linkend='config-LSattr_html_textarea'>LSattr_html_textarea</link>">

View file

@ -0,0 +1,53 @@
<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.</para>
<para>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>
</para>
<programlisting linenumbering="unnumbered">
<citetitle>Structure</citetitle>...
<![CDATA['html_options' => array (
'true_label' => '[label]',
'false_label' => '[label]',
),]]>
...
</programlisting>
<variablelist>
<title>Paramètres de configuration</title>
<varlistentry>
<term>true_label</term>
<listitem>
<simpara>Label affiché pour désigner la valeur <literal>Vrai</literal>.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>false_label</term>
<listitem>
<simpara>Label affiché pour désigner la valeur <literal>Faux</literal>.</simpara>
</listitem>
</varlistentry>
</variablelist>
<note><simpara>Pour le moment, les attributs à valeurs multiples ne sont pas gérés.
</simpara></note>
<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>
<important><simpara>La définition de la valeur par défaut d'un attribut utilisant
ce type HTML (paramètre <literal>default_value</literal>), doit se faire à l'aide
des valeurs <literal>yes</literal> ou <literal>no</literal>.</simpara></important>
</sect4>

View file

@ -0,0 +1,235 @@
<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. L'outil de sélection de date <application>
<ulink url='http://mootools.net/forge/p/mootools_datepicker'>
MooTools-DatePicker</ulink></application> est utilisé pour la sélection
graphique de la date et de l'heure.</para>
<programlisting linenumbering="unnumbered">
<citetitle>Structure</citetitle>...
<![CDATA['html_options' => array (
'format' => '[Format d'affichage de la date]',
'time' => '[Booleen pour le choix ou non de l heure]',
'manual' => '[Booleen pour l edition manuelle ou non]',
'showNowButton' => '[Booleen]',
'showTodayButton' => '[Booleen]',
'style' => '[Nom du style utilise]',
'special_values' => array (
'[value]' => '[label]',
[...]
),
),]]>
...
</programlisting>
<variablelist>
<title>Paramètres de configuration</title>
<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 :
<informaltable>
<tgroup cols="2">
<thead>
<row>
<entry>Mot clé</entry>
<entry>Valeur de substitution</entry>
<entry>Exemple de valeur</entry>
</row>
</thead>
<tbody>
<row>
<entry><literal>%a</literal></entry>
<entry><simpara>Nom abrégé du jour de la semaine</simpara></entry>
<entry><simpara>De Sun à Sat</simpara></entry>
</row>
<row>
<entry><literal>%A</literal></entry>
<entry><simpara>Nom complet du jour de la semaine</simpara></entry>
<entry><simpara>De Sunday à Saturday</simpara></entry>
</row>
<row>
<entry><literal>%b</literal></entry>
<entry><simpara>Nom du mois, abrégé, suivant la locale</simpara></entry>
<entry><simpara>De Jan à Dec</simpara></entry>
</row>
<row>
<entry><literal>%B</literal></entry>
<entry><simpara>Nom complet du mois, suivant la locale</simpara></entry>
<entry><simpara>De January à December</simpara></entry>
</row>
<row>
<entry><literal>%c</literal></entry>
<entry><simpara>Date et heure préférées, basées sur la locale</simpara></entry>
<entry><simpara>Exemple : Tue Feb 5 00:45:10 2009 pour le 5 Février 2009 à 12:45:10 AM</simpara></entry>
</row>
<row>
<entry><literal>%d</literal></entry>
<entry><simpara>Jour du mois en numérique, sur 2 chiffres (avec le zéro initial)</simpara></entry>
<entry><simpara>De 01 à 31</simpara></entry>
</row>
<row>
<entry><literal>%e</literal></entry>
<entry><simpara>Jour du mois, avec un espace précédant le premier chiffre. L'implémentation Windows est différente, voyez après pour plus d'informations.</simpara></entry>
<entry><simpara>De 1 à 31</simpara></entry>
</row>
<row>
<entry><literal>%H</literal></entry>
<entry><simpara>L'heure, sur 2 chiffres, au format 24 heures</simpara></entry>
<entry><simpara>De 00 à 23</simpara></entry>
</row>
<row>
<entry><literal>%I</literal></entry>
<entry><simpara>Heure, sur 2 chiffres, au format 12 heures</simpara></entry>
<entry><simpara>De 01 à 12</simpara></entry>
</row>
<row>
<entry><literal>%j</literal></entry>
<entry><simpara>Jour de l'année, sur 3 chiffres avec un zéro initial</simpara></entry>
<entry><simpara>001 à 366</simpara></entry>
</row>
<row>
<entry><literal>%m</literal></entry>
<entry><simpara>Mois, sur 2 chiffres</simpara></entry>
<entry><simpara>De 01 (pour Janvier) à 12 (pour Décembre)</simpara></entry>
</row>
<row>
<entry><literal>%M</literal></entry>
<entry><simpara>Minute, sur 2 chiffres</simpara></entry>
<entry><simpara>De 00 à 59</simpara></entry>
</row>
<row>
<entry><literal>%p</literal></entry>
<entry><simpara>'AM' ou 'PM', en majuscule, basé sur l'heure fournie</simpara></entry>
<entry><simpara>Exemple : AM pour 00:31, PM pour 22:23</simpara></entry>
</row>
<row>
<entry><literal>%s</literal></entry>
<entry><simpara>Timestamp de l'époque Unix (identique à la fonction time())</simpara></entry>
<entry><simpara>Exemple : 305815200 pour le 10 Septembre 1979 08:40:00 AM</simpara></entry>
</row>
<row>
<entry><literal>%S</literal></entry>
<entry><simpara>Seconde, sur 2 chiffres</simpara></entry>
<entry><simpara>De 00 à 59</simpara></entry>
</row>
<row>
<entry><literal>%T</literal></entry>
<entry><simpara>Identique à "%H:%M:%S" Exemple : 21:34:17 pour 09:34:17 PM</simpara></entry>
<entry><simpara></simpara></entry>
</row>
<row>
<entry><literal>%U</literal></entry>
<entry><simpara>Numéro de la semaine de l'année donnée, en commençant par le premier Lundi comme première semaine</simpara></entry>
<entry><simpara>13 (pour la 13ème semaine pleine de l'année)</simpara></entry>
</row>
<row>
<entry><literal>%w</literal></entry>
<entry><simpara>Représentation numérique du jour de la semaine</simpara></entry>
<entry><simpara>De 0 (pour Dimanche) à 6 (pour Samedi)</simpara></entry>
</row>
<row>
<entry><literal>%y</literal></entry>
<entry><simpara>L'année, sur 2 chiffres</simpara></entry>
<entry><simpara>Exemple : 09 pour 2009, 79 pour 1979</simpara></entry>
</row>
<row>
<entry><literal>%Y</literal></entry>
<entry><simpara>L'année, sur 4 chiffres</simpara></entry>
<entry><simpara>Exemple : 2038</simpara></entry>
</row>
<row>
<entry><literal>%z</literal></entry>
<entry><simpara> Soit le décalage horaire depuis UTC, ou son abréviation (suivant le système d'exploitation)</simpara></entry>
<entry><simpara> Exemple : -0500 ou EST pour l'heure de l'Est</simpara></entry>
</row>
<row>
<entry><literal>%Z</literal></entry>
<entry><simpara> Le décalage horaire ou son abréviation NON fournie par %z (suivant le système d'exploitation)</simpara></entry>
<entry><simpara> Exemple : -0500 ou EST pour l'heure de l'Est</simpara></entry>
</row>
<row>
<entry><literal>%%</literal></entry>
<entry><simpara>Le caractère de pourcentage ("%")</simpara></entry>
<entry><simpara>---</simpara></entry>
</row>
</tbody>
</tgroup>
</informaltable>
</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>
<varlistentry>
<term>time</term>
<listitem>
<simpara>Booléen définissant si l'outil de sélection permetra ou non le choix
de l'heure en plus de la date</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>manual</term>
<listitem>
<simpara>Booléen autorisant ou non l'édition manuelle du champs. Si ce paramètre
vaut <literal>False</literal>, la sélection se fera uniquement à l'aide de l'outil
graphique</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>showNowButton</term>
<listitem>
<simpara>Booléen définissant si le bouton <emphasis>Maintenant</emphasis> est
affiché ou non. Par défaut, il est affiché.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>showTodayButton</term>
<listitem>
<simpara>Booléen définissant si le bouton <emphasis>Aujourd'hui</emphasis> est
affiché ou non. Par défaut, il est affiché.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>style</term>
<listitem>
<para>Nom du style d'affichage de l'outil de sélection. Les valeurs possibles
sont par défaut :
<itemizedlist>
<listitem><simpara>default</simpara></listitem>
<listitem><simpara>dashboard</simpara></listitem>
<listitem><simpara>vista</simpara></listitem>
<listitem><simpara>jqui</simpara></listitem>
</itemizedlist>
<note><simpara>La création de nouveau thème est possible. Pour plus d'information,
consulter <ulink url='http://mootools.net/forge/p/mootools_datepicker'>l'aide de
l'outil de sélection de date</ulink>.</simpara></note>
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>special_values</term>
<listitem>
<para>Tableau listant les valeurs spéciales que peut prendre l'attribut. Dans ce tableau
associatif, la clé doit correspondre à la valeur de l'attribut (telle que fournie par
<link linkend='config-LSattr_ldap_date'>l'attribut LDAP</link>) et la valeur associée au
label associé.</para>
<para>Ces valeurs spéciales seront proposées à l'utilisateur sous la forme de cases à cocher
dans le formulaire. Elles peuvent permettre par exemple de données une signification
particulière au zéro pour un attribut LDAP stockant un <emphasis>timestamp</emphasis>.</para>
</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,131 @@
<sect4 id="config-LSattr_html_jsonCompositeAttribute">
<title>LSattr_html_jsonCompositeAttribute</title>
<para>Ce type est utilisé pour la gestion des attributs dont les valeurs sont
des dictionnaires de valeurs encodées aux formats <emphasis>JSON</emphasis>.</para>
<programlisting linenumbering="unnumbered">
<citetitle>Exemple de valeur gérée</citetitle>
<![CDATA[{"component1": "value1", "component2": "value2", "component3": "value3"}]]>
</programlisting>
<para>Le principe est que ces dictionnaires contienent plusieurs composants référencés
par leur clé et stockant une valeur dont le type peut être un texte libre ou
bien être issue d'une liste déroulante configurable selon le même principe que
le type d'attribut &LSattr_html_select_list;.</para>
<programlisting linenumbering="unnumbered">
<citetitle>Structure</citetitle>...
<![CDATA['html_options' => array (
'components' => array (
'[clé composant 1]' => array (
'label' => '[Label du composant]',
'help_info' => '[Message d'aide sur le composant]',
'type' => '[Type de la valeur stocké]',
'required' => [Booléen],
'multiple' => [Booléen],
'check_data' => => array (
// Régle de vérification syntaxique des données saisies
),
),
'[clé composant 2]' => array (
'label' => '[Label du composant 2]',
'type' => 'select_list',
'required' => [Booléen],
'options' => array (
[Configuration équivalente à un attribut LSattr_html_select_list]
)
),
[...]
),
'fullWidth' => [booléen],
),]]>
...
</programlisting>
<variablelist>
<title>Paramètres de configuration</title>
<varlistentry>
<term>components</term>
<listitem>
<para>Tableau associatif obligatoire contenant en valeur clé, l'identifiant des
composants, correspondant à la clé dans le dictionnaire <emphasis>JSON</emphasis>,
et en valeurs associés, la configuration du composant.</para>
<variablelist>
<varlistentry>
<term>label</term>
<listitem>
<simpara>Le label du composant.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>help_info</term>
<listitem>
<simpara>Message d'aide sur le composant (affiché uniquement en mode édition).
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>type</term>
<listitem>
<simpara>Le type de valeur du composant. Les types possibles sont
<literal>text</literal> ou <literal>select_list</literal> pour respectivement
soit une valeur saisie librement, soit une valeur sélectionnée parmis une liste
déroulante.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>options</term>
<listitem>
<simpara>Dans le cadre d'un composant de type <literal>select_list</literal>, cela
correspond à la configuration de la liste déroulante. Cette configuration utilise la
même syntaxe de configuration que celle du type d'attribut &LSattr_html_select_list;
et son paramètre <literal>html_options</literal>.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>multiple</term>
<listitem>
<simpara>Booléen définissant si ce composant peut stocker plusieurs valeurs (Défaut :
<emphasis>Faux</emphasis>).</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>required</term>
<listitem>
<simpara>Booléen définissant si ce composant doit obligatoirement être défini (Défaut :
<emphasis>Faux</emphasis>).</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>check_data</term>
<listitem>
<simpara>Tableau associatif contenant les règles de vérification syntaxique
des données du composant. Ces règles sont configurables de la même manière
que les celles des valeurs attributs.
<link linkend='config-LSattribute-check-data'>Voir la section concernée.</link>
</simpara>
</listitem>
</varlistentry>
</variablelist>
</listitem>
</varlistentry>
<varlistentry>
<term>fullWidth</term>
<listitem>
<simpara>Booléen permettant de définir si l'affichage dans le formulaire doit se faire
sur toute la largeur disponible de la page (Défaut : <emphasis>Faux</emphasis>).</simpara>
</listitem>
</varlistentry>
</variablelist>
</sect4>

View file

@ -0,0 +1,41 @@
<sect4 id="config-LSattr_html_labeledValue">
<title>LSattr_html_labeledValue</title>
<para>Ce type est utilisé pour la gestion des attributs dont la valeur est
prefixé d'un <literal>label</literal> et qui respecte le format suivant :
<literal>[label]valeur</literal>.</para>
<programlisting linenumbering="unnumbered">
<citetitle>Structure</citetitle>...
<![CDATA['html_options' => array(
'labels' => array ( // Liste des labels possible
'label1' => 'Libellé label1',
'label2' => 'Libellé label2',
[...]
),
'translate_labels' => [booléen],
),]]>
...
</programlisting>
<variablelist>
<title>Paramètres de configuration</title>
<varlistentry>
<term>labels</term>
<listitem>
<simpara>Tableau associatif obligatoire contenant en valeur clé, le
<literal>label</literal> utilisé dans la valeur stockée et en valeur
associée, le valeur d'affichage du <literal>label</literal>.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>translate_labels</term>
<listitem>
<simpara>Booléen permettant d'activer/désactiver la traduction des labels (Par defaut : <literal>Vrai</literal>).</simpara>
</listitem>
</varlistentry>
</variablelist>
</sect4>

View file

@ -0,0 +1,34 @@
<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. En plus d'un affichage adapté, il offre la possibilité
d'envoyer des mails directement depuis l'interface de l'application.</para>
<programlisting linenumbering="unnumbered">
<citetitle>Structure</citetitle>...
<![CDATA['html_options' => array(
'disableMailSending' => [booléen],
),]]>
...
</programlisting>
<variablelist>
<title>Paramètres de configuration</title>
<varlistentry>
<term>disableMailSending</term>
<listitem>
<simpara>Désactive l'envoi de mail depuis l'interface pour cet attribut.</simpara>
<note><simpara>Ceci ne désactive pas pour autant le lien HTML de type
<emphasis>mailto:</emphasis>. Pour cela, utilisez plutôt le type d'attribut HTML
<link linkend='config-LSattr_html_text'>text</link>.</simpara></note>
</listitem>
</varlistentry>
</variablelist>
<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,29 @@
<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; par défaut. Exemple : <emphasis>50000000S</emphasis>
correspond à un quota de 50Mio.</para>
<programlisting linenumbering="unnumbered">
<citetitle>Structure</citetitle>...
<![CDATA['html_options' => array(
'suffix' => '[suffix]',
)
),]]>
...
</programlisting>
<variablelist>
<title>Paramètres de configuration</title>
<varlistentry>
<term>suffix</term>
<listitem>
<simpara>Chaine de caractères suffixant la valeur du quota (Par défaut : <literal>S</literal>).</simpara>
</listitem>
</varlistentry>
</variablelist>
</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 (compatible Perl) 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,315 @@
<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(
'isLoginPassword' => [booleen],
'generationTool' => [booleen],
'autoGenerate' => [booleen],
'length' => [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 possibles]', // Liste caractère avec un nombre
// d'apparitions égal à 1
...
),
'use_pwgen' => [booléen], // Utiliser pwgen pour la génération du mot de passe
'pwgen_path' => "/path/to/pwgen",
'pwgen_opts' => "[options à passer à pwgen]",
'verify' => [booléen], // Activation de l'outil de vérification du mot de passe
'viewHash' => [booléen], // Activation de l'outil de visualisation du mot de passe haché
'confirmChange' => [booléen], // Activation de la confirmation en cas de changement du mot de passe
'confirmChangeQuestion' => "[LSformat]", // LSformat de la question de confirmation du changement 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
'get_mail_attr_function' => '[function]', // Fonction retournant l'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
'checkDomain' => false, // Désactivation de la vérification du domaine de l'adresse email
'domain' => '[nom de domaine]', // Nom de domaine obligatoire lors de la validation de l'adresse email
)
),]]>
...
</programlisting>
<variablelist>
<title>Paramètres de configuration</title>
<varlistentry>
<term>isLoginPassword</term>
<listitem>
<simpara>Booléen définissant si le mot de passe est celui utilisé par l'utilisateur
pour se logguer à l'annuaire LDAP. Si c'est le cas, pour vérifier si le mot de passe
correspond avec un autre, une tentative de connexion de l'utilisateur à l'annuaire
sera faite. (Par défaut : <literal>Faux</literal>)</simpara>
</listitem>
</varlistentry>
<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>length</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>use_pwgen</term>
<listitem>
<para>Booléen définissant si la commande <literal>pwgen</literal> doit être
utilisé pour générer le mot de passe.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>pwgen_path</term>
<listitem>
<para>Chemin d'accès au binaire <literal>pwgen</literal>.
(Par défaut : <literal>pwgen</literal>).</para>
</listitem>
</varlistentry>
<varlistentry>
<term>pwgen_opts</term>
<listitem>
<para>Options à passer à la commande <literal>pwgen</literal>.</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>viewHash</term>
<listitem>
<simpara>Booléen définissant si l'utilisateur aura accès à la fonctionnalité
de visualisation du mot de passe haché.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>confirmInput</term>
<listitem>
<simpara>Booléen définissant si un second champ mot de passe sera affiché dans
le formulaire pour que l'utilisateur confirme la saisie du nouveau mot de passe.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>confirmInputError</term>
<listitem>
<simpara>&LSformat; du message d'erreur affiché à l'utilisateur si le mot de
passe saisie dans le champs de confirmation ne correspond pas au nouveau mot
de passe. <emphasis>Paramètre facultatif.</emphasis></simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>confirmChange</term>
<listitem>
<simpara>Booléen définissant si l'utilisateur devra confirmer le changement de
ce mot de passe. Lorsque cette fonctionnalité est activée, l'utilisateur verra
apparaître une popup de confirmation à la validation du formulaire s'il a saisi
un nouveau mot de passe.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>confirmChangeQuestion</term>
<listitem>
<simpara>&LSformat; de la question posée à l'utilisateur en cas de changement
du mot de passe et si la fonctionnalité est activée. Il sera composé à l'aide
du <emphasis>label</emphasis> de l'attribut. <emphasis>Paramètre facultatif.
</emphasis></simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>clearView</term>
<listitem>
<simpara>Booléen définissant si l'utilisateur pourra voir le mot de passe en
clair par défaut (y comris en mode visualisation uniquement).</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>clearEdit</term>
<listitem>
<simpara>Booléen définissant si l'utilisateur éditera le mot de passe au travers
un champs HTML de type <emphasis>text</emphasis> et donc lisible ou au travers un
champs HTML de type <emphasis>password</emphasis>.</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 les
informations de l'object LDAP, y compris le mot clé <emphasis>%{password}</emphasis>
correspondant à 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. Cet attribut peut également
être un tableau de plusieurs noms d'attributs. Dans ce cas, la première
valeur correcte sera retenue.
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>
<varlistentry>
<term>get_mail_attr_function</term>
<listitem>
<simpara>Nom de la fonction (ou <literal>callable</literal> au sens PHP)
qui sera utilisé pour récupérer le nom de l'attribut listant les mails
possibles de l'utilisateur. Cette fonction prendra en paramètre, l'objet
<literal>LSformElement</literal> courant et devra retourner une valeur
équivalente au paramètre de configuration <literal>mail_attr</literal>.
Si ce paramètre est défini, il prévalera toujours sur le paramètre
<literal>mail_attr</literal>.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>bcc</term>
<listitem>
<simpara>Mettre en <emphasis>BCC</emphasis> un mail systématiquement
(ou plusieurs en les séparant par des virgules).</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>headers</term>
<listitem>
<simpara>Un tableau de type clé/valeur ou la clé est le nom d'un header
à ajouter au mail et la valeur est la valeur de l'header en question.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>checkDomain</term>
<listitem>
<simpara>Booléen définissant si le domaine de l'adresse mail doit être
validée. <emphasis>Paramètre facultatif, par défaut: <literal>TRUE</literal>
</emphasis></simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>domain</term>
<listitem>
<simpara>Nom de domaine obligatoire lors de la validation de l'adresse mail.
Ce paramètre peut être une simple chaine correspondant au domaine ou un
tableau listant plusieurs domaines valides. <emphasis>Paramètre facultatif,
par défaut tous les domaines sont acceptés.</emphasis></simpara>
</listitem>
</varlistentry>
</variablelist>
</para>
</listitem>
</varlistentry>
</variablelist>
</sect4>

View file

@ -0,0 +1,68 @@
<sect4 id="config-LSattr_html_postaladdress">
<title>LSattr_html_postaladdress</title>
<para>Ce type est utilisé pour la gestion des attributs du type de l'attribut
standard <emphasis>postalAddress</emphasis>. Ce type d'attribut permet d'afficher,
en plus de l'adresse, un lien composé à partir d'informations de l'objet permettant
par exemple d'afficher un lien vers une carte géocalisant l'adresse postale.</para>
<para>Par défaut, le lien ajouté sera un lien de recherche de l'adresse postale
générée à partir de la valeur de l'attribut (en remplaçant les retours à la ligne
(<literal>\n</literal>) par des espaces) via le service
<ulink url='http://nominatim.openstreetmap.org/'>Nominatim d'OpenStreetMap</ulink>.
</para>
<note><simpara>Dans le cadre du fonctionnement par défaut et 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_postaladdress'>postaladdress</link></simpara></note>
<programlisting linenumbering="unnumbered">
<citetitle>Structure</citetitle>...
<![CDATA['html_options' => array(
'map_url_pattern_format' => '[LSformat]',
'map_url_pattern_generate_function' => '[callable]',
'map_url_format' => '[LSformat]',
),]]>
...
</programlisting>
<variablelist>
<title>Paramètres de configuration</title>
<varlistentry>
<term>map_url_pattern_format</term>
<listitem>
<simpara>Ce &LSformat; doit permettre de générer la valeur de l'adresse postale
qui sera insérée dans l'URL du lien ajouté dans l'interface.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>map_url_pattern_generate_function</term>
<listitem>
<simpara>Ce paramètre permet de définir une fonction qui sera utilisée à la place
du paramètre <literal>map_url_pattern_format</literal> pour générer la valeur de
l'adresse postale qui sera insérée dans l'URL du lien ajouté dans l'interface.
Cette fonction prendra en paramètre l'objet <emphasis>LSformElement</emphasis>
courant et devra retourner une chaîne de caractères correspondant à l'adresse
postale à insérer dans le lien de l'interface. Par défaut, la fonction
<literal>LSformElement_postaladdress__generate_pattern</literal> est utilisée.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>map_url_format</term>
<listitem>
<simpara>Ce &LSformat; doit permettre de générer l'URL du lien ajouté dans
l'interface. Il sera composé avec les informations de l'objet LDAP, y compris
le mot clé <emphasis>%{pattern}</emphasis> correspondant à la valeur de l'adresse
postale générée à l'aide des paramètres précédents. Par défaut, la format suivant
sera utilisé :
<literal>http://nominatim.openstreetmap.org/search.php?q=%{pattern}</literal></simpara>
</listitem>
</varlistentry>
</variablelist>
</sect4>

View file

@ -0,0 +1,8 @@
<sect4 id="config-LSattr_html_pre">
<title>LSattr_html_pre</title>
<para>Ce type est dérivé du type &LSattr_html_textarea; et permet
simplement que lors de l'affichage de la valeur, celle-ci soit
affichée en respectant les retours à la ligne et en utilisant une
police de caractères <literal>monospace</literal>. Cela reproduit
l'affichage d'une balise HTML <literal>pre</literal>.</para>
</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,71 @@
<sect4 id="config-LSattr_html_sambaAcctFlags">
<title>LSattr_html_sambaAcctFlags</title>
<para>Ce type est prévu pour gérer l'attribut <emphasis>sambaAcctFlags</emphasis> du
schéma Samba, qui au travers d'une seule et unique valeur, respectant un format prévu,
liste l'ensemble des drapeaux actifs d'un compte Samba. Il est conçu pour être utilisé
conjointement avec le type d'attribut LDAP &LSattr_ldap_sambaAcctFlags;.</para>
<para>Pour définir la valeur par défaut de cet attribut, il faut définir paramètre <literal>
default_value</literal> comme un tableau des drapeaux telque prévu par Samba :
<variablelist>
<title>Listes des drapeaux Samba</title>
<varlistentry>
<term>U</term>
<listitem><simpara>Compte utilisateur standard</simpara></listitem>
</varlistentry>
<varlistentry>
<term>W</term>
<listitem><simpara>Compte de poste de travail approuvé</simpara></listitem>
</varlistentry>
<varlistentry>
<term>S</term>
<listitem><simpara>Compte de serveur approuvé</simpara></listitem>
</varlistentry>
<varlistentry>
<term>I</term>
<listitem><simpara>Compte de domaine approuvé</simpara></listitem>
</varlistentry>
<varlistentry>
<term>M</term>
<listitem><simpara>Compte de connexion Majority Node Set (MNS)</simpara></listitem>
</varlistentry>
<varlistentry>
<term>H</term>
<listitem><simpara>Dossier personnel requis</simpara></listitem>
</varlistentry>
<varlistentry>
<term>N</term>
<listitem><simpara>Compte sans mot de passe</simpara></listitem>
</varlistentry>
<varlistentry>
<term>X</term>
<listitem><simpara>Le mot de passe n'expire jamais</simpara></listitem>
</varlistentry>
<varlistentry>
<term>D</term>
<listitem><simpara>Compte désactivé</simpara></listitem>
</varlistentry>
<varlistentry>
<term>T</term>
<listitem><simpara>Copie temporaire d'un autre compte</simpara></listitem>
</varlistentry>
<varlistentry>
<term>L</term>
<listitem><simpara>Compte automatiquement bloqué</simpara></listitem>
</varlistentry>
</variablelist>
</para>
<programlisting linenumbering="unnumbered">
<citetitle>Exemple de valeur par défaut</citetitle>...
<![CDATA['default_value' => array('U', 'X'),]]>
...
</programlisting>
<note><simpara>Ce type d'attribut est implémenté en dérivant le type
<emphasis>LSattr_html_select_box</emphasis> dont les valeurs possibles sont
pré-configurées (paramètre <literal>possible_values</literal>). Même si cela n'est pas
forcément utiles, les autres paramètres du type parent restent utilisables.</simpara>
</note>
</sect4>

View file

@ -0,0 +1,32 @@
<sect4 id="config-LSattr_html_select_box">
<title>LSattr_html_select_box</title>
<para>Ce type est identique au type <emphasis>LSattr_html_select_list</emphasis>
excepté qu'il utilise en lieu et place d'une balise HTML <literal>select</literal>,
plusieurs balises HTML <literal>input</literal> de type <literal>checkbox</literal>
en cas de valeurs multiples ou de type <literal>radio</literal> en cas de valeur
unique. Les paramètres de configuration de la classe
<emphasis>LSattr_html_select_list</emphasis> sont tous hérités et fonctionnent donc
de la même manière. Par ailleurs, ce type dispose également de paramètres qui lui
sont propre (voir ci-dessous).</para>
<programlisting linenumbering="unnumbered">
<citetitle>Structure</citetitle>...
<![CDATA['html_options' => array (
'inline' => [Booléen],
),]]>
...
</programlisting>
<variablelist>
<title>Paramètres de configuration</title>
<varlistentry>
<term>inline</term>
<listitem>
<simpara>Booléen définissant si les valeurs possibles doivent être
affichées sur une même ligne ou non (Faux par défaut).</simpara>
</listitem>
</varlistentry>
</variablelist>
</sect4>

View file

@ -0,0 +1,256 @@
<sect4 id="config-LSattr_html_select_list">
<title>LSattr_html_select_list</title>
<para>Ce type est utilisé pour la gestion des attributs dont les valeurs font
partie d'une liste statique ou dynamique. Il est possible de lister des valeurs
statiques et également des références à d'autres &LSobjects;. La référence à
un objet correspond à une valeur clé, référente à un objet précis, qui peut être
soit la valeur d'un de ses attributs, soit son <emphasis>DN</emphasis>.</para>
<programlisting linenumbering="unnumbered">
<citetitle>Structure</citetitle>...
<![CDATA['html_options' => array (
'possible_values' => array (
'[LSformat de la valeur clé]' => '[LSformat du nom d'affichage]',
...
'OTHER_OBJECT' => array (
'object_type' => '[Type d'LSobject]',
'display_name_format' => '[LSformat du nom d'affichage des LSobjects]',
'value_attribute' => '[Nom de l'attribut clé]',
'values_attribute' => '[Nom de l'attribut clé multi-valeur]',
'filter' => '[Filtre de recherche des LSobject]',
'scope' => '[Scope de la recherche]',
'basedn' => '[Basedn de la recherche]',
'onlyAccessible' => '[Booléen]'
),
'OTHER_ATTRIBUTE' => '[attr]',
// Or :
'OTHER_ATTRIBUTE' => array(
'[attr1]' => '[label1]',
'[attr2]' => '[label2]',
[...]
),
// Or :
'OTHER_ATTRIBUTE' => array(
'attr' => [attr],
'json_component_key' => '[Composant JSON clé]',
'json_component_label' => '[Composant JSON label]',
),
array (
'label' => '[LSformat du nom du groupe de valeurs]',
'possible_values' => array (
'[LSformat de la valeur clé]' => '[LSformat du nom d'affichage]',
...
'OTHER_OBJECT' => array (
...
)
)
)
),
'get_possible_values' => [callable],
'translate_labels' => [booléen],
'sort' => [Booléen],
'sortDirection' => '[ASC|DESC]'
),]]>
...
</programlisting>
<variablelist>
<title>Paramètres de configuration</title>
<varlistentry>
<term>possible_values</term>
<listitem>
<para>Tableau associatif obligatoire contenant en valeur clé le &LSformat;
des valeurs clés prisent par l'attribut et en valeurs associées, le &LSformat;
des noms d'affichage de ces valeurs. Ces &LSformats; sont composés à partir des
valeurs de l'objet courant (attributs, dn, ...).</para>
<para>Si la valeur clé est égale à <literal>OTHER_OBJECT</literal>, une liste
d'&LSobject; sera insérée dans la liste des valeurs possibles. La valeur
associée est alors un tableau associatif dont les valeurs clés sont les noms
des paramètres de configuration de la recherche de ces &LSobjects; et les
valeurs associées, les valeurs des paramètres.</para>
<para>Il est possible de regrouper des valeurs de l'attribut en plaçant leur
déclaration dans un sous-tableau. Ce sous-tableau devra contenir la clé
<literal>label</literal> dont la valeur associé sera le &LSformat; du nom du groupe
de valeurs. Ce &LSformat; est composé à partir des valeurs de l'objet courant
(attributs, dn, ...). Une seconde clé <literal>possible_values</literal> regroupera
les valeurs possibles du groupe. Comme pour le tableau principal, la clé <literal>
OTHER_OBJECT</literal> permet d'imcorporer une liste d'&LSobject;.</para>
<variablelist>
<varlistentry>
<term>object_type</term>
<listitem>
<simpara>Nom du type d'&LSobject; en référence.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>display_name_format</term>
<listitem>
<simpara>&LSformat; du nom d'affichage des objets lors de leur sélection.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>value_attribute</term>
<listitem>
<simpara>Nom de l'attribut des &LSobjects; en référence servant de valeur
clé et permettant de les identifier (Exemple : <emphasis>dn</emphasis> ou
<emphasis>uid</emphasis>).</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>values_attribute</term>
<listitem>
<simpara>Nom de l'attribut des &LSobjects; en référence servant de catalogue de
valeurs. Dans ce mode, la valeur n'a pas de label et est affichée directement
dans l'interface. Ce paramètre peut-être utilisé en complément ou non du paramètre
<emphasis>value_attribute</emphasis>.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>filter</term>
<listitem>
<simpara>Filtre falcultatif de la recherche des LSobjets. Il sera dans tous
les cas agrémenté des valeurs des <emphasis>objectclass</emphasis> du type
d'&LSobject;.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>scope</term>
<listitem>
<simpara>Scope falcultatif de la recherche des LSobjets.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>basedn</term>
<listitem>
<simpara>Basedn falcultatif de la recherche des LSobjets.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>onlyAccessible</term>
<listitem>
<simpara>Booléen falcultatif définissant si seul les LSobjets auxquels
l'utilisateur connecté à accès doivent être considérés comme sélectionnables
(Faux par défaut).</simpara>
</listitem>
</varlistentry>
</variablelist>
<para>Si la valeur clé est égale à <literal>OTHER_ATTRIBTE</literal>, une liste
de valeur possible sera composée à l'aide des valeurs d'un (ou plusieurs) autre
attribut de l'objet courant. La valeur associée peut être alors&nbsp;:
<itemizedlist>
<listitem>
<simpara>soit le nom d'un attribut dont les valeurs seront utilisées comme valeurs
possibles (la valeur affichée est égale à la valeur stockée).</simpara>
</listitem>
<listitem>
<simpara>soit un tableau associatif dont les valeurs clés sont les noms des attributs
dont les valeurs seront utilisés comme valeurs possibles et dont les valeurs associés
seront les labels sous lesquels ces valeurs seront regroupées (la valeur
affichée est égale à la valeur stockée).</simpara>
</listitem>
<listitem>
<simpara>soit un tableau associatif référençant un attribut sous la clé <emphasis>attr
</emphasis> dont les valeurs seront utilisées comme valeurs possibles. Cet attribut
peut-être du type &LSattr_html_jsonCompositeAttribute;. Il sera alors possible d'utiliser
les valeurs d'un composant en particulier en le référençant à l'aide de la clé <emphasis>
json_component_key</emphasis>. Il est également possible de référencer un autre composant
à l'aide de la clé <emphasis>json_component_label</emphasis> et dont les valeurs seront
utilisées comme valeurs affichées lors de la sélection. À défaut, les valeurs affichées
seront identiques à celles stockées.</simpara>
</listitem>
</itemizedlist>
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>get_possible_values</term>
<listitem>
<para>Paramètre permettant de spécifier un <emphasis>callable</emphasis> qui sera utilisé
pour lister les valeurs possibles de l'attribut. Il recevra en paramètres les informations
suivantes:
<variablelist>
<varlistentry>
<term>$options</term>
<listitem>
<simpara>Les options HTML de l'attribut.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>$name</term>
<listitem>
<simpara>Le nom de l'attribut.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>&amp;$ldapObject</term>
<listitem>
<simpara>Une référence à l'objet <literal>LSldapObject</literal>.</simpara>
</listitem>
</varlistentry>
</variablelist>
</para>
<para>La valeur de retour attendue est un tableau associatif des valeurs possibles
de l'attribut avec la valeur que prendra l'attribut en tant que clé et le label
correspondant en tant que valeur. Tout autre retour sera considéré comme un échec
et déclenchera une erreur.</para>
<para>Il est également possible de regrouper des valeurs possibles de l'attribut: pour
cela, le tableau retourné devra lui-même contenir un tableau associatif contenant la
label traduit du groupe sous la clé <literal>label</literal> et les valeurs possibles
du groupe sous la clé <literal>possible_values</literal>.</para>
<para>Les valeurs retournées pourront être combinées avec les autres valeurs possibles
configurées de l'attribut. La prise en charge du tri des valeurs possibles est assurée
par la fonction appelante sauf dans le cas des sous-groupes de valeurs possibles. Dans
ce cas, la méthode <literal>LSattr_html_select_list :: _sort()</literal> pourra être
utilisée pour trier les valeurs du sous-groupe: cette méthode accepte en paramètre une
référence du tableau des valeurs possibles ainsi que les options HTML de l'attribut.
</para>
<para>Si la traduction des labels des valeurs possibles de l'attribut est activées
(voir ci-dessous), celle-ci doit être prise en charge par la fonction configurée.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>translate_labels</term>
<listitem>
<simpara>Booléen permettant d'activer/désactiver la traduction des labels (Par defaut : <literal>Vrai</literal>).</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>sort</term>
<listitem>
<simpara>Booléen définissant si les valeurs possibles doivent être
triées ou non (Vrai par défaut). Le trie est effectué sur les libellés
des valeurs possibles.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>sortDirection</term>
<listitem>
<simpara>Mot clé déterminant le sens du trie des valeurs possibles.</simpara>
<simpara>Valeurs possibles : <literal>ASC</literal> ou <literal>DESC</literal> (<literal>ASC</literal> par défaut).</simpara>
</listitem>
</varlistentry>
</variablelist>
</sect4>

View file

@ -0,0 +1,120 @@
<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 (
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]',
'filter' => '[Filtre de recherche]',
'onlyAccessible' => '[Booléen]'
),
[...]
),
'ordered' => [Booléen],
'sort' => [Booléen],
'sortDirection' => '[ASC|DESC]'
),]]>
...
</programlisting>
<variablelist>
<title>Paramètres de configuration</title>
<varlistentry>
<term>selectable_object</term>
<listitem>
<simpara>Tableau dont chaque valeur correspond à un tableau associatif spécifiant
un type d'&LSobject; sélectionnable. Pour chaque type d'objet sélectionnable, les
paramètres suivants doivent être renseignés :</simpara>
<variablelist>
<varlistentry>
<term>object_type</term>
<listitem>
<simpara>Nom du type d'&LSobject; en référence
<emphasis>(Paramètre obligatoire)</emphasis>.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>display_name_format</term>
<listitem>
<simpara>&LSformat; du nom d'affichage des objets lors de leur sélection
<emphasis>(Paramètre facultatif)</emphasis>.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>value_attribute</term>
<listitem>
<simpara>Nom de l'attribut des &LSobjects; en référence servant de valeur
clé et permettant de les identifier <emphasis>(Paramètre obligatoire,
exemples : <literal>dn</literal> ou <literal>uid</literal>)</emphasis>.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>filter</term>
<listitem>
<simpara>Filtre de recherche qui sera ajouter au filtre par défaut lors de la
sélection des objets <emphasis>(Paramètre facultatif)</emphasis>.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>onlyAccessible</term>
<listitem>
<simpara>Booléen définissant si seul les LSobjets auxquels l'utilisateur connecté
à accès doivent être considérés comme sélectionnables <emphasis>(Paramètre facultatif,
par défaut: <literal>False</literal>)</emphasis>.</simpara>
</listitem>
</varlistentry>
</variablelist>
</listitem>
</varlistentry>
<varlistentry>
<term>ordered</term>
<listitem>
<simpara>Booléen définissant si la liste des objets choisis doit être ordonnable ou
non <emphasis>(Paramètre facultatif, par défaut: <literal>False</literal>)</emphasis>.
Cela aura pour effet d'activer une fonctionnalité dynamique de l'interface permettant
de remonter ou descendre dans la liste les objets choisis.</simpara>
<note><simpara>Cette fonctionnalité désactive automatiquement le trie des
objets à l'affichage.</simpara></note>
</listitem>
</varlistentry>
<varlistentry>
<term>sort</term>
<listitem>
<simpara>Booléen définissant si la liste des objets choisis doit être
triée ou non <emphasis>(Paramètre facultatif, par défaut:
<literal>True</literal>)</emphasis>. Le trie est effectué sur les libellés
des objets choisis.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>sortDirection</term>
<listitem>
<simpara>Mot clé déterminant le sens du trie des objets choisis.</simpara>
<simpara>Valeurs possibles : <literal>ASC</literal> ou <literal>DESC</literal> (<literal>ASC</literal> par défaut).</simpara>
</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,10 @@
<sect4 id="config-LSattr_html_tel">
<title>LSattr_html_tel</title>
<para>Ce type est utilisé pour la gestion des attributs dont la valeur est
un numéro de téléphone. Lors de l'affichage, un lien hypertexte avec une URI
de type <literal>tel:~~</literal> est affiché.</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,203 @@
<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],
// Autocomplétion
'autocomplete' => array (
'object_type' => '[Type d'LSobject]', // facultatif (voir ci-dessous)
'value_attributes' => array (
'[attr1]',
'[attr2]',
[...]
),
'filter' => '[filtre LDAP]',
'basedn' => '[base DN spécifique]',
'scope' => '[scope de recherche]',
'displayFormat' => '[LSformat]',
'onlyAccessible' => [booléen],
),
),]]>
...
</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>
<varlistentry>
<term>autocomplete</term>
<listitem>
<para>Paramètrage de l'autocomplétion des valeurs saisies : on paramètre ici la
recherche des valeurs possibles de l'attribut dans l'annuaire qui peut se faire :
<itemizedlist>
<listitem><simpara>Sur la base d'un type d'&LSobject; donné : l'autocomplétion se fera
alors comme n'importe quelle recherche d'un type d'objet donné.</simpara></listitem>
<listitem><simpara>Sur la base d'une recherche brute dans l'annuaire : l'autocomplétion se
fera alors au travers une recherche brute dans l'annuaire sur n'importe quels objets ayant
un des attributs spécifiés dans le paramètre <literal>value_attributes</literal>
correspondant.</simpara></listitem>
</itemizedlist>
</para>
<para>Les paramètres associés à ces deux cas de figure sont décrits ci-dessous :
<variablelist>
<varlistentry>
<term>object_type</term>
<listitem>
<simpara>Le type d'&LSobject; recherché.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>value_attributes</term>
<listitem>
<simpara>Le(s) nom de l'attribut stockant les valeurs possibles recherchées. Il peut s'agir
d'une chaîne de caractères ou d'un tableau s'il y a plusieurs attributs.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>pattern_filter</term>
<listitem>
<simpara>Le &LSformat; du filtre de recherche à partir du mot clé recherché. Ce paramètre est
facultatif et utile que dans le cas d'une recherche sans type d'&LSobject; précis. S'il est
défini, ce &LSformat; sera composé à l'aide du mot clé recherché. À défaut, le filtre de
recherche sera composé à l'aide des différents <literal>value_attributes</literal> configurés.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>filter</term>
<listitem>
<simpara>Un filtre de recherche facultatif venant en plus de celui calculé automatiquement à partir
du mot clé de recherche.</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, par défaut : <literal>sub</literal>.</emphasis></simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>display_name_format</term>
<listitem>
<simpara>Le &LSformat; d'affichage des objets trouvés. Ce paramètre est facultatif et par défaut,
il s'agira du format d'affichage propre au type d'&LSobject; (si défini) et à défaut, la valeur
possible trouvée sera affichée. Si est configuré, ce &LSformat; sera composé à l'aide des valeurs
brutes des attributs des objets correspondants avec en plus la valeur possible trouvée dans le mot
clé <literal>value</literal>.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>only_accessible</term>
<listitem>
<simpara>Booléen falcultatif définissant si seul les &LSobjects; auxquels l'utilisateur connecté à accès
doivent être considérés comme sélectionnables (Faux par défaut). Ce paramètre n'est appliqué que dans
le cas d'une recherche pour un type d'&LSobject; donné.</simpara>
</listitem>
</varlistentry>
</variablelist>
</para>
</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,81 @@
<sect4 id="config-LSattr_html_valueWithUnit">
<title>LSattr_html_valueWithUnit</title>
<para>Ce type est utilisé pour la gestion des attributs dont la valeur est un entier
auxquel un facteur peut s'appliquer (par exemple : <literal>Kilo, Méga, ...</literal>).</para>
<programlisting linenumbering="unnumbered">
<citetitle>Structure</citetitle>...
<![CDATA['html_options' => array(
'units' => array (
'[facteur1]' => '[label unit1]',
'[facteur2]' => '[label unit2]',
[...]
),
'translate_labels' => [booléen],
'nb_decimals' => [number of decimals],
'dec_point' => '[decimals point]',
'thousands_sep' => '[thousands separator]',
'store_integer' => [booléen],
'round_down' => [booléen],
)
),]]>
...
</programlisting>
<variablelist>
<title>Paramètres de configuration</title>
<varlistentry>
<term>units</term>
<listitem>
<simpara>Tableau associatif dont la clé est un entier correspondant au facteur et la valeur est le label de l'unité. (Par exemple : <literal>1 => Octet, 1024 => Kilo-octet, ...</literal>).</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>translate_labels</term>
<listitem>
<simpara>Booléen permettant d'activer/désactiver la traduction des labels (Par defaut : <literal>Vrai</literal>).</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>nb_decimals</term>
<listitem>
<simpara>Le nombre de décimals à afficher en cas de nombre non-entier (Par defaut : <literal>2</literal>).</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>dec_point</term>
<listitem>
<simpara>Le caractère à utiliser comme séparateur de décimal (Par defaut, une virgule).</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>thousands_sep</term>
<listitem>
<simpara>Le caractère à utiliser comme séparateur de milliers (Par defaut, un espace).</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>store_integer</term>
<listitem>
<simpara>Booléen permettant d'activer/désactiver le stockage de valeurs entières (Par defaut :
<literal>Vrai</literal>).</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>round_down</term>
<listitem>
<simpara>Booléen permettant d'arrondir à l'entier inférieur (et non à l'entier supérieur
par défaut) en cas de stockage de valeurs entières.</simpara>
</listitem>
</varlistentry>
</variablelist>
</sect4>

View file

@ -0,0 +1,33 @@
<sect4 id="config-LSattr_html_wysiwyg">
<title>LSattr_html_wysiwyg</title>
<para>Ce type est utilisé pour la gestion des attributs dont la valeur est du
code HTML et dont l'édition doit être fait à l'aide d'un éditeur <literal>WYSIWYG
</literal>. La librairie &TinyMCE; est utilisée pour cela.</para>
<programlisting linenumbering="unnumbered">
<citetitle>Structure</citetitle>...
<![CDATA['html_options' => array(
'extra_options' => array (
[Options à passer à TinyMCE]
),
),]]>
...
</programlisting>
<variablelist>
<title>Paramètres de configuration</title>
<varlistentry>
<term>extra_options</term>
<listitem>
<simpara>Ce paramètre permet de passer des options à &TinyMCE; pour
personnaliser son comportement. Par exemple, il est possible d'utiliser
le paramètre <literal>valid_styles</literal> pour définir quels styles
CSS sont autorisés. Pour plus d'informations, consultez la documentation
de &TinyMCE;.</simpara>
</listitem>
</varlistentry>
</variablelist>
</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,18 @@
<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_compositeValueToJSON;
&conf-LSattr_ldap_date;
&conf-LSattr_ldap_image;
&conf-LSattr_ldap_naiveDate;
&conf-LSattr_ldap_numeric;
&conf-LSattr_ldap_password;
&conf-LSattr_ldap_postaladdress;
&conf-LSattr_ldap_pwdHistory;
&conf-LSattr_ldap_sambaAcctFlags;
&conf-LSattr_ldap_shadowExpire;
</sect3>

View file

@ -0,0 +1,17 @@
<?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_compositeValueToJSON SYSTEM "LSattr_ldap_compositeValueToJSON.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_naiveDate SYSTEM "LSattr_ldap_naiveDate.docbook">
<!ENTITY conf-LSattr_ldap_numeric SYSTEM "LSattr_ldap_numeric.docbook">
<!ENTITY conf-LSattr_ldap_password SYSTEM "LSattr_ldap_password.docbook">
<!ENTITY conf-LSattr_ldap_postaladdress SYSTEM "LSattr_ldap_postaladdress.docbook">
<!ENTITY conf-LSattr_ldap_pwdHistory SYSTEM "LSattr_ldap_pwdHistory.docbook">
<!ENTITY conf-LSattr_ldap_sambaAcctFlags SYSTEM "LSattr_ldap_sambaAcctFlags.docbook">
<!ENTITY conf-LSattr_ldap_shadowExpire SYSTEM "LSattr_ldap_shadowExpire.docbook">
<!ENTITY LSattr_ldap_ascii "<link linkend='config-LSattr_ldap_ascii'>LSattr_ldap_ascii</link>">
<!ENTITY LSattr_ldap_date "<link linkend='config-LSattr_ldap_date'>LSattr_ldap_date</link>">
<!ENTITY LSattr_ldap_sambaAcctFlags "<link linkend='config-LSattr_ldap_sambaAcctFlags'>LSattr_ldap_sambaAcctFlags</link>">

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,42 @@
<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>­.
(Par défaut : <literal>TRUE</literal>)</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>false_value</term>
<listitem>
<simpara>La valeur de l'attribut correspondant à <emphasis>Faux</emphasis>­.
(Par défaut : <literal>FALSE</literal>)</simpara>
</listitem>
</varlistentry>
</variablelist>
<important><simpara>Les valeurs possibles pour le paramètre <parameter>default_value</parameter>
sont <literal>yes</literal> et <literal>no</literal>.</simpara></important>
</sect4>

View file

@ -0,0 +1,9 @@
<sect4 id="config-LSattr_ldap_compositeValueToJSON">
<title>LSattr_ldap_compositeValueToJSON</title>
<para>Ce type est utilisé pour la gestion des attributs composites dont les
valeurs respectent le format suivant :
<literal>[key1=value1][key2=value2][...]</literal></para>
<para>Ce type d'attribut LDAP sera utilisé pour convertir la valeur en son
équivalent <literal>JSON</literal> pour pouvoir être traité à l'aide du type d'
attribut HTML &LSattr_html_jsonCompositeAttribute;.</para>
</sect4>

View file

@ -0,0 +1,89 @@
<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>
<note>
<para>Au sein d'LdapSaisie, les dates manipulées au travers ce type
d'attribut LDAP, sont au format <emphasis>timestamp</emphasis>. Il s'agit
donc de nombres entiers correpondants au nombre de secondes depuis le 1 janvier
1970.</para>
<para>Le type d'attribut HTML utilisé conjointement avec ce type d'attribut LDAP
devra être prévu pour recevoir et fournir des dates au format <emphasis>timestamp
</emphasis>, comme c'est le cas pour le <link linkend='config-LSattr_html_date'>
type d'attribut HTML <emphasis>date</emphasis></link>.</para>
</note>
<programlisting linenumbering="unnumbered">
<citetitle>Structure</citetitle>...
<![CDATA['ldap_options' => array (
'timestamp' => [Booléen], // Si la date est stockée au format timestamp
'formats' => array(
'[Format de stockage principal]', // Par défaut : "YmdHisO"
'[Formats de stockage alternatifs]', // Par défaut : "YmdHis.vO" & "YmdHis.uO"
[...]
),
'timezone' => '[Fuseau horaire]', // Default : "UTC"
),]]>
...
</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>formats</term>
<listitem>
<para>Formats de stockage de la date dans l'annuaire. Ces formats sont composés à
partir des motifs clés gérés par la fonction <function>date()</function>
de &php;. Pour plus d'information, consulter
<ulink url='http://www.php.net/date'>la documentation officielle</ulink>. Plusieurs
formats peuvent être définis, mais en cas de stockage d'une nouvelle valeur, se sera
le premier format défini qui sera utilisé.
<note><simpara>La valeur par défaut est <emphasis>["YmdHisO", "YmdHis.vO", "YmdHis.uO"]</emphasis>,
correspondant à la syntaxe <literal>Generalized Time</literal> (sans et avec les milli-secondes
ou micro-secondes) telle que définie dans la
<ulink url='https://tools.ietf.org/html/rfc4517'>RFC4517</ulink>. Exemples :
<literal>20091206230506Z</literal>
<emphasis>(=2009/12/06 23:05:66 UTC)</emphasis>,
<literal>20190613143537+0200</literal>
<emphasis>(=2019/06/13 14:35:37 UTC+0200)</emphasis> ou
<literal>20230818121005.307+0200</literal>
<emphasis>(=2023/08/18 12:10:05.307 UTC+0200)</emphasis>.</simpara></note>
<warning><simpara>Si vous exploitez un attribut stockant une date incluant les
milli-secondes ou les micro-secondes, ce type d'attribut LDAP sera capable de gérer
l'interpratation des valeurs stockées, en outre le type d'attribut &LSattr_html_date;,
s'appuyant sur les méthodes standards <literal>strftime()</literal> et
<literal>strptime()</literal>, ne permettra pas aujourd'hui leur saisie et affichage.
</simpara></warning>
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>timezone</term>
<listitem>
<para>Fuseau horaire de stockage des dates dans l'annuaire LDAP. Les valeurs
possibles sont documentées dans <ulink url='https://www.php.net/timezones'>la
documentation officielle de PHP</ulink>. (Par défaut : <literal>UTC</literal>)
</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,40 @@
<sect4 id="config-LSattr_ldap_naiveDate">
<title>LSattr_ldap_naiveDate</title>
<para>Ce type est utilisé pour la gestion des attributs dont la valeur est
une date dont la <emphasis>timezone</emphasis> doit être ignorée. Côté LDAP,
les dates seront stockées au format UTC étant donnée que la syntaxe LDAP exige
une <emphasis>timezone</emphasis>, cependant celle-ci sera complètement ignorée.
Ce type peut-être utilisé à la place du type &LSattr_ldap_date;.</para>
<programlisting linenumbering="unnumbered">
<citetitle>Structure</citetitle><![CDATA[...
'ldap_options' => array (
'format' => '[Format de stockage]', // Default : "%Y%m%d%H%M%SZ"
),
...]]>
</programlisting>
<variablelist>
<title>Paramètres de configuration</title>
<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 à la syntaxe <literal>Generalized Time</literal> (sans les
micro-secondes) telle que définie dans la
<ulink url='https://tools.ietf.org/html/rfc4517'>RFC4517</ulink>. Exemples :
<literal>20091206230506Z</literal>
<emphasis>(=2009/12/06 23:05:66 UTC)</emphasis>.</simpara></note>
</para>
</listitem>
</varlistentry>
</variablelist>
</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,108 @@
<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]',
'encode_function' => '[Nom de la fonction d'encodage]',
'verify_function' => '[Nom de la fonction de vérification]',
'no_random_crypt_salt' => '[Booléen]', // Désactivation de l'utilisation d'une salt aléatoire
'wildcardPassword' => '[mot de passe(s) en clair]',
'encodedWildcardPassword' => '[mot de passe(s) encodé(s)]'
),]]>
...
</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>argon2</literal> (ou <literal>argon2i</literal>, PHP >= 7.2)</simpara></listitem>
<listitem><simpara><literal>argon2id</literal> (PHP >= 7.3)</simpara></listitem>
<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>sha256</literal></simpara></listitem>
<listitem><simpara><literal>sha512</literal></simpara></listitem>
<listitem><simpara><literal>ssha</literal></simpara></listitem>
<listitem><simpara><literal>ssha256</literal></simpara></listitem>
<listitem><simpara><literal>ssha512</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>encode_function</term>
<listitem>
<para>Nom d'une function qui sera utilisée afin d'encoder le mot de passe.
Cette fonction recevra deux paramètres : le <literal>LSldapObject</literal>
et le mot de passe en clair.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>verify_function</term>
<listitem>
<para>Nom d'une function qui sera utilisée afin de valider un mot de passe
soumis par l'utilisateur par rapport à celui stocké dans l'annuaire. Cette
fonction recevra trois paramètres : le <literal>LSldapObject</literal>,le
mot de passe en clair et le mot de passe hashé. Si ce paramètre est omis
et que le paramètre <literal>encode_function</literal> est défini, le mot
de passe à tester sera encodé à nouveau à l'aide de la fonction
<literal>encode_function</literal> et le résultat sera comparé avec le mot
de passe stocké dans l'annuaire.</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>
<varlistentry>
<term>wildcardPassword</term>
<listitem>
<simpara>Mot de passe (ou tableau de mot de passe) qui sera ajouté systématiquement,
en plus du mot de passe choisi. Il sera encodé de la même manière que pour le mot de
passe choisi avant enregistrement.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>encodedWildcardPassword</term>
<listitem>
<simpara>Mot de passe (ou tableau de mot de passe) qui sera ajouté systématiquement,
en plus du mot de passe choisi. Contrairement à la directive
<parameter>wildcardPassword</parameter>, le mot de passe ne sera pas encodé avant
enregistrement.</simpara>
<note><simpara>Cette directive peut cohabiter avec sa cousine <parameter>wildcardPassword</parameter>. Les mot de passes contenus dans les deux directives seront alors ajoutés.</simpara></note>
</listitem>
</varlistentry>
</variablelist>
</sect4>

View file

@ -0,0 +1,14 @@
<sect4 id="config-LSattr_ldap_postaladdress">
<title>LSattr_ldap_postaladdress</title>
<para>Ce type est utilisé pour la gestion des attributs dont la valeur est construite
sur le modèle de l'attribut standard <emphasis>postalAddress</emphasis>, c'est à dire
dont les lignes sont séparées à l'aide du caractère de délimiteur <literal>$</literal>.
</para>
<para>Lors de la lecture des valeurs de ce type d'attribut dans l'annuaire, les
caractères <literal>$</literal> seront remplacés par des caractères <literal>\n</literal>
et, à l'inverse, lors de l'écriture des valeurs de ce type d'attribut dans l'annuaire,
les caractères <literal>\n</literal> seront remplacés par des caractères
<literal>$</literal>.</para>
</sect4>

View file

@ -0,0 +1,74 @@
<sect4 id="config-LSattr_ldap_pwdHistory">
<title>LSattr_ldap_pwdHistory</title>
<para>Ce type est utilisé pour la gestion de l'attribut standard <emphasis>pwdHistory</emphasis>.
Cet attribut, accessible en lecture uniquement, stocke dans un format prédéfini l'historique des
mots de passe d'une utilisateur avec pour chaque entrée :
<itemizedlist>
<listitem><simpara>la date et heure de l'ajout du mot de passe dans l'historique</simpara></listitem>
<listitem><simpara>l'OID de la syntaxe du mot de passe</simpara></listitem>
<listitem><simpara>la longueur du mot de passe</simpara></listitem>
<listitem><simpara>le mot de passe (hâché)</simpara></listitem>
</itemizedlist>
</para>
<para>Ce type d'attribut LDAP permettra de convertir la valeur en son équivalent <literal>JSON</literal>
pour pouvoir être traité à l'aide du type d'attribut HTML &LSattr_html_jsonCompositeAttribute;.</para>
<programlisting linenumbering="unnumbered">
<citetitle>Exemple de valeur de l'attribut pwdHistory</citetitle>
<![CDATA[20201202144718Z#1.3.6.1.4.1.1466.115.121.1.40#105#{SSHA512}XDSiR6Sh6W7gyVIk6Rr2OUv8rNPr+0rHF99d9lcirE/TnnEdkjkncIi5iPubErL5lpfgh8gXLgSfmqvmFcMqXLToC25xIqyk]]>
</programlisting>
<programlisting linenumbering="unnumbered">
<citetitle>Exemple de valeur tranformée</citetitle>
<![CDATA[{"time":1606920438,"syntaxOID":"1.3.6.1.4.1.1466.115.121.1.40","length":105,"hashed_password":"{SSHA512}XDSiR6Sh6W7gyVIk6Rr2OUv8rNPr+0rHF99d9lcirE/TnnEdkjkncIi5iPubErL5lpfgh8gXLgSfmqvmFcMqXLToC25xIqyk"}]]>
</programlisting>
<programlisting linenumbering="unnumbered">
<citetitle>Exemple de configuration complète de l'attribut</citetitle>
<![CDATA['pwdHistory' => array (
'label' => 'Passwords in history',
'ldap_type' => 'pwdHistory',
'html_type' => 'jsonCompositeAttribute',
'html_options' => array (
'components' => array (
'time' => array (
'label' => 'Date added to history',
'type' => 'text',
'required' => true,
'multiple' => false,
),
'syntaxOID' => array (
'label' => 'Syntax OID',
'type' => 'text',
'required' => true,
'multiple' => false,
),
'length' => array (
'label' => 'Length',
'type' => 'text',
'required' => true,
'multiple' => false,
),
'hashed_password' => array (
'label' => 'Hashed password',
'type' => 'text',
'required' => true,
'multiple' => false,
),
),
),
'no_value_label' => 'History is empty.',
'multiple' => 1,
'rights' => array(
'admin' => 'r',
),
'view' => 1,
),]]>
</programlisting>
<para>La date et heure de l'ajout du mot de passe dans l'historique est convertie dans un format lisible.
Par défaut, ce format est <literal>AAAA/MM/JJ HH:MM:SS</literal>, mais il peut aussi est personnalisé via
le paramètre <literal>date_format</literal>. Ce format est composé à partir des motifs clés gérés par la
fonction <function>date()</function> de &php;. Pour plus d'information, consulter
<ulink url='http://www.php.net/date'>la documentation officielle</ulink>.</para>
<note><simpara>La valeur par défaut est <emphasis>YmdHisO</emphasis>, correspondant à la syntaxe
<literal>Generalized Time</literal> telle que définie dans la <ulink url='https://tools.ietf.org/html/rfc4517'>RFC4517
</ulink> et prévu par le <ulink url='http://tools.ietf.org/id/draft-behera-ldap-password-policy-10.txt'>
Draft-behera-ldap-password-policy</ulink> spécifiant cet attribut standard.</simpara></note>
</sect4>

View file

@ -0,0 +1,9 @@
<sect4 id="config-LSattr_ldap_sambaAcctFlags">
<title>LSattr_ldap_sambaAcctFlags</title>
<para>Ce type est prévu pour gérer l'attribut <emphasis>sambaAcctFlags</emphasis> du
schéma Samba, qui au travers d'une seule et unique valeur, respectant un format prévu,
liste l'ensemble des drapeaux actifs d'un compte Samba. Il transforme l'unique valeur
de l'attribut LDAP en une liste de drapeaux actuellement activés sur le compte. Il est
conçu pour être utilisé conjointement avec le type d'attribut HTML
&LSattr_html_sambaAcctFlags;.</para>
</sect4>

View file

@ -0,0 +1,11 @@
<sect4 id="config-LSattr_ldap_shadowExpire">
<title>LSattr_ldap_shadowExpire</title>
<para>Ce type est prévu pour gérer l'attribut <emphasis>shadowExpire</emphasis> du
schéma POSIX, qui une stocke une date sous la forme d'un entier correspondant au
nombre de jours depuis le premier 1er 1970. Il est prévu pour être utilisé
conjointement avec le type d'attribut HTML &LSattr_html_date;.</para>
<note><simpara>Malgrés son nom, ce type d'attribut LDAP peux être utilisé pour d'autres
attributs stockant ce même format de date, tel-que l'attribut <emphasis>shadowLastChange
</emphasis>.</simpara></note>
</sect4>

View file

@ -0,0 +1,74 @@
<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 (optionnel).</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-callable;
&conf-LSattribute-check-data-date;
&conf-LSattribute-check-data-differentPassword;
&conf-LSattribute-check-data-email;
&conf-LSattribute-check-data-filesize;
&conf-LSattribute-check-data-imagefile;
&conf-LSattribute-check-data-imagesize;
&conf-LSattribute-check-data-inarray;
&conf-LSattribute-check-data-integer;
&conf-LSattribute-check-data-ldapSearchURI;
&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-numberOfValues;
&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-ssh_pub_key;
&conf-LSattribute-check-data-telephonenumber;
&conf-LSattribute-check-data-zxcvbn;
</sect3>

View file

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!ENTITY conf-LSattribute-check-data-alphanumeric SYSTEM "alphanumeric.docbook">
<!ENTITY conf-LSattribute-check-data-callable SYSTEM "callable.docbook">
<!ENTITY conf-LSattribute-check-data-date SYSTEM "date.docbook">
<!ENTITY conf-LSattribute-check-data-differentPassword SYSTEM "differentPassword.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-inarray SYSTEM "inarray.docbook">
<!ENTITY conf-LSattribute-check-data-integer SYSTEM "integer.docbook">
<!ENTITY conf-LSattribute-check-data-ldapSearchURI SYSTEM "ldapSearchURI.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-numberOfValues SYSTEM "numberOfValues.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-ssh_pub_key SYSTEM "ssh_pub_key.docbook">
<!ENTITY conf-LSattribute-check-data-telephonenumber SYSTEM "telephonenumber.docbook">
<!ENTITY conf-LSattribute-check-data-zxcvbn SYSTEM "zxcvbn.docbook">

View file

@ -0,0 +1,20 @@
<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>
<variablelist>
<title>Paramètres de configuration</title>
<varlistentry>
<term>withAccents</term>
<listitem>
<simpara>Si le paramètre est à <emphasis>true</emphasis>, les lettres accentuées seront acceptées.</simpara>
</listitem>
</varlistentry>
</variablelist>
</sect4>

View file

@ -0,0 +1,24 @@
<sect4 id="config-LSattribute-check-data-callable">
<title>callable</title>
<para>Cette règle vérifie que la valeur saisie est correcte en utilisant une
fonction personnalisée. Cette fonction devra prendre en paramètres la valeur à
valider, le tableau des paramètres de la règle ainsi qu'un pointeur sur l'objet
<emphasis>LSformElement</emphasis>. Sur la base de ses informations, elle devra
valider la valeur et retourner <literal>True</literal> si la valeur est valide
et <literal>False</literal> sinon.</para>
<variablelist>
<title>Paramètres de configuration</title>
<varlistentry>
<term>callable</term>
<listitem>
<simpara>Le nom de la fonction (ou tout autre <literal>callable</literal> au sens PHP)
de validation.</simpara>
</listitem>
</varlistentry>
</variablelist>
</sect4>

View file

@ -0,0 +1,30 @@
<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>
<varlistentry>
<term>special_values</term>
<listitem>
<para>Tableau listant les valeurs spéciales que peut prendre l'attribut. Dans ce tableau,
seules les valeurs sont utilisées et les clés n'ont pas d'importance. Ces valeurs spéciales
n'auront pas forcément besoin de respecter le format attendu.</para>
</listitem>
</varlistentry>
</variablelist>
</sect4>

View file

@ -0,0 +1,24 @@
<sect4 id="config-LSattribute-check-data-differentPassword">
<title>differentPassword</title>
<para>Cette règle vérifie que la valeur saisie ne correspond pas à
un des mots de passe stockés dans d'autres attributs du même objet.
</para>
<important><simpara>Les autres attributs doivent utiliser le type
d'attribut <emphasis>LDAP</emphasis>
<link linkend='config-LSattr_ldap_password'>LSattr_ldap_password
</link>.</simpara></important>
<variablelist>
<title>Paramètres de configuration</title>
<varlistentry>
<term>otherPasswordAttributes</term>
<listitem>
<simpara>La liste des autres attributs dont les mots de passe doivent être différent.</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ée.</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,27 @@
<sect4 id="config-LSattribute-check-data-inarray">
<title>inarray</title>
<para>Cette règle vérifie que la valeur saisie fait partie d'une liste de valeurs
autorisées (ou interdites).</para>
<variablelist>
<title>Paramêtres de configuration</title>
<varlistentry>
<term>possible_values</term>
<listitem>
<simpara>Tableau listant les valeurs autorisées.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>reverse</term>
<listitem>
<simpara>Booléen permettant d'inverser la logique de validation : si <literal>reverse</literal>
est vrai, la valeur testée sera acceptée si elle ne fait pas partie des valeurs possibles
(Paramètre facultatif, par défaut : <literal>faux</literal>).</simpara>
</listitem>
</varlistentry>
</variablelist>
</sect4>

View file

@ -0,0 +1,39 @@
<sect4 id="config-LSattribute-check-data-integer">
<title>integer</title>
<para>Cette règle vérifie que la valeur saisie est un entier. Les paramètres
permettent de spécifier éventuellement si la valeur doit être positive ou négative
et également de borner les valeurs valides.</para>
<variablelist>
<title>Paramêtres de configuration</title>
<varlistentry>
<term>positive</term>
<listitem>
<simpara>Booléen définissant si la valeur doit être positive.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>negative</term>
<listitem>
<simpara>Booléen définissant si la valeur doit être negative.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>min</term>
<listitem>
<simpara>Valeur minimale (supérieur ou égale).</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>max</term>
<listitem>
<simpara>Valeur maximale (inférieur ou égale).</simpara>
</listitem>
</varlistentry>
</variablelist>
</sect4>

View file

@ -0,0 +1,92 @@
<sect4 id="config-LSattribute-check-data-ldapSearchURI">
<title>ldapSearchURI</title>
<para>Cette règle vérifie que la valeur est une URI de recherche LDAP valide, c'est
à dire, par exemple,
<literal>ldaps://ldap.example.com:636/o=example?attr1,attr2?one?(gidNumber=100)</literal>
</para>
<para>Cette vérification commence par découper la valeur à l'aide du sépérateur
<literal>?</literal> et elle s'assure ensuite :
<itemizedlist>
<listitem><simpara>Que la première partie est bien une URI LDAP valide. Si l'hôte
LDAP est spécifié, elle s'assure qu'il soit une adresse IP ou un nom de domaine valide.
Si le port LDAP est spécifié, elle s'assure également qu'il soit correct et que l'hôte
est également bien spécifié.</simpara></listitem>
<listitem><simpara>Si la base de recherche est spécifiée, elle s'assure qu'elle soit
compatible avec la racine de l'annuaire connecté.</simpara></listitem>
<listitem><simpara>Si un ou plusieurs attributs sont spécifiés, elle les vérifie un à un
afin de vérifier qu'il s'agit de nom d'attribut valide.</simpara></listitem>
<listitem><simpara>Que le scope de recherche soit bien spécifié et valide.</simpara>
</listitem>
<listitem><simpara>Si le filtre de recherche est spécifié, elle vérifie qu'il soit valide.
</simpara></listitem>
</itemizedlist>
</para>
<variablelist>
<title>Paramêtres de configuration</title>
<varlistentry>
<term>check_resolving_ldap_host</term>
<listitem>
<simpara>Si l'hôte du serveur LDAP est spécifié et qu'il s'agit d'un nom de domaine valide,
un tentative de résolution DNS sera également faite (optionnel, par défaut :
<literal>Vrai</literal>).</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>host_required</term>
<listitem>
<simpara>Booléen détermintant si une erreur est relevée en cas d'absence de l'hôte
LDAP. (optionnel, par défaut : <literal>Faux</literal>)</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>basedn_required</term>
<listitem>
<simpara>Booléen détermintant si une erreur est relevée en cas d'absence de base de
recherche. (optionnel, par défaut : <literal>Faux</literal>)</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>scope_required</term>
<listitem>
<simpara>Booléen détermintant si une erreur est relevée en cas d'absence de portée de
recherche. (optionnel, par défaut : <literal>Vrai</literal>)</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>attr_required</term>
<listitem>
<simpara>Booléen détermintant si une erreur est relevée en cas d'absence d'attribut
recherché. (optionnel, par défaut : <literal>Faux</literal>)</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>max_attrs_count</term>
<listitem>
<simpara>Nombre maximum d'attribut recherchés. (optionnel, par défaut : pas de limite)
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>filter_required</term>
<listitem>
<simpara>Booléen détermintant si une erreur est relevée en cas d'absence de filtre de
recherche. (optionnel, par défaut : <literal>Faux</literal>)</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,25 @@
<sect4 id="config-LSattribute-check-data-numberOfValues">
<title>numberOfValues</title>
<para>Cette règle vérifie que le nombre de valeurs de l'attribut est comprise entre les limites
passées en paramètre.</para>
<variablelist>
<title>Paramètres de configuration</title>
<varlistentry>
<term>min</term>
<listitem>
<simpara>Nombre minimum de valeurs (paramètre optionnel).</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>max</term>
<listitem>
<simpara>Nombre maximum de valeurs (paramètre optionnel).</simpara>
</listitem>
</varlistentry>
</variablelist>
</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,53 @@
<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 au format
<ulink url='http://php.net/pcre.pattern'>PCRE</ulink> ou un tableau
d'expressions régulières.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>minValidRegex</term>
<listitem>
<simpara>Le nombre minimum d'expression régulière qui doivent être validées
pour que le mot de passe soit considéré comme correct. Ce paramètre est
optionnel, par défaut, toutes les expressions régulières doivent être
validées.</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. Cette expression régulière doit être au format <ulink url='http://php.net/pcre.pattern'>PCRE</ulink>.</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,9 @@
<sect4 id="config-LSattribute-check-data-ssh_pub_key">
<title>ssh_pub_key</title>
<para>Cette règle vérifie que la valeur est une clé publique SSH.</para>
<para>Cette vérification utilise tout d'abord une expression régulière
pour valider la forme syntaxique de la clé publique
(<literal>ssh-[type] [clé au format base64] [commentaire]</literal>) puis
tente de décoder la partie en base64 de la clé pour vérifier qu'il s'agit
bien d'une chaine de caractères.</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,70 @@
<sect4 id="config-LSattribute-check-data-zxcvbn">
<title>zxcvbn</title>
<para>Cette règle vérifie la sécurité d'un mot de passe en utilisant la librairie
<ulink url='https://github.com/bjeavons/zxcvbn-php'>ZxcvbnPhp</ulink>. Cette
librairie s'appuie sur un ensemble de vérifications permettant de déterminer à
quel point le mot de passe choisi est commun, prévisible et plus globalement,
estime en combien de temps il pourra être cassé par une personne malveillante. Sur
la base de l'analyse du mot de passe saisi, des conseils seront donnés à
l'utilisateur pour le guider dans le choix d'un mot de passe sûre.</para>
<warning><simpara>La librairie <literal>ZxcvbnPhp</literal> n'est compatible qu'avec
PHP 7 et supérieur.</simpara></warning>
<variablelist>
<title>Paramètres de configuration</title>
<varlistentry>
<term>minScore</term>
<listitem>
<simpara>Le score minimal pour que le mot de passe soit accepté. Il doit s'agir d'un
entier cimpris entre 0 (le plus faible) et 4 (le plus sécurisé). Paramètre facultatif
valant 4 par défaut.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>userDataAttrs</term>
<listitem>
<simpara>Liste d'attributs de l'objet dont les valeurs seront passées à la librairie
<literal>Zxcvbn</literal> qui les considérera comme associés à l'utilisateur. Ainsi,
par exemple, si l'utilisateur utilise son nom de famille ou encore son prénom dans
son mot de passe, la librairie pourra lui indiqué que cela ne le protège que peut
des attaques ciblées. Paramètre facultatif, mais il est fortement conseillé de
renseigner un maximum d'attributs contenant des informations personnelles relatives
à l'utilisteur.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>showWarning</term>
<listitem>
<simpara>Booléen définissant si les messages d'alertes retournés par la librairie
<literal>Zxcvbn</literal> doivent être affichés à l'utilisateur. Paramètre facultatif
et vrai par défaut.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>showSuggestions</term>
<listitem>
<simpara>Booléen définissant si les messages de suggestions retournés par la librairie
<literal>Zxcvbn</literal> doivent être affichés à l'utilisateur. Paramètre facultatif
et vrai par défaut.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>zxcvbn_autoload_path</term>
<listitem>
<simpara>Le chemin vers le fichier de chargement automatique des classes de la
librairie <emphasis>ZxcvbnPhp</emphasis>. Ce paramètre est facultatif et vaut
par défaut <literal>Zxcvbn/autoload.php</literal>, ce qui est adapté si vous
utiliser le paquet Debian <literal>php-zxcvbn</literal> disponible sur le dépôt
Debian du projet LdapSaisie.</simpara>
</listitem>
</varlistentry>
</variablelist>
</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 id="config-LSattribute-triggers-config">
<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>LSpeople</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']['LSpeople']['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 id="config-LSattribute-triggers-writing">
<title>Écriture 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,147 @@
<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]',
'except_current_object' => '[Exclure l'objet courant]'
),
...
),]]>
...
</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, par défaut : racine de l'annuaire)</emphasis>.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>scope</term>
<listitem>
<simpara>Le <emphasis>scope</emphasis> de la recherche <emphasis>(Paramètre
facultatif, par défaut : <literal>sub</literal>)</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>
<varlistentry>
<term>except_current_object</term>
<listitem>
<simpara>Booléen définissant si l'objet courrant doit être exclu du résultat
de la recherche. Ce paramètre n'est évalué quand cas de création (formulaire
<literal>create</literal>).</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 une référence à
l'objet <literal>LSldapObject</literal> courant. 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>

Some files were not shown because too many files have changed in this diff Show more