{"config":{"lang":["fr"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"Introduction","text":"
LdapSaisie est une application web d'administration d'annuaire LDAP d\u00e9velopp\u00e9e en PHP/Javascript. Cette application a pour but d'abstraire la complexit\u00e9 d'un annuaire par l'interm\u00e9diraire d'une interface d'administration simple et intuitive. L'application a \u00e9t\u00e9 concue avec pour objectif premier une modularit\u00e9 maximum, ce qui permet l'extention ou l'adaptation facile de l'application par l'interm\u00e9diaire de modules, d'extentions et de greffons. Cette application peut \u00eatre utilis\u00e9e pour administrer le syst\u00e8me d'information bas\u00e9 sur l'annuaire LDAP et \u00e9galement en paral\u00e8lle pour permettre aux utilisateurs d'avoir acc\u00e8s aux donn\u00e9es les concernants et \u00e9ventuellement de les modifier.
"},{"location":"#fonctionnalites","title":"Fonctionnalit\u00e9s","text":"De part sa modularit\u00e9, LdapSaisie est facilement extensible. Cependant, voici une liste non-exhaustive de ses fonctionnalit\u00e9s :
Gestion d'un grand nombre de types d'attributs :
Relation \u00e0 d'autres objets de l'annuaire/ Exemple : membres d'un groupe, parrain d'un utilisateur, ... (valeur cl\u00e9 param\u00e9trable)
Note
Chaque type d'attribut \u00e0 des fonctionnalit\u00e9s qui lui sont propres et qui rendent plus facile et agr\u00e9able l'utilisation de l'interface (g\u00e9n\u00e9ration automatique de mot de passe, g\u00e9n\u00e9ration des valeurs d'un champ \u00e0 partir d'autres, ...).
Depuis la version 4.0, LdapSaisie offre une API visant \u00e0 permettre de faire les m\u00eames choses que ce qu'il est possible d'accomplir via l'interface web. L'id\u00e9e n'est bien entendue pas de se substituer syst\u00e9matiquement \u00e0 la possibilit\u00e9 de se connecter directement \u00e0 l'annuaire, mais plut\u00f4t d'offrir une API web pour l'int\u00e9gration d'outil pr\u00e9f\u00e9rant ce mode d'interaction, ou encore, pour exposer des m\u00e9thodes acc\u00e8s aux donn\u00e9es de l'annuaire tout en profitant des logiques m\u00e9tiers impl\u00e9ment\u00e9es/configur\u00e9es dans LdapSaisie : validation syntaxique et d'unicit\u00e9, r\u00e8gle de g\u00e9n\u00e9ration et d'interd\u00e9pendances des attributs, d\u00e9clencheurs, ...
Note
Cette API est actuellement dans une phase de test et n'offre pas encore toutes les fonctionnalit\u00e9s propos\u00e9es dans l'interface web. Elle est vou\u00e9e \u00e0 \u00e9voluer pour int\u00e9grer petit \u00e0 petit un maximum de fonctionnalit\u00e9s. Des contributions \u00e0 ce sujet seront plus qu'appr\u00e9ci\u00e9e !
"},{"location":"api/#authentification","title":"Authentification","text":"L'authentification \u00e0 l'API utilise le m\u00eame composant LSauth
que lors d'une authentification \u00e0 l'interface web, cependant, ce composant s'adapte pour prendre en compte de mode de connexion. Par d\u00e9faut, la m\u00e9thode d'authentification utilis\u00e9e sera LSauthMethod_HTTP et permettra de se connecter en sp\u00e9cifiant le nom d'utilisateur et le mot de l'utilisateur cherchant \u00e0 se connecter via une authentification basique HTTP.
Warning
Il est \u00e0 noter que tous les types d'utilisateur ne peuvent pas forc\u00e9ment utiliser l'API : le param\u00e8tre api_access
doit \u00eatre explicitement positionn\u00e9 \u00e0 True
dans la configuration du serveur LDAP.
Une fois connect\u00e9, l'utilisateur endossera les droits associ\u00e9s \u00e0 ses LSprofiles, tout comme un utilisateur connect\u00e9 \u00e0 l'interface web.
"},{"location":"api/#methodes-exposees","title":"M\u00e9thodes expos\u00e9es","text":"Les URLs des m\u00e9thodes de l'API ont \u00e9t\u00e9 construites par mim\u00e9tisme sur celle de l'interface web et sous la racine web api/
. Par ailleurs, un num\u00e9ro de version d'API a \u00e9t\u00e9 ins\u00e9r\u00e9e dans chacune d'elles afin d'anticiper toutes \u00e9volutions futures majeures n\u00e9c\u00e9ssitants de conserver une r\u00e9trocompatibilit\u00e9 avec les anciennes versions de l'API.
Toutes les m\u00e9thodes retournent des informations au format JSON et accepte le param\u00e8tre pretty
permettant d'obtenir un retour plus facilement lisible. Les chaines de caract\u00e8res \u00e9chang\u00e9es doivent par ailleurs \u00eatre encod\u00e9es en UTF-8. On trouvera par ailleurs dans le retour JSON :
success
Bool\u00e9en pr\u00e9cisant si l'action demand\u00e9e a correctement \u00e9t\u00e9 ex\u00e9cut\u00e9e.
messages
Ce tableau pourra \u00eatre pr\u00e9sent et lister les messages d'informations g\u00e9n\u00e9r\u00e9es par l'action demand\u00e9e. Il s'agira des m\u00eames messages que ceux affich\u00e9s dans l'interface web lorsque les actions \u00e9quivalentes y sont faites.
errors
Ce tableau pourra \u00eatre pr\u00e9sent et lister les messages d'erreurs g\u00e9n\u00e9r\u00e9es par l'action demand\u00e9e.Note
Les messages d'informations et d'erreurs g\u00e9n\u00e9r\u00e9es par l'application sont traduites dans la langue courante qui peut \u00eatre sp\u00e9cifi\u00e9e via le param\u00e8tre lang
accept\u00e9 par toutes les m\u00e9thodes (exemple : fr_FR
ou en_US
).
Lorsqu'une m\u00e9thode cible un type d'objets, voir un objet en particulier, ces informations seront transmises dans l'URL appel\u00e9e. Si le type d'objet ou l'objet demand\u00e9 est introuvable, une erreur HTTP 404 sera g\u00e9n\u00e9r\u00e9e.
Important
Sauf pr\u00e9cision contraire, toutes les m\u00e9thodes expos\u00e9es sont accessibles uniquement via les m\u00e9thodes HTTP GET
ou POST
. L'acc\u00e8s via une autre m\u00e9thode retournera une erreur 404.
/api/1.0/object/[object type]
Cette m\u00e9thode permet de rechercher/lister les informations d'un type d'objets de l'annuaire en particulier. Le type de l'objet est pr\u00e9cis\u00e9 dans l'URL et doit \u00eatre encod\u00e9 en cons\u00e9quence. Par mim\u00e9tisme du comportement de l'interface web, la recherche est pagin\u00e9e et accepte des param\u00e8tres similaires en plus de param\u00e8tre plus appropri\u00e9s \u00e0 un fonctionnement programmatique :
filter
Permet de sp\u00e9cifier un filtre de recherche LDAP personnalis\u00e9. Celui-ci sera combin\u00e9 avec les param\u00e8tres propres au type d'objets recherch\u00e9s et aux autres param\u00e8tres sp\u00e9cifi\u00e9s (pattern
par exemple).
Warning
Du fait d'une limitation de la classe Net_LDAP2_Filter
utilis\u00e9e pour analyser le filtre pass\u00e9 en param\u00e8tre, seuls les filtres simples du type (attribut=valeur)
sont accept\u00e9s ici. Pour les m\u00eames raisons, il est important que le filtre sp\u00e9cifi\u00e9 soit toujours entourn\u00e9 de paranth\u00e8ses.
predefinedFilter
Permet de sp\u00e9cifier un des filtres de recherche LDAP pr\u00e9d\u00e9finis dans la configuration du type d'objet.
pattern
Permet de sp\u00e9cifier un mot cl\u00e9 de recherche, comme propos\u00e9 dans l'interface web.
approx
Bool\u00e9en permettant d'activer/d\u00e9sactiver la recherche approximative sur le mot cl\u00e9. Les valeurs accept\u00e9es sont 1
ou 0
.
basedn
Permet de sp\u00e9cifier une base de recherche personnalis\u00e9 pour la recherche.
subDn
Dans le cas d'un serveur LDAP configur\u00e9 avec des sous-niveaux de connexion, permet de sp\u00e9cifier le sous-niveau pour la recherche.
scope
Permet de sp\u00e9cifier l'\u00e9tendue de la recherche dans l'annuaire. Valeurs accept\u00e9es: sub
, one
et base
.
recursive
Bool\u00e9en permettant d'activer/d\u00e9sactiver la recherche recursive, c'est \u00e0 dire une recherche \u00e0 la racine de l'annuaire (ou du sous-niveau de connexion) avec une \u00e9tendue de recherche maximale. Les valeurs accept\u00e9es sont 1
ou 0
.
displayFormat
Permet de sp\u00e9cifier un LSformat personnalis\u00e9 pour le nom des objets dans le r\u00e9sultat de recherche.
extraDisplayedColumns
Bool\u00e9en permettant d'activer le retour des colonnes personnalis\u00e9es dans le r\u00e9sultat de recherche. Les valeurs accept\u00e9es sont 1
ou 0
.
attributes
Liste des attributs suppl\u00e9mentaires que devra retourner la recherche.
attributesDetails
Permet d'obtenir les d\u00e9tails sur les valeurs des attributs (au lieu des valeurs au format attendu en cas de cr\u00e9ation/modification de l'objet). Seul la pr\u00e9sence de ce param\u00e8tre suffit \u00e0 activer ce comportement, sa valeur n'a pas d'importance.
sortBy
Permet de pr\u00e9ciser sur quelle information le r\u00e9sultat de recherche doit \u00eatre tri\u00e9. Valeurs accept\u00e9es : displayName
, subDn
ou un des noms des colonnes personnalis\u00e9es.
sortDirection
Permet de pr\u00e9ciser l'ordre de tri du r\u00e9sultat de recherche. Valeurs accept\u00e9es : ASC
(A-Z) ou DESC
(Z-A).
page
Permet de pr\u00e9ciser la page du r\u00e9sultat de recherche.
nbObjectsByPage
Permet de pr\u00e9ciser le nombre maximum d'objets retourn\u00e9s par page du r\u00e9sultat de recherche.
all
Permet de r\u00e9clamer le r\u00e9sultat complet de la recherche (d\u00e9sactivation de la pagination). Seul la pr\u00e9sence de ce param\u00e8tre suffit \u00e0 activer ce comportement, sa valeur n'a pas d'importance.
as_list
Permet de r\u00e9clamer un r\u00e9sultat de recherche dans lequel, la cl\u00e9 objects
sera une liste et non un dictionnaire. Dans ce cas, le DN de l'objet est fourni dans la cl\u00e9 dn
des d\u00e9tails des objets.
withoutCache
Bool\u00e9en permettant de d\u00e9sactiver l'utilisation du cache. Les valeurs accept\u00e9es sont 1
ou 0
.
keepParamsBetweenSearches
Bool\u00e9en permettant d'activer/d\u00e9sactiver le stockage en session des param\u00e8tres de recherche (optionnel, par d\u00e9faut : False
). Les valeurs accept\u00e9es sont 1
ou 0
.
Exemple :
# curl -u username:secret 'https://ldapsaisie/api/1.0/object/LSpeople?extraDisplayedColumns=1&pretty'\n{\n \"success\": true,\n \"objects\": {\n \"uid=hmartin,ou=people,o=ls\": {\n \"name\": \"Henri MARTIN\",\n \"Mail\": \"henri.martin@ls.com\"\n },\n \"uid=s.ldapsaisie,ou=people,o=ls\": {\n \"name\": \"Secretariat LdapSaisie\",\n \"Mail\": \"secretariat@ldapsaisie.biz\"\n },\n \"uid=ls,ou=people,o=ls\": {\n \"name\": \"LdapSaisie\",\n \"Mail\": \"ldap.saisie@ls.com\"\n },\n \"uid=erwpa,ou=people,o=ls\": {\n \"name\": \"Erwan PAGE\",\n \"Mail\": \"erwan.page@ldapsaisie.biz\"\n },\n \"uid=user2,ou=people,ou=company1,ou=companies,o=ls\": {\n \"name\": \"prenom2 nom2\",\n \"Mail\": \"user2@ls.com\"\n }\n },\n \"total\": 14,\n \"params\": {\n \"keepParamsBetweenSearches\": false,\n \"filter\": null,\n \"pattern\": null,\n \"predefinedFilter\": false,\n \"basedn\": null,\n \"scope\": null,\n \"sizelimit\": 0,\n \"attronly\": false,\n \"approx\": false,\n \"recursive\": true,\n \"attributes\": [],\n \"onlyAccessible\": true,\n \"sortDirection\": null,\n \"sortBy\": null,\n \"sortlimit\": 0,\n \"displayFormat\": \"%{cn}\",\n \"nbObjectsByPage\": 25,\n \"withoutCache\": false,\n \"extraDisplayedColumns\": true\n },\n \"page\": 1,\n \"nbPages\": 3\n}\n
/api/1.0/object/[object type]/[dn]
Cette m\u00e9thode permet de r\u00e9cup\u00e9rer les informations d'un objet de l'annuaire au format JSON. Le type de l'objet et son DN sont pr\u00e9cis\u00e9s dans l'URL et doivent \u00eatre encod\u00e9s en cons\u00e9quence. Par d\u00e9faut, les valeurs des attributs retourn\u00e9es sont au format tel qu'attendu en cas de cr\u00e9ation/modification de l'objet. Il est cependant possible d'ajouter le param\u00e8tre details
afin d'obtenir des informations compl\u00e9mentaires sur les valeurs des attributs.
Exemple :
# curl -u username:secret 'https://ldapsaisie/api/1.0/object/LSpeople/uid=hmartin,ou=people,o=ls?pretty'\n{\n \"success\": true,\n \"dn\": \"uid=hmartin,ou=people,o=ls\",\n \"type\": \"LSpeople\",\n \"name\": \"Henri MARTIN\",\n \"details\": false,\n \"attributes\": {\n \"uid\": \"hmartin\",\n \"givenName\": \"Henri\",\n \"sn\": \"MARTIN\",\n \"cn\": \"Henri MARTIN\",\n \"mail\": \"henri.martin@ls.com\",\n \"personalTitle\": \"M.\",\n \"description\": [],\n \"jpegPhoto\": null,\n \"lsGodfatherDn\": [\n \"uid=eeggs,ou=people,o=ls\"\n ],\n \"uidNumber\": \"101022\",\n \"gidNumber\": \"102001\",\n \"loginShell\": \"no\",\n \"homeDirectory\": \"\\/home\\/com\",\n \"gecos\": null,\n \"shadowExpire\": null,\n \"shadowMax\": null,\n \"shadowInactive\": null,\n \"shadowLastChange\": null,\n \"sambaSID\": \"S-1-5-21-2421470416-3566881284-3047381809-203044\",\n \"sambaPrimaryGroupSID\": \"S-1-5-21-2421470416-3566881284-3047381809-205003\",\n \"sambaAcctFlags\": [\n \"U\"\n ],\n \"sambaHomeDrive\": null,\n \"sambaHomePath\": null,\n \"sambaProfilePath\": null,\n \"sambaLogonScript\": null,\n \"sambaLogonTime\": null,\n \"sambaLogoffTime\": null,\n \"sambaKickoffTime\": null,\n \"sambaPwdLastSet\": null,\n \"sambaPwdMustChange\": null,\n \"sambaPwdCanChange\": null\n },\n \"relations\": {\n \"groups\": {\n \"cn=direction,ou=groups,o=ls\": \"direction\",\n \"cn=secretariat,ou=groups,o=ls\": \"secretariat\"\n },\n \"godfather\": []\n }\n}\n
/api/1.0/object/[object type]/create
Cette m\u00e9thode permet de cr\u00e9er un objet dans l'annuaire. Le type de l'objet qui sera cr\u00e9\u00e9 est pr\u00e9cis\u00e9 dans l'URL et doit \u00eatre encod\u00e9 en cons\u00e9quence. Les informations de l'objet doivent est transmises au format x-www-form-urlencoded
. Elles peuvent \u00e9galement \u00eatre au format multipart/form-data
, en particulier si votre requ\u00eate contient une image. Par mim\u00e9tisme avec l'interface web, seuls les attributs pr\u00e9vus dans le formulaire de cr\u00e9ation du type d'objet peuvent \u00eatre pass\u00e9es ici. De la m\u00eame mani\u00e8re, les attributs non-sp\u00e9cifi\u00e9s ici, pouront \u00eatre auto-g\u00e9n\u00e9r\u00e9s en accord avec leur configuration et la requ\u00eate sera accept\u00e9e uniquement si tous les attributs obligatoires y sont sp\u00e9cifi\u00e9s ou s'ils peuvent \u00eatre auto-g\u00e9n\u00e9r\u00e9s.
Le format et la syntaxe des valeurs des attributs d\u00e9pends de leur type HTML. Ainsi, par exemple, un attribut de type HTML boolean
acceptera comme valeurs possibles yes
ou no
. Pour plus de d\u00e9tails sur le type de valeur accept\u00e9e par un type d'attribut HTML en particulier, consultez sa documentation. Vous pouvez \u00e9galement analyser le code de la m\u00e9thode getPostData()
de la classe PHP correspondante.
Si l'application d\u00e9tecte un souci avec les informations transmises pour les attributs, un tableau fields_errors
sera pr\u00e9sent dans la r\u00e9ponse JSON et contiendra pour chacun des attributs probl\u00e9matique, un tableau des messages d'erreurs g\u00e9n\u00e9r\u00e9es par l'application.
Si le type d'objet en pr\u00e9voit, vous pouvez \u00e9galement utiliser un masque de saisie via le param\u00e8tre dataEntryForm
.
Exemple :
# 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\"\n{\n \"success\": true,\n \"type\": \"LSpeople\",\n \"dn\": \"uid=foo.bar,ou=people,o=ls\",\n \"name\": \"Foo Bar\",\n \"messages\": [\n \"Le mail de notification a \\u00e9t\\u00e9 envoy\\u00e9.\",\n \"L'objet a \\u00e9t\\u00e9 ajout\\u00e9.\"\n ]\n}\n
/api/1.0/object/[object type]/[dn]/modify
Cette m\u00e9thode permet de modifier un objet dans l'annuaire. Le type de l'objet et son DN sont pr\u00e9cis\u00e9s dans l'URL et doivent \u00eatre encod\u00e9s en cons\u00e9quence. Les informations de l'objet \u00e0 modifier doivent \u00eatre transmises au m\u00eame format que pour la m\u00e9thode create
(voir ci-dessus). Comme pour cette derni\u00e8re, seuls les attributs pr\u00e9vus dans le formulaire de modification du type d'objet peuvent \u00eatre pass\u00e9es ici et la r\u00e9ponse JSON pourra contenir un tableau fields_errors
contenant les erreurs g\u00e9n\u00e9r\u00e9es par l'application au sujet des valeurs transmises pour les attributs.
Exemple :
# 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\"\n{\n \"dn\": \"uid=foo.bar,ou=people,o=ls\",\n \"type\": \"LSpeople\",\n \"name\": \"Foo Bar\",\n \"success\": true,\n \"messages\": [\n \"L'objet a bien \\u00e9t\\u00e9 modifi\\u00e9.\"\n ]\n}\n
/api/1.0/object/[object type]/[dn]/remove
Cette m\u00e9thode permet de supprimer un objet dans l'annuaire. Le type de l'objet et son DN sont pr\u00e9cis\u00e9s dans l'URL et doivent \u00eatre encod\u00e9s en cons\u00e9quence.
Exemple :
# curl -u username:secret 'https://ldapsaisie/api/1.0/object/LSpeople/uid=foo.bar,ou=people,o=ls/remove?pretty'\n{\n \"dn\": \"uid=foo.bar,ou=people,o=ls\",\n \"type\": \"LSpeople\",\n \"name\": \"Foo Bar\",\n \"success\": true,\n \"messages\": [\n \"Foo Bar a bien \\u00e9t\\u00e9 supprim\\u00e9.\"\n ]\n}\n
/api/1.0/object/[object type]/import
Cette m\u00e9thode permet d'importer des objets d'un type en particulier \u00e0 partir de donn\u00e9es d'import format\u00e9es selon un ioFormat configur\u00e9 pour ce type d'objets. Le type de l'objet est pr\u00e9cis\u00e9 dans l'URL et doit \u00eatre encod\u00e9 en cons\u00e9quence. Par mim\u00e9tisme du comportement de l'interface web, cette m\u00e9thode accepte des param\u00e8tres similaires et s'attend \u00e0 r\u00e9cup\u00e9rer les donn\u00e9es d'import dans le corps de la requ\u00eate.
ioFormat
Le nom de l'ioFormatdes donn\u00e9es d'import.
updateIfExists
Bool\u00e9en permettant d'activer/d\u00e9sactiver la mise \u00e0 jour des donn\u00e9es des objets s'ils existent d\u00e9j\u00e0. Si ce mode est inactif et qu'un objet des donn\u00e9es d'import existe d\u00e9j\u00e0, une erreur sera remont\u00e9e. Les valeurs accept\u00e9es sont 1
ou 0
.
justTry
Bool\u00e9en permettant d'activer/d\u00e9sactiver le mode de v\u00e9rification des donn\u00e9es d'import uniquement. Si ce mode est actif, les donn\u00e9es d'import seront analys\u00e9es pour v\u00e9rifier qu'elles sont correctes, mais l'import en lui-m\u00eame ne sera pas effectu\u00e9. Les valeurs accept\u00e9es sont 1
ou 0
.
Note
Le retour de cette m\u00e9thode en mode justTry
est identique \u00e0 une ex\u00e9cution en mode normal. Ce mode permet donc d'anticiper le r\u00e9sultat d'un import \u00e0 partir d'un jeu de donn\u00e9es sources.
Warning
En mode justTry
, seul la v\u00e9rification syntaxique des donn\u00e9es est fiable, car les informations doublonn\u00e9es au sein des donn\u00e9es d'import ne pourront \u00eatre d\u00e9tect\u00e9es.
En cas d'erreurs d\u00e9tect\u00e9es dans les informations des objets des donn\u00e9es d'import, le tableau errors
du retour de la m\u00e9thode contiendra une entr\u00e9e pour chaque objet en erreur sous le format d'un dictionnaire dont la cl\u00e9 data
reprendra les informations de l'objet telle que charg\u00e9 (ou g\u00e9n\u00e9r\u00e9e) depuis les donn\u00e9es sources, ainsi qu'un dictionnaire sous la cl\u00e9 errors
qui contiendra les erreurs globales concernant l'objet sous la cl\u00e9 globals
et les erreurs propres \u00e0 ses attributs dans un dictionnaire sous la cl\u00e9 attrs
.
Note
Les erreurs d'importation sur un objet sont non-bloquantes : l'importation des autres objets ne sera pas interrompue.
Exemple :
# curl -u username:secret --data-binary @/path/to/input.file 'https://ldapsaisie/api/1.0/object/LSpeople/import?ioFormat=mycsv&pretty'\n{\n \"success\": false,\n \"LSobject\": \"LSpeople\",\n \"ioFormat\": \"mycsv\",\n \"updateIfExists\": false,\n \"justTry\": false,\n \"imported\": {\n \"uid=rturin,ou=people,o=ls\": \"M. Roger TURIN\"\n },\n \"updated\": [],\n \"errors\": [\n {\n \"data\": {\n \"uid\": [\n \"lmartin\"\n ],\n \"personalTitle\": [\n \"Mme\"\n ],\n \"givenName\": [\n \"Ludivine\"\n ],\n \"sn\": [\n \"MARTIN\"\n ],\n \"mail\": [\n \"lmartin@gmail.com\"\n ],\n \"userPassword\": [\n \"123Yh%uT\"\n ],\n \"gidNumber\": [\n \"102009\"\n ],\n \"loginShell\": [\n \"no\"\n ],\n \"cn\": [\n \"Mme Ludivine MARTIN\"\n ]\n },\n \"errors\": {\n \"globals\": [\n \"Un objet existe d\\u00e9j\\u00e0 dans l'annuaire LDAP avec le DN uid=lmartin,ou=people,o=ls.\"\n ],\n \"attrs\": []\n }\n }\n ],\n \"messages\": [\n \"Le mail de notification a \\u00e9t\\u00e9 envoy\\u00e9.\"\n ]\n}\n
/api/1.0/object/[object type]/export
Cette m\u00e9thode permet d'exporter les objets d'un type en particulier dans un ioFormat configur\u00e9 pour ce type d'objets. Le type de l'objet est pr\u00e9cis\u00e9 dans l'URL et doit \u00eatre encod\u00e9 en cons\u00e9quence.
ioFormat
Le nom de l'ioFormat .
En tant normal, le retour de cette m\u00e9thode sera directement le fichier d'export demand\u00e9. Cependant, si une erreur survient, les param\u00e8tres d'export seront repris dans le retour JSON
de la m\u00e9thode qui contiendra \u00e9galement les erreurs survenues.
Exemple :
# curl -u username:secret --data-binary @/path/to/input.file 'https://ldapsaisie/api/1.0/object/LSpeople/export?ioFormat=mycsv&pretty'\nlogin;civility;firstname;name;mail;password;gid;shell\nhmartin;M.;Henri;MARTIN;henri.martin@ls.com;********;102001;no\ns.ldapsaisie;M.;Secretariat;LdapSaisie;secretariat@ldapsaisie.biz;********;70000;no\nls;M.;Ldap;Saisie;ldap.saisie@ls.com;********;102001;no\nerwpa;M.;Erwan;PAGEARD;erwan.page@ldapsaisie.biz;********;102009;no\n[...]\n
/api/1.0/object/[object type]/[dn]/relation/[relation]
Cette m\u00e9thode permet de g\u00e9rer 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\u00e9cis\u00e9s dans l'URL et doivent \u00eatre encod\u00e9s en cons\u00e9quence. Cette m\u00e9thode accepte les param\u00e8tres add
et remove
permettant de lister le ou les DN d'objet(s) \u00e0 respectivement ajouter ou supprimer parmis les objets actuellement en relation avec l'objet sp\u00e9cifi\u00e9. Si aucun DN n'est sp\u00e9cifi\u00e9 comme devant \u00eatre ajout\u00e9 ou supprim\u00e9, la m\u00e9thode retournera simplement les DN des objets en relation. En cas de modification demand\u00e9e, la m\u00e9thode retournera la nouvelle liste des DNs des objets en relation, quel que soit le r\u00e9sultat de l'op\u00e9ration de mise \u00e0 jour.
Exemple :
# 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'\n{\n \"dn\": \"uid=foo.bar,ou=people,o=ls\",\n \"type\": \"LSpeople\",\n \"name\": \"Foo Bar\",\n \"relation\": \"groups\",\n \"success\": true,\n \"relatedObjects\": [\n \"cn=ls,ou=groups,o=ls\",\n \"cn=invite,ou=groups,o=ls\"\n ],\n \"messages\": [\n \"Objects in relation updated.\"\n ]\n}\n
La configuration du projet est situ\u00e9e principalement dans le dossier conf/
. Les exceptions seront d\u00e9taill\u00e9es par la suite.
Warning
Toute la configuration du projet se fait par l'interm\u00e9diaire de fichiers d\u00e9finissant des variables PHP dont les valeurs sont utilis\u00e9es par le programme. Ceci signifie que la syntaxe de ces fichiers doit \u00eatre valide avec l'interpr\u00e9teur PHP utilis\u00e9.
"},{"location":"conf/LSaddon/","title":"Configuration des LSaddons","text":"Cette partie d\u00e9crit la mani\u00e8re de configurer les diff\u00e9rents LSaddons actuellement support\u00e9s par LdapSaisie. Ces addons peuvent avoir un fichier de configuration et il sera alors stock\u00e9 dans le dossier conf/LSaddons/
et potera le nom config.LSaddons.[addon name].php
.
Cet LSaddon offre une interface de visualisation des droits d'acc\u00e8s des diff\u00e9rents LSprofiles configur\u00e9s. Pour chaque type d'objet, la matrice des droits d'acc\u00e8s par attribut et par profil est affich\u00e9 sous la forme d'un tableau.
Le fichier de configuration permet de d\u00e9finir au travers la variable $GLOBALS['LSaccessRightsMatrixView_allowed_LSprofiles']
la liste des LSprofiles autoris\u00e9s \u00e0 acc\u00e9der \u00e0 cette interface.
Cet LSaddon fournit la fonction showObjectAccessLogs()
pouvant \u00eatre utilis\u00e9e comme customActions et permettant d'afficher les logs d'acc\u00e8s produits par l'overlay OpenLDAP accesslog sur un objet de l'annuaire.
La constante LS_ACCESSLOG_BASEDN
du fichier de configuration de l'addon (conf/LSaddons/config.LSaddons.accesslog.php
) permet d'indiquer le base DN de la base stockant les logs :
// Accesslog base DN\ndefine('LS_ACCESSLOG_BASEDN', 'cn=ldapsaisie-accesslog');\n
Warning
LdapSaisie se connectera \u00e0 la base stockant les logs d'acc\u00e8s de l'annuaire avec les m\u00eames param\u00e8tres de connexion que pour la base principale (except\u00e9 le base DN). Pensez \u00e0 ajuster les ACLs de la base stockant les logs d'acc\u00e8s pour autoriser l'utilisateur d'LdapSaisie \u00e0 se connecter et lire les informations qu'elle contient.
Exemple d'ACL \u00e0 mettre en place :
to *\n by dn.exact=uid=ldapsaisie,ou=sysaccounts,o=ls read\n by * break\n
Ci-dessous, vous trouverez un exemple de configuration de la fonction showObjectAccessLogs()
comme customActions :
Exemple d'utilisation :
$GLOBALS['LSobjects']['LSpeople'] = array (\n [...]\n 'customActions' => array (\n 'showObjectAccessLogs' => array (\n 'function' => 'showObjectAccessLogs',\n 'label' => 'Show access logs',\n 'hideLabel' => true,\n 'noConfirmation' => true,\n 'disableOnSuccessMsg' => true,\n 'icon' => 'clock',\n 'rights' => array (\n 'admin'\n ),\n ),\n ),\n [...]\n);\n
"},{"location":"conf/LSaddon/LSaddon_asterisk/","title":"LSaddon_asterisk","text":"Cet LSaddon est utilis\u00e9 pour g\u00e9rer les fonctionnalit\u00e9s sp\u00e9cifiques au serveur de t\u00e9l\u00e9phonie Asterisk. Cet LSaddon donne acc\u00e8s \u00e0 une fonction permettant l'encodage d'un mot de passe au format sp\u00e9cifique attendu par Asterisk. Ce format est un hash MD5 d'une chaine de caract\u00e8re compos\u00e9e du nom d'utilisateur, d'une chaine fixe sp\u00e9cifi\u00e9e dans la configuration d'Asterisk et du mot de passe en clair.
"},{"location":"conf/LSaddon/LSaddon_exportSearchResultAsCSV/","title":"LSaddon_exportSearchResultAsCSV","text":"Cet LSaddon fournie une fonction du m\u00eame nom pouvant \u00eatre utilis\u00e9e comme customActions et permettant de t\u00e9l\u00e9charger le r\u00e9sultat d'une recherche au format CSV. L'export g\u00e9n\u00e9r\u00e9 reprend exactement le contenu des colonnes du tableau du r\u00e9sultat de la recherche. Le DN de l'objet LDAP correspondant est \u00e9galement fournis dans une colonne.
Des param\u00e8tres de configuration sont disponibles dans le fichier de configuration config.LSaddons.exportSearchResultAsCSV.php
. Ils permettent notamment de contr\u00f4ller le format du fichier CSV g\u00e9n\u00e9r\u00e9.
// CSV file delimiter\ndefine('LS_EXPORTSEARCHRESULTASCSV_DELIMITER',',');\n\n// CSV file enclosure\ndefine('LS_EXPORTSEARCHRESULTASCSV_ENCLOSURE','\"');\n\n// CSV file escape character (available since PHP 5.5.4)\ndefine('LS_EXPORTSEARCHRESULTASCSV_ESCAPE_CHAR','\\\\');\n
Ci-dessous, vous trouverez un exemple de configuration de la fonction exportSearchResultAsCSV()
comme customActions :
$GLOBALS['LSobjects']['LSpeople']['LSsearch'] = array (\n [...]\n 'customActions' => array (\n 'exportSearchResultAsCSV' => array (\n 'label' => 'Export result as CSV',\n 'icon' => 'export_csv',\n 'function' => 'exportSearchResultAsCSV',\n 'noConfirmation' => true,\n 'disableOnSuccessMsg' => true,\n 'rights' => array (\n 'admin'\n )\n ),\n ),\n [...]\n);\n
Note
Le label et l'ic\u00f4ne fournis dans cet exemple sont traduits et d\u00e9livr\u00e9s avec LdapSaisie.
"},{"location":"conf/LSaddon/LSaddon_impersonate/","title":"LSaddon_impersonate","text":"Cet LSaddon fournie une fonction du m\u00eame nom pouvant \u00eatre utilis\u00e9e comme customActions et permettant de se reconnecter en tant qu'un autre utilisateur de l'annuaire.
Ci-dessous, vous trouverez un exemple de configuration de la fonction impersonate()
comme customActions :
Exemple d'utilisation :
$GLOBALS['LSobjects']['LSpeople'] = array (\n [...]\n 'customActions' => array (\n 'impersonate' => array (\n 'function' => 'impersonate',\n 'label' => 'Reconnect as this user',\n 'hideLabel' => True,\n 'noConfirmation' => true,\n 'disableOnSuccessMsg' => true,\n 'icon' => 'user_go',\n 'rights' => array (\n 'admin'\n ),\n ),\n ),\n [...]\n);\n
"},{"location":"conf/LSaddon/LSaddon_mail/","title":"LSaddon_mail","text":"Cet LSaddon est utilis\u00e9 pour g\u00e9rer l'envoi de courriels. Il utilise pour cela les librairies PEAR Mail et Mail_Mime qui doivent \u00eatre install\u00e9s.
Cet LSaddon offre aussi la possibilit\u00e9 d'envoyer des courriels dont le contenu est construit \u00e0 partir de mod\u00e8les. Ces mod\u00e8les sont enregistr\u00e9s dans des fichiers textes stock\u00e9s (voir $GLOBALS['MAIL_TEMPLATES_DIRECTORIES']
). Pour chaque mod\u00e8le, vous devez fournir trois fichiers portant le m\u00eame nom mais avec des extensions diff\u00e9rentes :
template.subject
: le sujet du courriel. Note : seule la premi\u00e8re ligne du fichier est utilis\u00e9 (et pass\u00e9e dans la fonction trim()
)template.html
: le contenu HTML du courrieltemplate.txt
: le contenu texte du courrielCes trois fichiers sont utilis\u00e9s en tant que mod\u00e8le Smarty et seront construit en utilisant les variables fournies dans le contexte d'envoi des courriels. \u00c0 noter que le moteur Smarty utilis\u00e9 pour la g\u00e9n\u00e9ration du contenu de ces courriels n'est pas le m\u00eame que celui utilis\u00e9 par LdapSaisie pour l'affichage des pages.
Par ailleurs, cet LSaddon fourni une vue de gestion des mod\u00e8les de courriels existants (voir $GLOBALS['MAIL_TEMPLATES_EDITOR_VIEW_ACCESS']
pour la configuration des acc\u00e8s).
Warning
Cette vue n'est pas con\u00e7ues pour \u00eatre mise entre toutes les mains. La s\u00e9curisation de mod\u00e8les de courriels \u00e9tant tr\u00e8s complexe, il est fortement recommand\u00e9 de n'ouvrir l'acc\u00e8s \u00e0 cette vue qu'aux utilisateurs avertis et de confiances.
Cet LSaddon doit \u00eatre configur\u00e9 en \u00e9ditant son fichier de configuration config.LSaddons.mail.php
.
***********************************************\n * Configuration du support de l'envoi de mail *\n ***********************************************\n */\n\n// Pear :: Mail\ndefine('PEAR_MAIL','/usr/share/php/Mail.php');\n\n// Pear :: Mail_mime\ndefine('PEAR_MAIL_MIME','/usr/share/php/Mail/mime.php');\n\n/*\n * M\u00e9thode d'envoie :\n * - mail : envoie avec la m\u00e9thode PHP mail()\n * - sendmail : envoie la commande sendmail du syst\u00e8me\n * - smtp : envoie en utilisant un serveur SMTP\n */\ndefine('MAIL_SEND_METHOD','smtp');\n\n/*\n * Param\u00e8tres d'envoie :\n * Ces param\u00e8tres d\u00e9pende de la m\u00e9thode utilis\u00e9. Repport\u00e9 vous \u00e0 la documentation\n * de PEAR :: Mail pour plus d'information.\n * Lien : http://pear.php.net/manual/en/package.mail.mail.factory.php\n * Infos :\n * List of parameter for the backends\n * mail\n * o If safe mode is disabled, $params will be passed as the fifth\n * argument to the PHP mail() function. If $params is an array,\n * its elements will be joined as a space-delimited string.\n * sendmail\n * o $params[\"sendmail_path\"] - The location of the sendmail program\n * on the filesystem. Default is /usr/bin/sendmail.\n * o $params[\"sendmail_args\"] - Additional parameters to pass to the\n * sendmail. Default is -i.\n * smtp\n * o $params[\"host\"] - The server to connect. Default is localhost.\n * o $params[\"port\"] - The port to connect. Default is 25.\n * o $params[\"auth\"] - Whether or not to use SMTP authentication.\n * Default is FALSE.\n * o $params[\"username\"] - The username to use for SMTP authentication.\n * o $params[\"password\"] - The password to use for SMTP authentication.\n * o $params[\"localhost\"] - The value to give when sending EHLO or HELO.\n * Default is localhost\n * o $params[\"timeout\"] - The SMTP connection timeout.\n * Default is NULL (no timeout).\n * o $params[\"verp\"] - Whether to use VERP or not. Default is FALSE.\n * o $params[\"debug\"] - Whether to enable SMTP debug mode or not.\n * Default is FALSE.\n * o $params[\"persist\"] - Indicates whether or not the SMTP connection\n * should persist over multiple calls to the send() method.\n */\n$GLOBALS['MAIL_SEND_PARAMS'] = NULL;\n\n/*\n * Headers :\n */\n$GLOBALS['MAIL_HEARDERS = array();\n\n// Catch all sent emails\n$GLOBALS['MAIL_CATCH_ALL'] = array();\n\n/**\n * Email templates\n *\n * This addon offer ability to send email by using templates. Email templates are stored in\n * full-text files in configured directories (see $GLOBALS['MAIL_TEMPLATES_DIRECTORIES']). For each\n * template, you have to provide three files with the same name but with different extensions:\n * - template.subject: the email subject. Note: only the first line is used (and stripped)\n * - template.html: the HTML content of the email\n * - template.txt: the text content of the email\n * All these files will be used as Smarty templates and will be computed using variables provided\n * in the sending context. Note that the Smarty object used to compute the template is not the same\n * as the one used by LdapSaisie to display pages.\n *\n * Futhermore, this addon offer a view to list and edit existing template (see\n * $GLOBALS['MAIL_TEMPLATES_EDITOR_VIEW_ACCESS'] to configured access).\n */\n\n// List of directory paths where as stored mail templates\n// Notes:\n// - provided path could be absolute or relative. Relative path are relative to the root base\n// sources LdapSaisie directory (commonly /usr/share/ldapsaisie or the src directory if you\n// installed it from sources). On Debian installation, you can specify 'local/email_templates' to\n// refer to /etc/ldapsaisie/local/email_templates directory/\n// - Multiple directories could be specified, sorted so that the first ones take priority over\n// the last one.\n// - To allow users to edit them using the editor view, these directories must be\n// writable by PHP process (commonly runed as www-data).\n$GLOBALS['MAIL_TEMPLATES_DIRECTORIES'] = array('local/email_templates');\n\n// List of granted LSprofiles to access mail templates editor view\n// WARNING: Sanitizing mail templates is hell... EXPOSE THIS VIEW ONLY TO TRUSTED USERS!\n$GLOBALS['MAIL_TEMPLATES_EDITOR_VIEW_ACCESS'] = array('admin');\n
Cet LSaddon offre avant tout la possibilit\u00e9 d'envoyer des courriels en utilisant la fonction PHP sendMail()
:
bool sendMail(\n <string> $to,\n <string> $subject,\n <string> $msg,\n <array(string)> $headers,\n <array> $attachments,\n <string> $eol,\n <string> $encoding,\n <boolean> $html\n);\n
Pour l'envoi de courriels en utilisant un mod\u00e8le, il faut utiliser la fonction PHP sendMailFromTemplate()
:
bool sendMailFromTemplate(\n <string> $tplname,\n <string> $to,\n <array> $variables,\n <array(string)> $headers,\n <array> $attachments\n);\n
"},{"location":"conf/LSaddon/LSaddon_maildir/","title":"LSaddon_maildir","text":"Cet LSaddon est utilis\u00e9 pour g\u00e9rer la manipulation distante de maildir.
FIXME
"},{"location":"conf/LSaddon/LSaddon_mailquota/","title":"LSaddon_mailquota","text":"Cet LSaddon fournie une fonction mailquota_get_usage
pouvant \u00eatre utilis\u00e9e pour r\u00e9cup\u00e9rer l'utilisation du quota d'une bo\u00eete mail IMAP. Pour cela, LdapSaisie se connecte au serveur IMAP en utilisant un compte ma\u00eetre.
Cet LSaddon fournie une \u00e9galement une fonction mailquota_show_usage
pouvant \u00eatre utilis\u00e9e comme customActions et permettant d'afficher l'utilisation du quota de la bo\u00eete mail correspondante via une message dynamique (LSinfo
).
Des param\u00e8tres de configuration sont disponibles dans le fichier de configuration config.LSaddons.mailquota.php
.
// IMAP Mailbox connection string LSformat (composed with LSldapObject attributes)\n// See : https://php.net/imap_open (parameter $mailbox)\ndefine('MAILQUOTA_IMAP_MAILBOX','{localhost}');\n\n// IMAP Master user\ndefine('MAILQUOTA_IMAP_MASTER_USER', 'ldapsaisie');\n\n// IMAP Master user's password\ndefine('MAILQUOTA_IMAP_MASTER_USER_PWD', 'secret');\n\n// IMAP Master user LSformat composed with :\n// * masteruser = master username (MAILQUOTA_IMAP_MASTER_USER)\n// * LSldapObject attributes\ndefine('MAILQUOTA_IMAP_MASTER_USER_FORMAT', '%{mail}*%{masteruser}');\n\n// IMAP quota root mailbox\ndefine('MAILQUOTA_IMAP_QUOTA_ROOT_MAILBOX', 'INBOX');\n
Ci-dessous, vous trouverez un exemple de configuration de la fonction mailquota_show_usage()
comme customActions :
$GLOBALS['LSobjects']['LSpeople'] = array (\n [...]\n 'customActions' => array (\n 'showmailquotausage' => array (\n 'function' => 'mailquota_show_usage',\n 'label' => 'Show mail quota usage',\n 'noConfirmation' => true,\n 'disableOnSuccessMsg' => true,\n 'icon' => 'mail',\n 'rights' => array (\n 'admin'\n )\n ),\n [...]\n ),\n [...]\n);\n
"},{"location":"conf/LSaddon/LSaddon_phpldapadmin/","title":"LSaddon_phpldapadmin","text":"Cet LSaddon est utilis\u00e9 pour permettre un lien facile entre le logiciel PhpLdapAdmin et LdapSaisie. Il sera possible ainsi \u00e0 partir d'un objet dans LdapSaisie de voir ce m\u00eame objet dans PhpLdapAdmin.
Il est necessaire de configurer l'URL de votre installation de PhpLdapAdmin dans le fichier de configuration config.LSaddons.phpldapadmin.php
.
Structure du fichier :
// PhpLdapAdmin View Object URL format\ndefine('LS_PHPLDAPADMIN_VIEW_OBJECT_URL_FORMAT','//'.$_SERVER['SERVER_NAME'].'/phpldapadmin/cmd.php?cmd=template_engine&server_id=0&dn=%{dn}');\n
Cet LSaddon offre la possibilit\u00e9 d'utilis\u00e9 la fonction PHP redirectToPhpLdapAdmin()
comme customActions.
Exemple d'utilisation :
$GLOBALS['LSobjects']['LSpeople'] = array (\n [...]\n 'customActions' => array (\n 'redirectPhpLdapAdmin' => array (\n 'function' => 'redirectToPhpLdapAdmin',\n 'label' => 'See in PhpLdapAdmin',\n 'hideLabel' => True,\n 'noConfirmation' => true,\n 'disableOnSuccessMsg' => true,\n 'icon' => 'phpldapadmin',\n 'rights' => array (\n 'admin'\n )\n ),\n ),\n [...]\n);\n
"},{"location":"conf/LSaddon/LSaddon_ppolicy/","title":"LSaddon_ppolicy","text":"Cet LSaddon fourni :
une fonction ppolicy_extraDisplayColumn_password_expiration
pouvant \u00eatre utilis\u00e9e pour la g\u00e9n\u00e9ration d'une extraDisplayedColumn affichant l'\u00e9tat d'expiration du mot de passe des objets d'une recherche.
Exemple d'utilisation :
$GLOBALS['LSobjects']['LSpeople']['LSsearch'] = array (\n [...]\n 'extraDisplayedColumns' => array (\n [...]\n 'password_expiration' => array (\n 'label' => 'Password expiration',\n 'generateFunction' => 'ppolicy_extraDisplayColumn_password_expiration',\n 'additionalAttrs' => array('pwdChangedTime', 'pwdPolicySubentry'),\n 'escape' => false,\n 'cssStyle' => 'width: 14em; text-align: center;'\n ),\n [...]\n ),\n [...]\n);\n
une fonction ppolicy_export_search_info
pouvant \u00eatre utilis\u00e9e comme actions personnalis\u00e9es sur les recherches d'LSobjects pour exporter au format CSV les informations des politiques de mots de passe des objets retourn\u00e9s par la recherche.
Exemple d'utilisation :
$GLOBALS['LSobjects']['LSpeople']['LSsearch'] = array (\n [...]\n 'customActions' => array (\n 'exportPpolicyInfo' => array (\n 'label' => 'Export password policy info',\n 'icon' => 'export_csv',\n 'function' => 'ppolicy_export_search_info',\n 'noConfirmation' => true,\n 'disableOnSuccessMsg' => true,\n 'rights' => array (\n 'admin',\n ),\n ),\n ),\n [...]\n);\n
exportPpolicyInfo
permettant d'exporter les informations des politiques de mots de passe de tous les objets d'un type donn\u00e9. Cette m\u00e9thode est accessible via l'URL au format suivant : /api/1.0/exportPpolicyInfo/[object type]
la commande CLI export_ppolicy_info
permettant d'exporter les informations des politiques de mots de passe de tous les objets d'un type donn\u00e9.
Utilisation :
ldapsaisie export_ppolicy_info [object type] [-o|--output filepath] [-j|--json [-p|--pretty]]\n
Des param\u00e8tres de configuration sont disponibles dans le fichier de configuration config.LSaddons.ppolicy.php
.
// Default password policy object DN (set to null if no default policy is configured)\ndefine('LS_PPOLICY_DEFAULT_DN', null);\n\n// Ppolicy password warning expiration threshold (in seconds)\ndefine('LS_PPOLICY_WARNING_EXPIRATION_THRESHOLD', 7 * 86400);\n\n// Ppolicy password critical expiration threshold (in seconds)\ndefine('LS_PPOLICY_CRITICAL_EXPIRATION_THRESHOLD', 2 * 86400);\n\n// CSV file delimiter\ndefine('LS_PPOLICY_CSV_DELIMITER',';');\n\n// CSV file enclosure\ndefine('LS_PPOLICY_CSV_ENCLOSURE','\"');\n\n// CSV file escape character (available since PHP 5.5.4)\ndefine('LS_PPOLICY_CSV_ESCAPE_CHAR','\\\\');\n\n// List of LSprofiles who are granted to use the exportPpolicyInfo API method\n$GLOBALS['LS_PPOLICY_API_GRANTED_PROFILES'] = array('admin');\n\n// List of extra attributes to include in Ppolicy info export\n$GLOBALS['LS_PPOLICY_INFO_EXPORT_EXTRA_ATTRS'] = array();\n
LS_PPOLICY_DEFAULT_DN
Constante d\u00e9finissant le DN de la politique par d\u00e9faut. Si aucune politique par d\u00e9faut n'est d\u00e9finie, ce param\u00e8tre doit valoir null
.
LS_PPOLICY_WARNING_EXPIRATION_THRESHOLD
Constante d\u00e9finissant le seuil d'alerte pour l'expiration des mots de passe (en seconde). Par d\u00e9faut : 7 jours.
LS_PPOLICY_CRITICAL_EXPIRATION_THRESHOLD
Constante d\u00e9finissant le seuil critique pour l'expiration des mots de passe (en seconde). Par d\u00e9faut : 2 jours.
LS_PPOLICY_CSV_DELIMITER
Constante d\u00e9finissant le caract\u00e8re utilis\u00e9 lors de la g\u00e9n\u00e9ration de l'export CSV comme s\u00e9parateur de champ. Par d\u00e9faut : un point-virgule.
LS_PPOLICY_CSV_ENCLOSURE
Constante d\u00e9finissant le caract\u00e8re utilis\u00e9 lors de la g\u00e9n\u00e9ration de l'export CSV pour l'encadrement des champs. Par d\u00e9faut : un guillemet double.
LS_PPOLICY_CSV_ESCAPE_CHAR
Constante d\u00e9finissant le caract\u00e8re utilis\u00e9 lors de la g\u00e9n\u00e9ration de l'export CSV pour l'\u00e9chappement des champs. Par d\u00e9faut : une barre oblique inverse.
$GLOBALS['LS_PPOLICY_API_GRANTED_PROFILES']
Tableau global listant les LSprofiles autoris\u00e9s \u00e0 utiliser la m\u00e9thode d'API exportPpolicyInfo
.
$GLOBALS['LS_PPOLICY_INFO_EXPORT_EXTRA_ATTRS']
Tableau global listant les attributs suppl\u00e9mentaires \u00e0 inclure lors de l'export des informations de politique de mots de passe.
Cet LSaddon fourni une page affichant les informations utiles pour l'\u00e9quipe assurant le support de l'application. Cette page est accessible \u00e0 l'adresse addon/showSupportInfo/showMySupportInfo
. Elle compile (et permet de t\u00e9l\u00e9charger) l'ensemble des informations utiles \u00e0 l'appr\u00e9ciation du contexte d'acc\u00e8s \u00e0 l'application par l'utilisateur.
Cette page est accessible par tous les utilisateurs connect\u00e9s \u00e0 l'application. Cependant, par d\u00e9faut, il n'y a aucun lien d'acc\u00e8s \u00e0 celle-ci. Il est possible d'ajouter un lien d'acc\u00e8s dans le menu et modifiant la valeur de la constante SHOW_SUPPORT_INFO_IN_MENU
\u00e0 True
.
Une fonction showMySupportInfo()
est \u00e9galement fournie et peut-\u00eatre utilis\u00e9e comme customActions. Elle redirigera alors l'utilisateur vers cette page. Ci-dessous, vous trouverez un exemple de configuration de la fonction showMySupportInfo()
comme customActions :
$GLOBALS['LSobjects']['LSpeople'] = array (\n [...]\n 'customActions' => array (\n 'showMySupportInfo' => array (\n 'function' => 'showMySupportInfo',\n 'label' => 'Show my support information',\n 'hideLabel' => True,\n 'noConfirmation' => true,\n 'disableOnSuccessMsg' => true,\n 'icon' => 'terminal',\n 'rights' => array (\n 'self'\n ),\n ),\n ),\n [...]\n);\n
Note
Le label et l'ic\u00f4ne fournis dans cet exemple sont traduits et d\u00e9livr\u00e9s avec LdapSaisie.
"},{"location":"conf/LSaddon/LSaddon_showTechInfo/","title":"LSaddon_showTechInfo","text":"Cet LSaddon fournie une fonction du m\u00eame nom pouvant \u00eatre utilis\u00e9e comme customActions et permettant d'afficher les informations techniques d'un objet de l'annuaire.
Ci-dessous, vous trouverez un exemple de configuration de la fonction showTechInfo()
comme customActions :
$GLOBALS['LSobjects']['LSpeople'] = array (\n [...]\n 'customActions' => array (\n 'showTechInfo' => array (\n 'function' => 'showTechInfo',\n 'label' => 'Show technical information',\n 'hideLabel' => True,\n 'noConfirmation' => true,\n 'disableOnSuccessMsg' => true,\n 'icon' => 'tech_info',\n 'rights' => array (\n 'admin'\n ),\n ),\n ),\n [...]\n);\n
Note
Le label et l'ic\u00f4ne fournis dans cet exemple sont traduits et d\u00e9livr\u00e9s avec LdapSaisie.
"},{"location":"conf/LSauthMethod/","title":"Configuration des m\u00e9thodes d'authentification (LSauthMethod)","text":"Cette partie d\u00e9crit la mani\u00e8re de configurer les m\u00e9thodes d'authentification d'LdapSaisie appel\u00e9e LSauthMethod). Ces librairies peuvent avoir un fichier de configuration et il sera alors stock\u00e9 dans le dossier conf/LSauth/
.
Cette LSauthMethod est utilis\u00e9e pour g\u00e9rer l'authentification via un service SSO CAS. Cette librairie doit \u00eatre configur\u00e9e en \u00e9ditant le fichier de configuration conf/LSauth/config.LSauthMethod_CAS.php
.
Structure du fichier :
/*\n *****************************************************\n * Configuration of the CAS authentification support *\n *****************************************************\n */\n\n// phpCAS Path (http://www.ja-sig.org/wiki/display/CASC/phpCAS)\ndefine('PHP_CAS_PATH','/usr/share/php/CAS.php');\n\n// phpCAS Debug File\n// define('PHP_CAS_DEBUG_FILE','/tmp/phpCAS.log');\n\n// Disable logout\ndefine('LSAUTH_CAS_DISABLE_LOGOUT',false);\n\n// CAS Server version (used constant name know by phpCAS : CAS_VERSION_1_0 or CAS_VERSION_2_0)\ndefine('LSAUTH_CAS_VERSION','CAS_VERSION_2_0');\n\n// CAS Server hostname\ndefine('LSAUTH_CAS_SERVER_HOSTNAME','cas.univ.fr');\n\n// CAS Server port\ndefine('LSAUTH_CAS_SERVER_PORT',443);\n\n// CAS Server URI (empty by default)\n// define('LSAUTH_CAS_SERVER_URI','cas/');\n\n// No SSL validation for the CAS server\ndefine('LSAUTH_CAS_SERVER_NO_SSL_VALIDATION',false);\n\n// CAS server SSL CA Certificate path\n//define('LSAUTH_CAS_SERVER_SSL_CACERT','');\n
PHP_CAS_PATH
Le chemin d'acc\u00e8s du fichier CAS.php
de la librairie phpCAS. Le chemin d'exemple correspond au chemin r\u00e9sultant d'une installation via PEAR sur une Debian (Lenny).
PHP_CAS_DEBUG_FILE
Chemin du fichier de log de la librairie phpCAS. Commenter la ligne pour d\u00e9sactiver les logs.
LSAUTH_CAS_DISABLE_LOGOUT
Bool\u00e9en d\u00e9finissant si l'utilisateur peut se d\u00e9connecter du serveur CAS depuis l'interface.
Note
Remarque : l'appel de l'URL de d\u00e9connexion via une requ\u00eate GET
supprimera la session PHP et donc la session LdapSaisie sans d\u00e9connecter pour autant l'utilisateur au niveau du serveur CAS. Cela peut donc permettre de g\u00e9rer la d\u00e9connexion automatique au niveau d'LdapSaisie suite \u00e0 une d\u00e9connexion au niveau du CAS \u00e0 traver le concepte de Global Logout
.
LSAUTH_CAS_VERSION
Nom de la constant phpCAS permettant de d\u00e9finir la version CAS du serveur. Actuellement, la librairie phpCAS ne reconnait que la constante CAS_VERSION_1_0
pour la version 1 de CAS ou la constante CAS_VERSION_2_0
pour la version 2 de CAS.
Note
Remarque : Des tests on montr\u00e9s que l'utilisation d'une compatibilit\u00e9 CAS version 2 peut \u00e9galement fonctionner sur un version 3 du serveur CAS.
LSAUTH_CAS_SERVER_HOSTNAME
Le nom d'h\u00f4te du serveur CAS.
LSAUTH_CAS_SERVER_PORT
Le port d'\u00e9coute du serveur CAS.
LSAUTH_CAS_SERVER_URI
Le dossier HTTP dans lequel se trouve le service CAS. Exemple : Pour un service CAS accessible via l'URL https://cas.univ.fr/cas/
, la constante devra valoir cas/
.
LSAUTH_CAS_SERVER_NO_SSL_VALIDATION
Bool\u00e9en permettant de d\u00e9sactiver la validation du certificat SSL du serveur CAS lors des requ\u00eates de validation des tickets CAS.
LSAUTH_CAS_SERVER_SSL_CACERT
Chemin d'acc\u00e8s du fichier contenant le certificat SSL de la CA du serveur CAS au format PEM. Commenter la ligne pour d\u00e9sactiver ce param\u00e8tre.
Cette LSauthMethod est utilis\u00e9e pour g\u00e9rer l'authentification via les variables d'environnements d\u00e9finies suite \u00e0 une authentification, potentiellement d\u00e9l\u00e9gu\u00e9e au serveur web.
Cette m\u00e9thode r\u00e9cup\u00e8re dans l'environment d'ex\u00e9cution PHP, le nom d'utilisateur et le mot de passe de l'utilisateur connect\u00e9. \u00c0 partir du nom d'utilisateur, une recherche dans l'annuaire sera effectu\u00e9e pour trouver l'utilisateur correspondant. L'authentification sera r\u00e9ussie uniquement si un et un seul utilisateur est retourn\u00e9 par la recherche et si une authentification aupr\u00e8s de l'annuaire LDAP r\u00e9ussie \u00e0 l'aide du DN de l'objet LDAP trouv\u00e9 et du mot de passe fourni.
Note
En cas d'authentification d\u00e9l\u00e9gu\u00e9e au serveur web, il est possible de d\u00e9sactiver la v\u00e9rification du mot de passe via le param\u00e8tre LSAUTHMETHOD_HTTP_TRUST_WITHOUT_PASSWORD_CHALLENGE
(voir ci-dessous).
Les variables d'environnements utilis\u00e9es pour authentifier l'utilisateur connect\u00e9 d\u00e9pendent de la m\u00e9thode configur\u00e9e via la constante LSAUTHMETHOD_HTTP_METHOD
(voir ci-dessous). Si ces variables ne sont pas disponibles, une erreur HTTP 403 sera g\u00e9n\u00e9r\u00e9e pour r\u00e9clamer une authentification \u00e0 l'utilisateur.
Note
Cette LSauthMethod supporte le mode API et il s'agit de la m\u00e9thode utilis\u00e9e par d\u00e9faut dans ce mode.
Cette librairie peut \u00eatre configur\u00e9e en \u00e9ditant le fichier de configuration conf/LSauth/config.LSauthMethod_HTTP.php
.
Structure du fichier :
/*\n *****************************************************\n * Configuration of the HTTP authentification support *\n *****************************************************\n */\n\n// Don't check HTTP server's login/password by LDAP authentication challenge\n//define('LSAUTHMETHOD_HTTP_TRUST_WITHOUT_PASSWORD_CHALLENGE',true);\n\n// Authentication realm (API mode only)\n//define('LSAUTHMETHOD_HTTP_API_REALM', ___('LdapSaisie API - Authentication required'));\n
LSAUTHMETHOD_HTTP_TRUST_WITHOUT_PASSWORD_CHALLENGE
Permet de d\u00e9sactiver le test d'authentification aupr\u00e8s de l'annuaire LDAP. Pour cela, cette constante doit \u00eatre d\u00e9finie et valoir True
.
LSAUTHMETHOD_HTTP_METHOD
Permet de d\u00e9finir la m\u00e9thode utilis\u00e9e par le serveur web pour passer \u00e0 PHP l'identifiant de l'utilisateur connect\u00e9 et son mot de passe.
Cette constance peut pendre les valeurs suivantes :
PHP_PASS
Dans cette m\u00e9thode, le serveur web d\u00e9fini les variables d'environnement PHP_AUTH_USER
et PHP_AUTH_PW
. Cette m\u00e9thode est la m\u00e9thode par d\u00e9faut et convient en cas d'utilisation de mod_php
.
REMOTE_USER
Dans cette m\u00e9thode, le serveur web d\u00e9fini la variable d'environnement REMOTE_USER
. Cette variable ne contient que l'identifiant de l'utilisateur connect\u00e9. Cette m\u00e9thode ne peut donc \u00eatre utilis\u00e9e que conjointement avec l'activation du param\u00e8tre LSAUTHMETHOD_HTTP_TRUST_WITHOUT_PASSWORD_CHALLENGE
.
AUTHORIZATION
Dans cette m\u00e9thode, le serveur web passe le contenu de l'ent\u00eate HTTP Authorization
dans la variable d'environnement HTTP_AUTHORIZATION
. Cette m\u00e9thode convient en cas d'utilisation de PHP en mode CGI ou encore via PHP-FPM.
Pour utiliser cette m\u00e9thode, il faudra adapter la configuration du serveur web. Par exemple, pour Apache HTTPd, vous pouvez utiliser le module rewrite
et la r\u00e8gle de r\u00e9\u00e9criture suivante :
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]\n
LSAUTHMETHOD_HTTP_LOGOUT_REMOTE_URL
URL de d\u00e9connexion externe, utile par exemple dans le contexte d'une connexion via un service SSO. L'utilisateur sera automatiquement redirig\u00e9 vers cette URL apr\u00e8s sa d\u00e9connexion effective au niveau d'LdapSaisie.
Note
Si cette URL de d\u00e9connexion n'est pas d\u00e9fini, le bouton de d\u00e9connexion sera masqu\u00e9.
LSAUTHMETHOD_HTTP_REALM
Domaine d'authentification (reaml
) utilis\u00e9 pour r\u00e9clamer l'authentification de l'utilisateur (facultatif).
Note
Pour que le message soit traduit, utilisez la fonction ___()
(voir exemple).
Cette LSauthMethod est utilis\u00e9e pour g\u00e9rer l'authentification automatique des utilisateurs arrivant (\u00e9quivalent \u00e0 un mode anonyme). Cette librairie doit \u00eatre configur\u00e9e en \u00e9ditant le fichier de configuration conf/LSauth/config.LSauthMethod_anonymous.php
et notament en d\u00e9finissant la constante LSAUTHMETHOD_ANONYMOUS_USER
contenant le login d'un utilisateur dont les droits d'acc\u00e8s seront endoss\u00e9s par tout les personnes utilisant LdapSaisie.
Cette partie d\u00e9crit la mani\u00e8re de configurer les diff\u00e9rents types de LSobjets manipul\u00e9s par LdapSaisie.
La configuration des LSobjects est stock\u00e9e dans le dossier /conf/LSobjects
. Dans ce dossier, on retrouve un fichier par type d'LSobject, nomm\u00e9 de la mani\u00e8re suivante :
config.LSobjects.[nom du type d'LSobject].php\n
Ce fichier contient la d\u00e9claration de la configuration du type d'LSobject qui est stock\u00e9 dans la variable globale $GLOBALS['LSobjects']['[nom du type d'LSobject]']
.
$GLOBALS['LSobjects']['[nom du type d'LSobject]'] = array (\n 'objectclass' => array(\n 'objetclass1',\n 'objetclass2',\n ...\n ),\n 'filter' => '[filtre LDAP]',\n\n 'rdn' => 'attr1',\n\n 'LSaddons' => [LSaddon(s)],\n\n 'container_dn' => 'ou=people',\n 'generate_container_dn' => '[callable]',\n 'container_auto_create' => array(\n // Information des configurations pour la cr\u00e9ation du conteneur du type d'LSobjet\n // lors de la cr\u00e9ation nouveau subDn\n ),\n\n 'disable_creation' => [boolean]',\n\n 'before_modify' => 'function1',\n 'after_modify' => 'function2',\n 'after_create' => 'function3',\n 'after_delete' => 'function4',\n\n 'label' => 'objet1',\n 'display_name_format' => '[format]',\n 'displayAttrName' => '[booleen]',\n\n //Custom Actions\n 'customActions' => array (\n // Configuration des customActions pour ce type d'objet\n ),\n\n // LSrelation\n 'LSrelation' => array(\n // Configuration des LSrelations entre ce type d'objet et les autres\n ),\n\n // LSform\n 'LSform' => array (\n // Configuration des formulaires de l'objet\n ), // fin LSform\n\n // LSsearch\n 'LSsearch' => array (\n // Configuration des recherches de l'objet\n ), // fin LSsearch\n\n 'globalSearch' => [booleen],\n 'globalSearch_extraDisplayedColumns' => [booleen],\n\n // ioFormat\n 'ioFormat' => array (\n // Configuration des formats d'import/export de l'objet\n ),\n\n // Attributs\n 'attrs' => array (\n // Configuration des attributs du type d'LSobjet\n )\n);\n...\n
objectclass
La liste des objectclass des objets.
filter
Filtre de recherche LDAP applicable \u00e0 tout les objets de ce type et qui sera utilis\u00e9 lors de chaque recherche de ce type d'objet.
rdn
Nom de l'attribut correspondant au RDN des objets LDAP.
LSaddons
LSaddon(s) dont le type d'objet d\u00e9pend. Ce peut \u00eatre un tableau de cha\u00eenes de caract\u00e8res ou une simpe cha\u00eene de caract\u00e8res correspondant au(x) nom(s) du/des LSaddon(s) en d\u00e9pendance.
container_dn
El\u00e9ment pour construire le basedn de stockage de ce type d'objet. Par exemple, si le basedn de l'annuaire est o=ls
et que les objets utilisateurs sont stock\u00e9s dans la branche de l'annuaire ou=people,o=ls
, alors container_dn
devra valoir ou=people
.
Lorsque l'annuaire poss\u00e8de des subDn, les objets seront cherch\u00e9s dans le basedn r\u00e9sultant de la concat\u00e9nation du param\u00e8tre container_dn
, d'une virgule et du basedn correspondant au subDn courant.
generate_container_dn
Callable (au sens PHP), utilis\u00e9 pour g\u00e9n\u00e9rer la valeur du param\u00e8tre container_dn
dynamiquement. Ce callable prend en param\u00e8tre l'objet LSobject \u00e0 cr\u00e9er et retourne la valeur du param\u00e8tre container_dn
.
container_auto_create
Tableau associatif contenant les param\u00e8tres de configuration n\u00e9cessaires \u00e0 la cr\u00e9ation des container_dn
dans les nouveaux objets utilis\u00e9s comme subDn. Voir la section concern\u00e9e.
disable_creation
Bool\u00e9en permetant de desactiver la creation de ce type d'objet de mani\u00e8re globale.
before_modify
Cha\u00eene de caract\u00e8res (ou tableau de chaine de caract\u00e8res) correspondant au nom d'une ou plusieurs fonctions qui seront ex\u00e9cut\u00e9es avant la modification d'un objet. Voir la section concern\u00e9e.
after_modify
Cha\u00eene de caract\u00e8res (ou tableau de chaine de caract\u00e8res) correspondant au nom d'une ou plusieurs fonctions qui seront ex\u00e9cut\u00e9es apr\u00e8s la modification d'un objet. Voir la section concern\u00e9e.
after_create
Cha\u00eene de caract\u00e8res (ou tableau de chaine de caract\u00e8res) correspondant au nom d'une ou plusieurs fonctions qui seront ex\u00e9cut\u00e9es apr\u00e8s la cr\u00e9ation d'un objet. Voir la section concern\u00e9e.
after_delete
Cha\u00eene de caract\u00e8res (ou tableau de chaine de caract\u00e8res) correspondant au nom d'une ou plusieurs fonctions qui seront ex\u00e9cut\u00e9es apr\u00e8s la suppression d'un objet. Voir la section concern\u00e9e.
label
Nom g\u00e9n\u00e9rique au pluriel qualifiant le type d'objet. Exemple : Utilisateurs.
display_name_format
Format param\u00e8trable du nom des objets compos\u00e9s \u00e0 partir des valeurs d'affichage des attributs de l'objet.
displayAttrName
Bool\u00e9en d\u00e9finissant si le nom des attributs doit \u00eatre affich\u00e9 en pr\u00e9fixe de leur message d'aide (param\u00e8tre help_info
).
customActions
Tableau associatif contenant les param\u00e8tres de configuration des customActions. Voir la section concern\u00e9e.
LSrelation
Tableau associatif contenant les param\u00e8tres de configuration des LSrelations. Voir la section concern\u00e9e.
LSform
Tableau associatif contenant les param\u00e8tres de configuration des LSforms des LSobjects. Voir la section concern\u00e9e.
LSsearch
Tableau associatif contenant les param\u00e8tres de configuration des recherches de LSobject de ce type dans l'annuaire. Voir la section concern\u00e9e.
globalSearch
Inclure ou non ce type d'objet dans le r\u00e9sultat des recherches globales (Par d\u00e9faut : True
).
globalSearch_extraDisplayedColumns
Afficher ou non les colonnes suppl\u00e9mentaires pour ce type d'objet dans le r\u00e9sultat des recherches globales (Par d\u00e9faut : True
). Pour plus de d\u00e9tails les colonnes suppl\u00e9mentaires, voir la section d\u00e9di\u00e9e.
ioFormat
Tableau associatif contenant les param\u00e8tres de configuration des formats de fichiers d'import/export de ce type d'LSobject. Voir la section concern\u00e9e.
attrs
Tableau associatif contenant les param\u00e8tres de configuration des attributs des objets. Voir la section concern\u00e9e.
Cette section d\u00e9crit la mani\u00e8re de param\u00e9trer les formulaires d'LdapSaisie pour un type LSobject donn\u00e9. Pour chaque type d'LSobject, il faut configurer plusieurs formulaires correspondant aux vues g\u00e9r\u00e9es par LdapSaisie (cr\u00e9ation, modification, ...). Les formulaires se configurent par plusieurs biais :
Via la configuration au niveau de chaque type d'LSobject : il y est possible de d\u00e9finir le comportement globale du formulaire comme la validation via Ajax ou encore la disposition logique des attributs dans le formulaire.
$GLOBALS['LSobjects']['[nom du type d'LSobject]']['LSform'] = array (\n 'ajaxSubmit' => [bool\u00e9en],\n 'layout' => array (\n // Configuration de la disposition logique des attributs\n ),\n 'dataEntryForm' => array (\n // Configuration des masques de saisie\n )\n\n);\n
ajaxSubmit
Bool\u00e9en d\u00e9finissant si le formulaire sera envoy\u00e9 via une requ\u00eate Ajax plut\u00f4t qu'\u00e0 travers un rafra\u00eechissement de la page. Par d\u00e9faut : True
.
layout
Tableau contenant la configuration de l'affichage du formulaire : il est possible de d\u00e9finir la disposition des attributs dans le formulaire en les regroupant dans des onglets et en les faisant appara\u00eetre dans un ordre logique. Voir la section concern\u00e9e.
dataEntryForm
Tableau contenant la configuration des masques de saisie : il est possible de d\u00e9finir des masques de saisie pour faire en sorte que lors de la cr\u00e9ation d'un objet, seul un certain nombre d'\u00e9lements soit demand\u00e9 \u00e0 l'utilisateur. Voir la section concern\u00e9e.
La configuration des layout se situe dans la configuration des LSobjects, dans la variable layout
($GLOBALS['LSobjects']['[nom du type d'LSobject]']['LSform']['layout']
). Cette variable est un tableau associatif dont la cl\u00e9 est l'identifiant de l'onglet et dont la valeur associ\u00e9e est la configuration de l'onglet.
$GLOBALS['LSobjects']['[nom du type d'LSobject]']['LSform']['layout'] = array (\n 'onglet1' => array(\n 'label' => '[label de l'onglet]',\n 'img' => 1, // Valeur possible 1 ou 0\n 'args' => array (\n 'arg1',\n 'arg2',\n ...\n )\n ),\n ...\n);\n
label
Le label de l'onglet.
img
Affiche ou non l'image d'un \u00e9ventuel attribut de type HTML LSattr_html_image.
args
Tableau associatif contenant une liste ordonn\u00e9e des attributs qui appara\u00eetront dans l'onglet.
Important
Lorsqu'un layout est d\u00e9fini, celui-ci est \"suivi \u00e0 la lettre\" pour l'affichage du LSform. Ainsi, si un attribut est d\u00e9fini dans la configuration de l'objet comme pr\u00e9sent dans le LSform courant, mais que celui-ci n'est pas pr\u00e9sent dans le layout, il ne sera pas du tout affich\u00e9.
"},{"location":"conf/LSobject/LSform/#configuration-des-masques-de-saisie","title":"Configuration des masques de saisie","text":"La configuration des masques de saisie (dataEntryForm) se situe dans la configuration des LSobjects, dans la variable dataEntryForm
($GLOBALS['LSobjects']['[nom du type d'LSobject]']['LSform']['dataEntryForm']
). Cette variable est un tableau associatif dont la cl\u00e9 est l'identifiant du masque de saisie et dont la valeur associ\u00e9e est sa configuration.
$GLOBALS['LSobjects']['[nom du type d'LSobject]']['LSform']['dataEntryForm'] = array (\n 'masque1' => array(\n 'label' => '[label du masque de saisie]',\n 'disabledLayout' => [booleen],\n 'displayedElements' => array (\n 'attr1',\n 'attr2',\n ...\n ),\n 'defaultValues' => array (\n 'attr3' => [value],\n 'attr4' => [value],\n ...\n ),\n 'requiredAllAttributes' => [booleen],\n 'requiredAttributes' => array (\n 'attr1',\n 'attr2',\n ...\n ),\n 'forceGeneration' => array (\n 'attr1',\n 'attr2',\n ...\n ),\n ),\n ...\n);\n
label
Le label du masque de saisie.
disabledLayout
Active ou non les layouts pour ce masque de saisie.
displayedElements
Tableau contenant la liste des attributs qui devront \u00eatre saisie dans le masque de saisie.
defaultValues
Tableau associatif contenant la liste des valeurs par d\u00e9faut des attributs. Les valeurs multiples sont possibles en utilisant des tableaux.
Important
Les valeurs seront vue comme des valeurs retourn\u00e9es par le formulaire et non comme des valeurs des attribus LDAP eux-m\u00eame. Ainsi et par exemple, un attribut trait\u00e9 comme un bool\u00e9en dans un formulaire pourra prendre comme valeur par d\u00e9faut yes
ou no
.
requiredAttributes
Tableau contenant la liste des attributs obligatoires du masque de saisie. Cette liste d'attributs obligatoires viendra en compl\u00e9ment de la configuration des attributs. Il est ainsi possible de rendre des attributs obligatoires durant la saisie d'un masque tout en les laissant facultatif le reste du temps.
requiredAllAttributes
Si ce parametre vaut True
, tout les attributs du masque de saisie seront tous obligatoires de la m\u00eame mani\u00e8re qu'avec le param\u00e8tre requiredAttributes
.
forceGeneration
Tableau contenant la liste des attributs dont la g\u00e9n\u00e9ration sera forc\u00e9e lors de la validation du formation.
Cette section d\u00e9crit la mani\u00e8re de configurer les relations entre les LSobjects appel\u00e9es LSrelation.
Dans le cadre d'une liaison d\u00eete simple, c'est \u00e0 dire une liaison au travers la valeur d'un attribut qui fera directement r\u00e9f\u00e9rence \u00e0 un autre objet (DN ou la premi\u00e8re valeur d'un attribut de r\u00e9f\u00e9rence), pourra \u00eatre configur\u00e9e simplement en sp\u00e9cifiant l'attribut de liaison et le type de valeur qu'il contient. Dans le cas d'une liaison plus complexe, il sera possible de d\u00e9velopper vous m\u00eame des m\u00e9thodes de mise en relation.
$GLOBALS['LSobjects']['[nom du type d'LSobject]']['LSrelation'] = array (\n 'relation1' => array(\n 'label' => '[label de la relation]',\n 'emptyText' => \"[texte affich\u00e9 si aucune relation avec d'autres objets\n n'existe pour l'objet courant]\",\n 'LSobject' => '[le type d'LSobjet en relation]',\n 'display_name_format' => '[LSformat du nom d'affichage des LSobjet en relation]',\n 'canEdit_attribute' => '[nom d'attribut]',\n\n // Liaison simple\n 'linkAttribute' => '[attribut de liaison]',\n 'linkAttributeValue' => '[valeur de l'attribut de liaison]',\n 'linkAttributeOtherValues' => array('[autres valeurs possible de l'attribut de liaison]', [...]),\n\n // Liaison complexe\n 'list_function' => '[m\u00e9thode1]',\n 'getkeyvalue_function' => '[methode2]',\n 'update_function' => '[methode3]',\n 'remove_function' => '[methode4]',\n 'rename_function' => '[methode5]',\n 'canEdit_function' => '[methode6]',\n\n 'rights' => array(\n 'LSprofile1' => 'r',\n 'LSprofile2' => 'w',\n ...\n )\n )\n);\n
label
Le label de la relation.
emptyText
Le texte \u00e0 afficher pour d\u00e9crire le fait que l'objet courant n'a aucune relation d'\u00e9tablie avec d'autres LSobjects. Exemple (au sujet d'un utilisateur) : N'appartient \u00e0 aucun groupe.
LSobject
Le type d'LSobject en relation avec le type courant. (Facultatif en cas de liaison complexe)
display_name_format
LSformat du nom d'affichage des objets en relation.
canEdit_attribute
Le nom de l'attibut du type d'LSobject en relation devant \u00eatre \u00e9ditable par l'utilisateur pour que celui-ci puisse modifier la relation. Dans le cadre d'une relation simple, celui-ci peut, si n\u00e9cessaire, \u00eatre diff\u00e9rent du param\u00e8tre linkAttribute
.
linkAttribute
Dans le cadre d'une relation simple, il s'agit de l'attribut de liaison du type d'LSobject en relation avec le type courant, c'est \u00e0 dire l'attribut dans lequel on retrouve une valeur en relation avec l'objet courant. (Facultatif en cas de liaison complexe)
linkAttributeValue
Dans le cadre d'une relation simple, il s'agit du type de valeur prisent par l'attribut de liaison du type d'LSobject en relation avec le type courant. Il peut s'agir du mot cl\u00e9 dn
si l'attribut de liaison contient le DN de l'objet courant ou bien le nom d'un attribut du type d'objet courant dont la premi\u00e8re valeur sera stock\u00e9e par l'attribut de liaison. (Facultatif en cas de liaison complexe)
linkAttributeOtherValues
Dans le cadre d'une relation simple, il s'agit d'autres types de valeur possiblement prisent par l'attribut en plus de celui d\u00e9fini par le param\u00e8tre linkAttributeValue
. Ce param\u00e8tre ne sert qu'a d\u00e9tecter des liaisons \u00e9tablies \u00e0 l'aide de valeurs autres que celle relative au param\u00e8tre linkAttributeValue
: en cas de nouvelle liaison, c'est la valeur associ\u00e9e \u00e0 ce dernier qui sera utilis\u00e9e pour \u00e9tablir la liaison. (Facultatif en cas de liaison complexe)
list_function
La m\u00e9thode de la classe du type d'LSobject en relation, permettant de lister les objets de ce type en relation avec l'objet courant. (Facultatif en cas de liaison simple)
getkeyvalue_function
La m\u00e9thode de la classe du type d'LSobject en relation, permettant d'obtenir la valeur cl\u00e9 \u00e0 stocker pour \u00e9tablir la relation entre l'objet courant et d'autres objets du type concern\u00e9. (Facultatif en cas de liaison simple)
update_function
La m\u00e9thode de la classe du type d'LSobject en relation, permettant de mettre \u00e0 jour les relations existantes entre l'objet courant et les objets du type concern\u00e9. Cette liste d'objets en relation est \u00e9tablie par l'utilisateur \u00e0 travers l'interface. (Facultatif en cas de liaison simple)
remove_function
La m\u00e9thode de la classe du type d'LSobject en relation permettant de supprimer une relation existante entre l'objet courant et un objet du type concern\u00e9. (Facultatif en cas de liaison simple)
rename_function
La m\u00e9thode de la classe du type d'LSobject en relation permettant d'effectuer les actions n\u00e9cessaires lorsque l'objet courant est renomm\u00e9 dans le but de maintenir les valeurs cl\u00e9s permettant d'\u00e9tablir les relations entre l'objet courant et les objets en relation avec lui. (Facultatif en cas de liaison simple)
canEdit_function
La m\u00e9thode de la classe du type d'LSobject en relation permettant de v\u00e9rifier que l'utilisateur \u00e0 le droit de modifier la relation avec un objet en particulier. (Facultatif en cas de liaison simple)
rights
Tableau associatif dont les cl\u00e9s sont les noms des LSprofiles ayant des droits sur cette relation et dont les valeurs associ\u00e9es sont les droits correspondants. La valeur des droits d'un LSprofile peut \u00eatre r
pour le droit de lecture ou w
pour le droit de lecture-\u00e9criture.Par d\u00e9faut, un LSprofile n'a aucun droit.
Cette section d\u00e9crit la mani\u00e8re de param\u00e9trer les recherches dans l'annuaire pour un type d'LSobject donn\u00e9.
La configuration des LSsearch se situe dans la configuration des LSobjects, dans la variable LSsearch
($GLOBALS['LSobjects']['[nom du type d'LSobject]']['LSsearch']
).
$GLOBALS['LSobjects']['[nom du type d'LSobject]']['LSsearch'] = array (\n 'attrs' => array(\n 'attr1',\n 'attr2',\n ...\n 'attr3' => array(\n 'searchLSformat' => '[LSformat]',\n 'approxLSformat' => '[LSformat]',\n ),\n ...\n ),\n 'params' => array(\n // Param\u00e8tres de la recherche\n 'pattern' => '[string]',\n 'sizelimit' => [integer],\n 'recursive' => [boolean],\n 'approx' => [boolean],\n 'withoutCache' => [boolean],\n 'onlyAccessible' => [boolean],\n // Param\u00e8tres de tri\n 'sortBy' => [displayName|subDn],\n 'sortDirection' => [ASC|DESC],\n 'sortlimit' => [integer],\n // Param\u00e8tre d'affichage\n 'displayFormat' => [LSformat],\n 'nbObjectsByPage' => [integer],\n 'nbObjectsByPageChoices' => array([integer], [integer], ...),\n 'validPatternRegex' => '[regex]'\n ),\n 'predefinedFilters' => array(\n 'filter1' => 'label filter1',\n 'filter2' => 'label filter2'\n ),\n 'extraDisplayedColumns' => array(\n 'col1' => array(\n 'label' => 'label column 1',\n 'LSformat' => '[LSformat]'\n ),\n 'col2' => array(\n 'label' => 'label column 2',\n 'generateFunction' => '[fonction de g\u00e9n\u00e9ration]',\n 'additionalAttrs' => array('[attr1]', '[attr2]', ...),\n 'escape' => [bool\u00e9en],\n ),\n 'col3' => array(\n 'label' => 'label column 3',\n 'LSformat' => '[LSformat]',\n 'alternativeLSformats' => array (\n '[LSformat 1]',\n '[LSformat 2]'\n ),\n 'formaterLSformat' => '[LSformat]',\n 'formaterFunction' => '[fonction de formatage]',\n 'cssStyle' => '[CSS style]',\n 'visibleTo' => array (\n '[LSprofile 1]',\n '[LSprofile 2]'\n )\n ),\n ),\n 'customActions' => array (\n // Configuration des customActions pour les recherches de ce type d'objet\n ),\n 'showSelectionBoxes' => [boolean],\n);\n
attrs
Tableau listant les attributs pouvant \u00eatre utilis\u00e9s dans les filtres de recherche LDAP employ\u00e9s par LdapSaisie. Lorsqu'un motif de recherche est pass\u00e9 par l'utilisateur, LdapSaisie composera un filtre LDAP \u00e0 partir de cette liste.
Lors d'une recherche non-approximative, le filtre de recherche sera compos\u00e9 (par d\u00e9faut) de la mani\u00e8re suivante :
(|(attr1=*motif*)(attr2=*motif*)...)\n
Lors d'une recherche approximative, le filtre de recherche sera compos\u00e9 (par d\u00e9faut) de la mani\u00e8re suivante :
(|(attr1=~motif)(attr2~=motif)...)\n
Il est \u00e9galement possible de param\u00e9trer la mani\u00e8re dont sera compos\u00e9 le filtre de recherche attribut par attribut \u00e0 l'aide des param\u00e8tres searchLSformat
et approxLSformat
.
Important
Ces filtres, une fois compos\u00e9s, sont ins\u00e9r\u00e9s dans un autre, filtrant en plus sur les ObjectClass du type d'LSobject de la mani\u00e8re suivante :
(& (&(objectclass=oc1)(objectclass=oc2)) (filtre) )\n
searchLSformat
Ce param\u00e8tre est un LSformat permettant de d\u00e9finir, attribut par attribut, comment le filtre de recherche LDAP est compos\u00e9 \u00e0 partir d'un motif de recherche et en cas de recherche non-approximative.
Ce LSformat est compos\u00e9 \u00e0 l'aide des \u00e9l\u00e9ments name
, le nom de l'attribut et pattern
, le motif de recherche.
(%{name}=%{pattern})\n
Important
Le filtre d\u00e9duit doit obligatoirement commencer par (
et se terminer par )
.
approxLSformat
Ce param\u00e8tre est un LSformat permettant de d\u00e9finir, attribut par attribut, comment le filtre de recherche LDAP est compos\u00e9 \u00e0 partir d'un motif de recherche et en cas de recherche approximative.
Ce LSformat est compos\u00e9 \u00e0 l'aide des \u00e9l\u00e9ments name
, le nom de l'attribut et pattern
, le motif de recherche.
(%{name}=~%{pattern})\n
Important
Le filtre d\u00e9duit doit obligatoirement commencer par (
et se terminer par )
.
params
Tableau des param\u00e8tres par d\u00e9faut d'une recherche. Ce tableau contient les param\u00e8tres qui seront utilis\u00e9s pour initialis\u00e9 une recherche. Ces param\u00e8tres pourront \u00eatre red\u00e9fini par l'utilisateur ou par l'application en fonction du contexte dans lequel cette recherche est effectu\u00e9e.
pattern
Mot cl\u00e9 de la recherche.
sizelimit
Entier determinant le nombre maximum d'objet pouvant \u00eatre retourn\u00e9s dans une recherche.
recursive
Bool\u00e9en d\u00e9terminant si la recherche r\u00e9cursive est activ\u00e9e.
approx
Bool\u00e9en d\u00e9terminant si la recherche approximative est activ\u00e9e.
withoutCache
Bool\u00e9en d\u00e9terminant si le cache de recherche doit \u00eatre utilis\u00e9.
onlyAccessible
Bool\u00e9en d\u00e9terminant si seul les objets accessibles \u00e0 l'utilisateur connect\u00e9 doivent \u00eatre retourn\u00e9s par la recherche.
sortBy
Mot cl\u00e9 d\u00e9terminant sur quel valeur/colonne le r\u00e9sultat de recherche sera tri\u00e9.
Valeurs possibles : displayName
, subDn
ou NULL
.
sortDirection
Mot cl\u00e9 d\u00e9terminant le sens du trie du r\u00e9sultat de la recherche.
Valeurs possibles : ASC
, DESC
ou NULL
.
sortlimit
Entier determinant le nombre maximum d'objet pouvant \u00eatre tri\u00e9s dans le r\u00e9sultat d'une recherche.
displayFormat
LSformat d'affichage du nom de l'objet dans le r\u00e9sultat de la recherche.
nbObjectsByPage
Entier d\u00e9terminant le nombre d'objet maximum affich\u00e9s dans une page de r\u00e9sultat de la recherche.
nbObjectsByPageChoices
Tableau des choix propos\u00e9s \u00e0 l'utilisateur pour le nombre d'objets maximum affich\u00e9s dans une page de r\u00e9sultat de la recherche.
validPatternRegex
Expression r\u00e9guli\u00e8re de validation des mots cl\u00e9s de recherche pour ce type d'LSobject.
(Par d\u00e9faut : /^[\\w\\-_\\\\\\'\\\"^[]\\(\\){}\\=\\+\\\u00a3\\%\\$\\\u20ac\\.\\:\\;\\,\\?\\/\\@]+$/iu
)
predefinedFilters
Tableau associatif contenant des filtres pr\u00e9d\u00e9finis pour la recherche. Les cl\u00e9s sont les filtres au format LDAP et les valeurs sont les labels associ\u00e9s.
extraDisplayedColumns
Tableau associatif contenant des colonnes suppl\u00e9mentaires \u00e0 afficher dans les r\u00e9sultats de recherche. Les cl\u00e9s sont les identifiants des colonnes suppl\u00e9mentaires et les valeurs sont leur configuration d\u00e9finie \u00e0 partir des param\u00e8tres suivant :
label
Le label de la colonne.
LSformat
Le LSformat d'affichage de la colonne. Ce format est compos\u00e9 \u00e0 partir des attributs des objets LDAP dans leur format brut.
alternativeLSformats
Tableau des LSformats alternatifs \u00e0 utiliser si le r\u00e9sultat du format principal est vide. Les formats d\u00e9finis dans cette liste sont essay\u00e9s les uns apr\u00e8s les autres et le premier LSformat retournant une valeur non-vide est utilis\u00e9.
formaterLSformat
LSformat optionnel permettant de mettre en forme le r\u00e9sultat obtenu des LSformats pr\u00e9c\u00e9dents. Ce LSformat ne sera utilis\u00e9 que si le r\u00e9sultat obtenu pr\u00e9c\u00e9dement n'est pas vide. Il est ainsi possible d'utiliser les param\u00e8tres LSformat
et alternativeLSformats
afin de r\u00e9cup\u00e9rer la valeur \u00e0 afficher, puis de la mettre en forme gr\u00e2ce \u00e0 ce LSformat. Ce format est compos\u00e9 \u00e0 partir des attributs des objets LDAP dans leur format brut et de la valeur retourn\u00e9s pr\u00e9cedement accessible via la variable val
.
formaterFunction
Le nom d'une fonction optionnelle \u00e0 ex\u00e9cuter pour mettre en forme le r\u00e9sultat obtenu des LSformats pr\u00e9c\u00e9dents. Cette fonction ne sera appel\u00e9e que si le r\u00e9sultat obtenu pr\u00e9c\u00e9dement n'est pas vide. La fonction prendra en param\u00e8tre la valeur \u00e0 mettre en forme et retournera la valeur mise en forme.
generateFunction
Le nom d'une fonction qui sera utilis\u00e9e pour g\u00e9n\u00e9rer la valeur d'affichage de cette colonne. La fonction prendra en param\u00e8tre une r\u00e9f\u00e9rence de l'objet LSsearchEntry
et retournera la valeur de la colonne.
additionalAttrs
Un tableau de nom d'attributs \u00e0 inclure dans le resultat de la recherche LDAP. Ce tableau permet notamment d'inclure les attributs n\u00e9cessaires au bon fonctionnement de la fonction generateFunction
.
escape
Ce param\u00e8tre bool\u00e9en permet de d\u00e9finir si, lors de l'affichage, le contenu de la colonne doit \u00eatre transform\u00e9 pour prot\u00e9ger les caract\u00e8res \u00e9ligibles en entit\u00e9s HTML. Par d\u00e9faut, ce param\u00e8tre est True
.
Warning
Cette fonctionnalit\u00e9 existe pour des raisons de s\u00e9curit\u00e9 et notamment en protection des failles XSS
. Si vous d\u00e9sactivez cette fonctionnalit\u00e9, il est important de g\u00e9rer la probl\u00e9matique de s\u00e9curit\u00e9 par ailleurs.
cssStyle
Ce param\u00e8tre permet de d\u00e9finir un style CSS personnalis\u00e9 pour la colonne. S'il est d\u00e9fini, le contenu de ce param\u00e8tre sera ajout\u00e9 en tant qu'attribut style
des balises th
et td
de la colone.
visibleTo
Ce param\u00e8tre permet de restreindre la visibilit\u00e9 de cette colonne aux seuls LSprofiles sp\u00e9cifi\u00e9s. S'il est omis, la colonne sera visible pour tous.
customActions
Tableau associatif contenant les param\u00e8tres de configuration des customActions. Voir la section concern\u00e9e.
showSelectionBoxes
Bool\u00e9en permettant de d\u00e9finir si les cases \u00e0 cocher de s\u00e9lections des objets doivent \u00eatre affich\u00e9es. Lorsqu'elles sont affich\u00e9es, l'utilisateur pourra s\u00e9lectionner un ou plusieurs objets dans la liste avant de d\u00e9clencher une customAction. Dans ce cas, les DNs de ces objets seront pass\u00e9s \u00e0 la page d'ex\u00e9cution de la customAction via le param\u00e8tre selected
.
Cette section d\u00e9crit la mani\u00e8re de configurer les actions personnalis\u00e9es ex\u00e9cutables sur les recherches d'LSobjects appel\u00e9es customActions.
$GLOBALS['LSobjects']['[nom du type d'LSobject]']['LSsearch']['customActions'] = array (\n 'action1' => array(\n 'label' => '[label l'action]',\n 'hideLabel' => '[bool\u00e9en]',\n 'icon' => '[nom de l'ic\u00f4ne de l'action]',\n 'function' => '[fonction \u00e0 ex\u00e9cuter]',\n 'question_format' => '[LSformat de la question de confirmation]',\n 'onSuccessMsgFormat' => '[LSformat du message \u00e0 afficher en cas de succ\u00e8s de l'action]',\n 'disableOnSuccessMsg' => '[bool\u00e9en]',\n 'noConfirmation' => '[bool\u00e9en]',\n 'redirectToObjectList' => '[bool\u00e9en]',\n 'rights' => array(\n 'LSprofile1',\n 'LSprofile2',\n ...\n )\n )\n);\n
label
Le label de l'action.
hideLabel
Cache le label dans le bouton de l'action.
icon
Nom de l'\u00eecone \u00e0 afficher dans le bouton de l'action. Ce nom correspond au nom du fichier de l'image (sans l'extention) qui devra se trouver dans le dossier /src/images/[nom du theme d'images]/
ou dans le dossier src/local/images
.
function
Le nom de la fonction \u00e0 ex\u00e9cuter qui impl\u00e9mente l'action personnalis\u00e9e Cette fonction prendra en seule param\u00e8tre l'objet LSsearch. sur lequel l'action devra \u00eatre ex\u00e9cut\u00e9e et retournera True
en cas de succ\u00e8s ou False
en cas d'\u00e9chec d'ex\u00e9cution de la fonction.
question_format
Le LSformat de la question de confirmation d'ex\u00e9cution de l'action. Ce LSformat sera compos\u00e9 \u00e0 l'aide du label de l'action.
onSuccessMsgFormat
Le LSformat du message \u00e0 afficher en cas de succ\u00e8s d'ex\u00e9cution de l'action. Ce LSformat sera compos\u00e9 \u00e0 l'aide du label de l'action.
disableOnSuccessMsg
Bool\u00e9en permetant de d\u00e9sactiver le message afficher en cas de succ\u00e8s d'ex\u00e9cution de l'action.
noConfirmation
Bool\u00e9en permetant de d\u00e9sactiver la confirmation de l'ex\u00e9cution de l'action.
redirectToObjectList
Bool\u00e9en permetant de rediriger ou non l'utilisateur vers la liste des objets (Vrai par d\u00e9faut). Si l'utilisateur n'est redirig\u00e9, le template par d\u00e9faut (ou celui d\u00e9fini durant l'\u00e9x\u00e9cution de la fonction) sera affich\u00e9.
rights
Tableau contenant la liste des noms des LSprofiles ayant le droit d'ex\u00e9cuter cette action.
Une fonction impl\u00e9mentant une customAction se d\u00e9clare de la mani\u00e8re suivante :
/*\n * Ma fonction impl\u00e9mentant ma customAction\n *\n * Param\u00e8tre :\n * - $search : L'objet LSsearch de la recherche sur lequel mon action doit \u00eatre ex\u00e9cut\u00e9e\n *\n * Valeurs retourn\u00e9es :\n * - True : Tout s'est bien pass\u00e9\n * - False : Une erreur est survenue\n */\nfunction maFonction ($search) {\n\n // Actions\n\n}\n
Cette fonction doit prendre pour seul param\u00e8tre, l'objet LSsearch. sur lequel l'action personnalis\u00e9e doit \u00eatre ex\u00e9cut\u00e9e et doit retourner soit True
si tout s'est bien pass\u00e9, soit False
en cas de probl\u00e8me.
Important
La recherche pass\u00e9e en param\u00e8tre n'a pas encore \u00e9t\u00e9 ex\u00e9cut\u00e9e. En cons\u00e9quence, si vous avez besoin d'acc\u00e9der au r\u00e9sultat de la recherche, il est n\u00e9cessaire d'ex\u00e9cuter au pr\u00e9alable : $search -> run();
. Cela permet en outre, de modifier les param\u00e8tres de la recherche avant de l'ex\u00e9cuter. Cela peut par exemple \u00eatre utile, si vous avez besoin d'acc\u00e8der aux valeurs d'attributs particuliers, d'ajouter des attributs au r\u00e9sultat de la recherche :
$search -> setParam('attributes',array('attr1','attr2'));\n
Note
Ces fonctions sont le plus couramment d\u00e9finies au sein d'LSaddon.
"},{"location":"conf/LSobject/container_auto_create/","title":"Cr\u00e9ation automatique du conteneur des LSobjets dans un subDn","text":"Cette section d\u00e9crit la mani\u00e8re de configurer la cr\u00e9ation automatique des conteneurs des LSobjets. Si le basedn correspondant \u00e0 la branche de stockage des LSobjects n'existe pas, LdapSaisie tentera de le cr\u00e9er \u00e0 partir de la configuration de la variable $GLOBALS['LSobjects']['[nom du type d'LSobject]']['container_auto_create']
.
$GLOBALS['LSobjects']['[nom du type d'LSobject]']['container_auto_create'] = array (\n 'objectclass' => array(\n 'objectclass1',\n 'objectclass2',\n ...\n ),\n 'attrs' => array(\n 'attr1' => 'val1',\n 'attr2' => array(\n 'val2',\n 'val3',\n ...\n ),\n ...\n )\n);\n
objectclass
La liste des objectclass de l'objet conteneur.
attrs
Un tableau associatif dont les cl\u00e9s sont les noms des attributs de l'objet conteneur \u00e0 d\u00e9finir et dont les valeurs associ\u00e9es sont la/les valeur(s) de ces attributs.
Cette section d\u00e9crit la mani\u00e8re de configurer les actions personnalis\u00e9es ex\u00e9cutables sur les LSobjects appel\u00e9es customActions.
$GLOBALS['LSobjects']['[nom du type d'LSobject]']['customActions'] = array (\n 'action1' => array(\n 'label' => '[label l'action]',\n 'hideLabel' => '[bool\u00e9en]',\n 'helpInfo' => '[label d'aide]',\n 'icon' => '[nom de l'ic\u00f4ne de l'action]',\n 'function' => '[fonction \u00e0 ex\u00e9cuter]',\n 'question_format' => '[LSformat de la question de confirmation]',\n 'onSuccessMsgFormat' => '[LSformat du message \u00e0 afficher en cas de succ\u00e8s de l'action]',\n 'disableOnSuccessMsg' => '[bool\u00e9en]',\n 'noConfirmation' => '[bool\u00e9en]',\n 'redirectToObjectList' => '[bool\u00e9en]',\n 'noRedirect' => '[bool\u00e9en]',\n 'rights' => array(\n 'LSprofile1',\n 'LSprofile2',\n ...\n )\n )\n);\n
label
Le label de l'action.
hideLabel
Cache le label dans le bouton de l'action.
helpInfo
Le label du message d'aide qui sera affich\u00e9 au survole du bouton de l'action.
icon
Nom de l'\u00eecone \u00e0 afficher dans le bouton de l'action. Ce nom correspond au nom du fichier de l'image (sans l'extention) qui devra se trouver dans le dossier src/images/[nom du theme d'images]/
ou dans le dossier src/local/images
.
function
Le nom de la fonction \u00e0 ex\u00e9cuter qui impl\u00e9mente l'action personnalis\u00e9e Cette fonction prendra en seule param\u00e8tre le LSobject sur lequel l'action devra \u00eatre ex\u00e9cut\u00e9e et retournera True
en cas de succ\u00e8s ou False
en cas d'\u00e9chec d'ex\u00e9cution de la fonction.
question_format
Le LSformat de la question de confirmation d'ex\u00e9cution de l'action. Ce LSformat sera compos\u00e9 \u00e0 l'aide du nom de l'objet.
onSuccessMsgFormat
Le LSformat du message \u00e0 afficher en cas de succ\u00e8s d'ex\u00e9cution de l'action. Ce LSformat sera compos\u00e9 \u00e0 l'aide du nom de l'objet.
disableOnSuccessMsg
Bool\u00e9en permetant de d\u00e9sactiver le message afficher en cas de succ\u00e8s d'ex\u00e9cution de l'action.
noConfirmation
Bool\u00e9en permetant de d\u00e9sactiver la confirmation de l'ex\u00e9cution de l'action.
redirectToObjectList
Bool\u00e9en permetant de rediriger l'utilisateur vers la liste des objets plut\u00f4t que sur la fiche de l'objet apr\u00e8s l'execution de l'action.
noRedirect
Bool\u00e9en permetant de d\u00e9sactiver la redirection de l'utilisateur apr\u00e8s l'execution de l'action. Cela permet \u00e0 la fonction de d\u00e9finir son propre fichier de template de retour et donc d'afficher une page personnalisable.
rights
Tableau contenant la liste des noms des LSprofiles ayant le droit d'ex\u00e9cuter cette action.
Une fonction impl\u00e9mentant une customAction se d\u00e9clare de la mani\u00e8re suivante :
/*\n * Ma fonction impl\u00e9mentant ma customAction\n *\n * Param\u00e8tre :\n * - $object : Le LSobject sur lequel mon action doit \u00eatre ex\u00e9cut\u00e9e\n *\n * Valeurs retourn\u00e9es :\n * - True : Tout s'est bien pass\u00e9\n * - False : Une erreur est survenue\n */\nfunction maFonction ($object) {\n\n // Actions\n\n}\n
Cette fonction doit prendre pour seul param\u00e8tre, le LSobject sur lequel l'action personnalis\u00e9e doit \u00eatre ex\u00e9cut\u00e9e et doit retourner soit True
si tout s'est bien pass\u00e9, soit False
en cas de probl\u00e8me.
Note
Ces fonctions sont le plus couramment d\u00e9finies au sein d' LSaddon.
"},{"location":"conf/LSobject/ioFormat/","title":"Les formats d'import/export (ioFormat)","text":"Cette section d\u00e9crit la mani\u00e8re de param\u00e9trer les formats d'import/export pour un type d' LSobject donn\u00e9.
La configuration des ioFormats se situe dans la configuration des LSobjects, dans la variable ioFormat
($GLOBALS['LSobjects']['[nom du type d'LSobject]']['ioFormat']
). Cette variable est un tableau associatif dont la cl\u00e9 est l'identifiant du format et dont la valeur associ\u00e9e est la configuration du format.
Important
Le moteur d'importation simule la validation d'un formulaire de cr\u00e9ation du type d'LSobject (ou de modification en cas d'activation du mode mise \u00e0 jour uniquement, voir ci-dessous). En cons\u00e9quence :
yes
ou no
.$GLOBALS['LSobjects']['[nom du type d'LSobject]']['ioFormat'] = array (\n '[ioFormat ID]' => array (\n 'label' => '[Label du type de fichier]',\n 'driver' => '[Pilote d'ioFormat utilis\u00e9]',\n 'driver_options' => array([Options du pilote d'ioFormat utilis\u00e9]),\n 'update_only' => '[Bool\u00e9en]',\n 'fields => array (\n '[champ 1]' => '[attribut 1]',\n '[champ 2]' => '[attribut 2]',\n [...]\n ),\n 'generated_fields' => array (\n '[attribute 3]' => '[LSformat]',\n '[attribute 4]' => array('[LSformat1]', '[LSformat2]', ...)\n '[attribute 5]' => function($attrs, $row) {\n return array([...]);\n },\n [...]\n ),\n 'before_import' => array('function1', 'function2'),\n 'after_import' => 'function3',\n ),\n [...]\n);\n
label
Le label du format
driver
Le pilote a utilis\u00e9 pour ce format. Le pilote permet de g\u00e9r\u00e9r la lecture et l'\u00e9criture dans un type de fichier d'import/export. Pour plus d'information sur les pilotes disponibles, Voir la section concern\u00e9e.
driver_options
Tableau associatif des options du pilote utilis\u00e9 pour ce format. Pour plus d'informations, consulter la documentation du pilote utilis\u00e9.
update_only
Bool\u00e9en permettant d'activer le mode mise \u00e0 jour uniquement pour ce format. Dans ce mode, les donn\u00e9es de l'objet LDAP correspondant seront charg\u00e9es depuis l'annuaire avant toutes validations des donn\u00e9es fournies dans le fichier d'import, et ce, dans un formulaire de modifications et non pas un formulaire de cr\u00e9ation autrement. Pour que cela soit possible, il est indispensable que le DN de l'objet puisse \u00eatre d\u00e9duit depuis les donn\u00e9es fournies dans le fichier d'import. Pour cela, vous pouvez le fournir via un champ du fichier d'import associ\u00e9 \u00e0 la cl\u00e9 dn
ou \u00e0 d\u00e9faut il sera g\u00e9n\u00e9r\u00e9 \u00e0 partir du RDN dont la valeur devra \u00eatre fournie dans le fichier d'import. Vous pouvez \u00e9galement le g\u00e9n\u00e9rer via le param\u00e8tre generated_fields
(voir ci-dessous).
fields
Tableau associatif permettant d'associer un champ du fichier source (la cl\u00e9) avec attribut de l'objet LDAP (la valeur). Il est \u00e9galement possible d'associ\u00e9 un champ avec la valeur dn
pour fournir le DN de l'objet en mode mise \u00e0 jour uniquement (voir ci-dessus).
generated_fields
Tableau associatif permettant de d\u00e9finir soit des LSformats, soit un callable (au sens PHP) pour g\u00e9n\u00e9rer les valeurs d'attributs automatiquement. Ce tableau contient en cl\u00e9, le nom de l'attribut \u00e0 g\u00e9n\u00e9rer (ou dn
pour la g\u00e9n\u00e9ration du DN de l'objet en mode mise \u00e0 jour uniquement), et en valeur associ\u00e9e, un ou plusieurs LSformat ou un callable \u00e0 utiliser pour g\u00e9n\u00e9rer ses valeurs. En cas de LSformat, ils seront compos\u00e9s \u00e0 l'aide des valeurs des autres attributs de l'objet. En cas d'un callable, il sera appeler avec en param\u00e8tre le tableau des valeurs des autres attributs ($attrs
), le tableau des donn\u00e9es issues du fichier source ($row
) et devra retourner le tableau des valeurs g\u00e9n\u00e9r\u00e9es de l'attribut ou false
en cas d'erreur.
before_import
Cha\u00eene de caract\u00e8res (ou tableau de cha\u00eene de caract\u00e8res) correspondant au nom d'une ou plusieurs fonctions qui seront ex\u00e9cut\u00e9es avant chaque import. Voir la section concern\u00e9e
after_import
Cha\u00eene de caract\u00e8res (ou tableau de cha\u00eene de caract\u00e8res) correspondant au nom d'une ou plusieurs fonctions qui seront ex\u00e9cut\u00e9es apr\u00e8s chaque import. Voir la section concern\u00e9e
Cette section d\u00e9crit la mani\u00e8re de configurer les pilotes d'ioFormat utilis\u00e9s lors des imports/exports d'LSobjects.
"},{"location":"conf/LSobject/ioFormat/#pilote-de-fichiers-csv","title":"Pilote de fichiers CSV","text":"Ce pilote permet de g\u00e9rer l'import/export de LSobject \u00e0 partir d'un fichier CSV
. Depuis la version 4 d'LdapSaisie, ce pilote utilise les fonctions standards fgetcsv()
et fputcsv
fournis par PHP. Avant cela, la classe PEAR File_CSV_DataSource \u00e9tait utilis\u00e9e. Par d\u00e9faut, les param\u00e8tres de lecture et d'\u00e9criture des fichiers sont : la virgule sert de d\u00e9limiteur, le caract\u00e8re \"
peut \u00eatre utilis\u00e9 pour encadrer les valeurs des champs et la longueur maximale d'une ligne est infini. Ces param\u00e8tres peuvent \u00eatre modifi\u00e9s en configurant les options du pilote.
$GLOBALS['LSobjects']['[nom du type d'LSobject]']['ioFormat']['[ID ioFormat]']['driver_options'] = array (\n 'delimiter' => '[d\u00e9limiteur]',\n 'enclosure' => '[caract\u00e8re d'encadrement de texte]',\n 'length' => [longueur maximale d'une ligne],\n 'escape' => '[caract\u00e8re d'\u00e9chappement]',\n 'multiple_value_delimiter' => '[d\u00e9limiteur]',\n);\n
delimiter
Le caract\u00e8re utilis\u00e9 pour d\u00e9limiter les champs (Par d\u00e9faut, une virgule).
length
La longueur maximale d'une ligne du fichier. Si z\u00e9ro est sp\u00e9cifi\u00e9, la longueur d'une ligne ne sera pas limit\u00e9, mais la lecture du fichier sera ralentie. (Par d\u00e9faut : 0
)
enclosure
Le caract\u00e8re utilis\u00e9 pour encadrer les valeurs des champs (Par d\u00e9faut : \"
).
escape
Le caract\u00e8re d'\u00e9chappement utilis\u00e9 si un des champs d'une ligne de fichier contient le caract\u00e8re utilis\u00e9 pour encadrer les valeurs. (Par d\u00e9faut : \\
).
Note
Selon la RFC4180, l'echappement du caract\u00e8re utilis\u00e9 pour encadrer les valeurs des champs doit se faire en le doublant. Le caract\u00e8re d\u00e9fini ici est une alternative \u00e0 ce comportement par d\u00e9faut. Pour d\u00e9sactiver ce caract\u00e8re d'\u00e9chappement alternatif, il est possible depuis de la version 7.4.0 de PHP de mettre ici une chaine vide.
multiple_value_delimiter
Le caract\u00e8re utilis\u00e9 pour d\u00e9limiter au sein d'un champs, les valeurs valeurs multiples d'un attribut (Par d\u00e9faut : |
).
Cette section d\u00e9crit la mani\u00e8re de param\u00e9trer des d\u00e9clencheurs afin que LdapSaisie ex\u00e9cute durant ses processus, et \u00e0 des moments bien pr\u00e9cis des traitements d'un ioFormat, des fonctions que vous pourrez d\u00e9velopper vous m\u00eame. De plus, le r\u00e9sultat de l'ex\u00e9cution de vos fonctions pourra influer sur le d\u00e9roulement des processus.
Actuellement, les \u00e9venements suivant sont g\u00e9r\u00e9s :
Nom Description Bloquantbefore_import
Avant l'import. Oui after_import
Apr\u00e8s l'import'. Non Note
Si un \u00e9v\u00e9nement est dit bloquant, lors de l'ex\u00e9cution des actions li\u00e9es, si une des fonctions retourne false
, le processus s'arr\u00eatera.
La configuration des d\u00e9clencheurs se fait dans la d\u00e9finition des types d'ioFormat. Par exemple, pour d\u00e9finir les fonctions \u00e0 ex\u00e9cuter apr\u00e8s l'import des LSobjects de type LSpeople avec son LSioFormat mycsv, c'est \u00e0 dire lors de leur \u00e9v\u00e8nement after_import
, il faut d\u00e9finir la variable suivante :
$GLOBALS['LSobjects']['LSpeople']['ioFormat']['mycsv']['after_import']\n
Cette variable peut contenir soit une chaine de caract\u00e8res correspondant au nom de la fonction \u00e0 ex\u00e9cuter, soit un tableau de cha\u00eenes de caract\u00e8res correspondant aux noms des fonctions \u00e0 ex\u00e9cuter. Il est \u00e9galement possible de mettre ici directement des fonctions anonymes.
"},{"location":"conf/LSobject/ioFormat/#ecriture-dune-fonction","title":"Ecriture d'une fonction","text":"Une fonction ex\u00e9cut\u00e9e par un d\u00e9clencheur d'un ioFormat se d\u00e9clare de la mani\u00e8re suivante :
/*\n * Ma fonction \u00e0 ex\u00e9cuter lors de l'evenement [event]\n *\n * Param\u00e8tres :\n * - $ioFormat : Le LSioFormat sur lequel l'\u00e9v\u00e8nement survient\n * - $data : Les donn\u00e9es de contexte de l'\u00e9v\u00e8nement\n *\n * Valeurs retourn\u00e9es :\n * - True : Tout s'est bien pass\u00e9\n * - False : Une erreur est survenue ou la fonction souhaite bloquer le\n * processus lors d'un \u00e9v\u00e8nement bloquant.\n */\nfunction maFonction (&$ioFormat, &$data) {\n\n // Actions\n\n}\n
Cette fonction doit accepter deux param\u00e8tres, le LSioFormat sur lequel l'\u00e9v\u00e8nement survient et un tableau des donn\u00e9es contextuelles de l'\u00e9v\u00e8nement. Elle doit par ailleurs retourner True
si tout s'est bien pass\u00e9 ou False
en cas de probl\u00e8me. Dans le cas d'un \u00e9v\u00e9nement bloquant, si la fonction retourne False
, le processus est arr\u00eat\u00e9.
Les donn\u00e9es contextuelles de l'\u00e9v\u00e8nement, pass\u00e9es en param\u00e8tre, pourront d\u00e9pendre du contexte et de l'\u00e9v\u00e8nement d\u00e9clencheur, mais pour les moments, il s'agit toujours d'un tableau telque d\u00e9crit ci-dessous :
array(\n 'input_file' => \"[/path/of/import.file]\",\n 'updateIfExists' => [boolean],\n 'justTry' => [boolean],\n 'objectsData' => array(\n [Donn\u00e9es des objets charg\u00e9s depuis le fichier d'import]\n ),\n 'return' => array(\n 'success' => [boolean],\n 'LSobject' => \"[nom du type d'LSobject]\",\n 'ioFormat' => \"[nom du type d'ioFormat]\",\n 'updateIfExists' => [boolean],\n 'justTry' => [boolean],\n 'imported' => array([objets import\u00e9s]),\n 'updated' => array([objets mis \u00e0 jour]),\n 'errors' => array(\n array(\n 'data' => [donn\u00e9es de l'objet import\u00e9 ayant d\u00e9clench\u00e9 l'erreur],\n 'errors' => array (\n 'globals' => array(\"Erreur 1\", [...]),\n 'attrs' => array(\n 'attr1' => array(\"Erreur 1\", [...]),\n [...]\n ),\n ),\n ),\n [...]\n ),\n ),\n)\n
Note
Les cl\u00e9s objectsData
et return
sont des r\u00e9f\u00e9rences. En cas de modification, cela influencera respectivement sur les donn\u00e9es utilis\u00e9es pour l'import et sur le r\u00e9sultat de l'import tel qu'affich\u00e9 dans l'interface.
Cette section d\u00e9crit la mani\u00e8re de param\u00e9trer des d\u00e9clencheurs afin que LdapSaisie ex\u00e9cute durant ses processus, et \u00e0 des moments bien pr\u00e9cis des traitements d'un LSobject, des fonctions que vous pourrez d\u00e9velopper vous m\u00eame. De plus, le r\u00e9sultat de l'ex\u00e9cution de vos fonctions pourra influer sur le d\u00e9roulement des processus.
Actuellement, les \u00e9venements suivant sont g\u00e9r\u00e9s :
Nom Description Bloquantbefore_create
Avant la cr\u00e9ation du LSobject. Oui after_create
Apr\u00e8s la cr\u00e9ation du LSobject. Non before_modify
Avant la modification du LSobject Oui after_modify
Apr\u00e8s la modification du LSobject Non before_rename
Avant de renommer le LSobject Oui after_rename
Apr\u00e8s avoir renomm\u00e9 le LSobject Non before_delete
Avant la suppression du LSobject Oui after_delete
Apr\u00e8s la suppression du LSobject Non Note
Si un \u00e9v\u00e9nement est dit bloquant, lors de l'ex\u00e9cution des actions li\u00e9es, si une des fonctions retourne false
, le processus s'arr\u00eatera.
La configuration des d\u00e9clencheurs se fait dans la d\u00e9finition des types d'LSobjects. Par exemple, pour d\u00e9finir les fonctions \u00e0 ex\u00e9cuter apr\u00e8s la modification des LSobjects de type LSpeople, c'est \u00e0 dire lors de leur \u00e9v\u00e8nement after_modify
, il faut d\u00e9finir la variable suivante :
$GLOBALS['LSobjects']['[nom du type d'LSobject]']['after_modify']\n
Cette variable peut contenir soit une chaine de caract\u00e8res correspondant au nom de la fonction \u00e0 ex\u00e9cuter, soit un tableau de cha\u00eenes de caract\u00e8res correspondant aux noms des fonctions \u00e0 ex\u00e9cuter.
"},{"location":"conf/LSobject/triggers/#ecriture-dune-fonction","title":"\u00c9criture d'une fonction","text":"Une fonction ex\u00e9cut\u00e9 par un d\u00e9clencheur d'un LSobject se d\u00e9clare de la mani\u00e8re suivante :
/*\n * Ma fonction \u00e0 ex\u00e9cuter lors de l'evenement [event]\n *\n * Param\u00e8tre :\n * - $object : Le LSobject sur lequel l'\u00e9v\u00e8nement survient\n *\n * Valeurs retourn\u00e9es :\n * - True : Tout s'est bien pass\u00e9\n * - False : Une erreur est survenue ou la fonction souhaite bloquer le\n * processus lors d'un \u00e9v\u00e8nement bloquant.\n */\nfunction maFonction ($object) {\n\n // Actions\n\n}\n
Cette fonction doit prendre pour seul param\u00e8tre, le LSobject sur lequel l'\u00e9v\u00e8nement survient et doit retourner soit True
si tout s'est bien pass\u00e9, soit False
en cas de probl\u00e8me. Dans le cas d'un \u00e9v\u00e9nement bloquant, si la fonction retourne False
, le processus est arr\u00eat\u00e9.
Cette section d\u00e9crit les options de configuration des attributs des LSobjects. Les attributs sont d\u00e9finis dans le tableau associatif attrs
de la configuration des LSobjects. Dans ce tableau, les cl\u00e9 les noms des attributs et les valeurs li\u00e9s sont la configuration des attributs.
Warning
Contrairement \u00e0 ce qui existe dans le standard LDAP, les noms des attributs sont sensibles \u00e0 la casse. Il faut que le nom des attributs dans LdapSaisie soient scrupuleusement les m\u00eames que ceux retourn\u00e9 par Net_LDAP2
'attrs' => array (\n /* ----------- start -----------*/\n 'attr1' => array (\n 'label' => '[label de l'attr1',\n 'displayAttrName' => '[booleen]',\n 'help_info' => '[Message d'aide sur l'attribut attr1]',\n 'help_info_in_view' => '[booleen]',\n 'ldap_type' => 'ldaptype1',\n 'ldap_options' => array(\n // Options LDAP li\u00e9es au type LDAP de l'attribut\n ),\n 'html_type' => 'htmltype1',\n 'html_options' => array(\n // Options HTML li\u00e9es au type HTML de l'attribut\n ),\n 'no_value_label' => '[No set value label]',\n 'multiple' => 0,\n 'required' => 1,\n 'generate_function' => 'fonction1',\n 'generate_value_format' => '[LSformat]',\n 'default_value' => 'valeur1',\n 'set_default_value_on_creation_if_empty' => [booleen],\n 'force_generation_if_empty' => [booleen],\n 'check_data' => array (\n // R\u00e9gle de v\u00e9rification syntaxique des donn\u00e9es saisies\n ),\n 'validation' => array (\n // R\u00e8gle de v\u00e9rification d'int\u00e9grit\u00e9 des donn\u00e9es saisies\n ),\n 'rights' => array(\n 'LSprofile1' => 'droit1',\n 'LSprofile2' => 'droit2',\n ...\n ),\n 'view' => 1,\n 'form' => array (\n 'create' => 1,\n 'modify' => 0,\n ...\n ),\n 'dependAttrs' => array(\n // Attributs en d\u00e9pendance\n ),\n 'onDisplay' => 'fonction2'\n\n 'before_modify' => 'function1',\n 'after_modify' => 'function2'\n ),\n /* ----------- end -----------*/\n ...\n);\n...\n
label
Le label de l'attribut.
displayAttrName
Bool\u00e9en d\u00e9finissant si le nom de l'attribut doit \u00eatre affich\u00e9 en pr\u00e9fixe du message d'aide (param\u00e8tre help_info
).
help_info
Message d'aide qui sera affich\u00e9 dans une bulle d'aide \u00e0 c\u00f4t\u00e9 du nom de l'attribut dans les formulaires.
help_info_in_view
Bool\u00e9en d\u00e9finissant si le message d'aide doit \u00eatre affich\u00e9 sur la vue de visualisation de l'objet.
Valeurs possibles : 0 ou 1
Valeur par d\u00e9faut : 0
ldap_type
Le type LDAP de l'attribut (facultatif, par d\u00e9faut: LSattr_ldap_ascii). Voir la section concern\u00e9e.
ldap_options
Tableau associatif contenant les param\u00e8tres de configuration du type LDAP de l'attribut. Voir la section concern\u00e9e.
html_type
Le type HTML de l'attribut (facultatif, par d\u00e9faut: LSattr_html_text). Voir la section concern\u00e9e.
html_options
Tableau associatif contenant les param\u00e8tres de configuration du type HTML de l'attribut. Voir la section concern\u00e9e.
no_value_label
Label affich\u00e9 lorsque l'attribut n'a pas de valeur (facultatif).
multiple
Bool\u00e9en d\u00e9finissant si cet attribut peut stocker plusieurs valeurs.
Valeurs possibles : 0 ou 1
Valeur par d\u00e9faut : 0
required
Bool\u00e9en d\u00e9finissant si cet attribut doit obligatoirement \u00eatre d\u00e9fini.
Valeurs possibles : 0 ou 1
Valeur par d\u00e9faut : 0
generate_function
Nom de la fonction permettant de g\u00e9n\u00e9rer la valeur de l'attribut. Cette fonction sera \u00e9xecut\u00e9e, en passant en premier param\u00e8tre, l'objet LSobject courant.
generate_value_format
LSformat permettant la g\u00e9n\u00e9ration de l'attribut.
Note
Cette m\u00e9thode de g\u00e9n\u00e9ration est utilis\u00e9e uniquement si aucune fonction de g\u00e9n\u00e9ration de la valeur n'est d\u00e9finie (param\u00e8tre generate_function
).
default_value
Valeur par d\u00e9faut de l'attribut.
Warning
Il doit s'agir de la valeur telque retourn\u00e9e par le formulaire web. Ainsi, par exemple dans le cas d'un attribut bool\u00e9en, les valeurs possibles sont yes
ou no
.
Note
Cette valeur est \u00e9galement utilis\u00e9e dans le cadre de la g\u00e9n\u00e9ration automatique de la valeur de l'attribut si aucune autre m\u00e9thode n'est disponible (via une fonction ou un LSformat).
set_default_value_on_creation_if_empty
Bool\u00e9en permettant de d\u00e9finir si la valeur de l'attribut doit \u00eatre initialis\u00e9e avec sa valeur par d\u00e9faut \u00e0 la cr\u00e9ation de l'objet si aucune autre valeur n'as \u00e9t\u00e9 fournie dans le contexte de cr\u00e9ation (par d\u00e9faut : 1).
force_generation_if_empty
Bool\u00e9en permettant de d\u00e9finir si la valeur de l'attribut doit \u00eatre g\u00e9n\u00e9r\u00e9e si elle est vide, que ce soit \u00e0 la cr\u00e9ation ou la modification de l'objet (par d\u00e9faut : 0).
Warning
Si la g\u00e9n\u00e9ration \u00e9choue, cela bloquera l'action. Par ailleurs, cette g\u00e9n\u00e9ration est prioritaire sur l'utilisation de la valeur par d\u00e9faut de l'attribut induit par le param\u00e8tre set_default_value_on_creation_if_empty
.
check_data
Tableau associatif contenant les r\u00e8gles de v\u00e9rification syntaxique des donn\u00e9es de l'attribut. Voir la section concern\u00e9e.
validation
Tableau associatif contenant les r\u00e8gles de v\u00e9rification d'int\u00e9grit\u00e9 des donn\u00e9es de l'attribut. Voir la section concern\u00e9e.
rights
Tableau associatif dont les cl\u00e9s sont les noms des LSprofiles ayant des droits sur cet attribut et les valeurs associ\u00e9es sont les droits correspondants. La valeur des droits d'un LSprofile peut \u00eatre r
pour le droit de lecture ou w
pour le droit de lecture-\u00e9criture. Par d\u00e9faut, un LSprofile n'a aucun droit.
view
Bool\u00e9en d\u00e9finissant si l'attribut est, ou non, affich\u00e9 lors de la visualisation des objets du type courant.
Valeurs possibles : 0 ou 1
Valeur par d\u00e9faut : 0
form
Tableau associatif dont les cl\u00e9s sont les noms des LSforms et les valeurs associ\u00e9es la d\u00e9finition de l'affichage dans ce LSform. Si cette valeur vaut 0
, alors l'attribut sera lecture-seule et si cette valeur vaut 1
, cet attribut sera affich\u00e9 en lecture-\u00e9criture.
dependAttrs
Tableau associatif listant les attributs d\u00e9pendants de celui-ci. Les attributs list\u00e9s ici seront reg\u00e9n\u00e9r\u00e9s lors de chaque modification de l'attribut courant. Cette g\u00e9n\u00e9ration sera effectu\u00e9e avec la fonction d\u00e9finie dans le param\u00e8tre generate_function
de l'attribut.
onDisplay
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\u00e9e les unes apr\u00e8s les autres. Ces fonctions seront \u00e9xecut\u00e9es, en passant en premier param\u00e8tre, le tableau des valeurs de l'objet.
before_modify
Cha\u00eene de caract\u00e8res (ou tableau de chaine de caract\u00e8res) correspondant au nom d'une ou plusieurs fonctions qui seront ex\u00e9cut\u00e9es avant toutes modifications de la valeur de l'attribut. Voir la section concern\u00e9e
after_modify
Cha\u00eene de caract\u00e8res (ou tableau de chaine de caract\u00e8res) correspondant au nom d'une ou plusieurs fonctions qui seront ex\u00e9cut\u00e9es apr\u00e8s toutes modifications de la valeur de l'attribut. Voir la section concern\u00e9e
Cette section d\u00e9crit la mani\u00e8re de param\u00e9trer des d\u00e9clencheurs afin que LdapSaisie ex\u00e9cute durant ses processus, et \u00e0 des moments bien pr\u00e9cis des traitements d'un LSattributes, des fonctions que vous pourrez d\u00e9velopper vous m\u00eame. De plus, le r\u00e9sultat de l'ex\u00e9cution de vos fonctions pourra influer sur le d\u00e9roulement des processus.
Actuellement, les \u00e9v\u00e8nements suivant sont g\u00e9r\u00e9s :
Nom Description Bloquantbefore_create
Avant la cr\u00e9ation du LSobject, lorsque l'attribut a au moins une valeur. Oui after_create
Apr\u00e8s la cr\u00e9ation du LSobject, lorsque l'attribut a au moins une valeur. Non before_modify
Avant la modification de la valeur de l'attribut. Oui after_modify
Apr\u00e8s la modification de la valeur de l'attribut. Non before_delete
Avant la suppression du LSobject contenant l'attribut. Oui after_delete
Apr\u00e8s la suppression du LSobject contenant l'attribut. Non Note
Si un \u00e9v\u00e9nement est dit bloquant, lors de l'ex\u00e9cution des actions li\u00e9es, si une des fonctions retourne false
, le processus s'arr\u00eatera.
La configuration des d\u00e9clencheurs se fait dans la d\u00e9finition des LSattributes. Par exemple, pour d\u00e9finir les fonctions \u00e0 ex\u00e9cuter apr\u00e8s la modification de la valeur de l'attribut mail du type de LSobject LSpeople, c'est \u00e0 dire lors de leur \u00e9venement after_modify
, il faut d\u00e9finir la variable suivante :
$GLOBALS['LSobjects']['LSpeople']['attrs']['mail']['after_modify']\n
Cette variable peut contenir soit une chaine de caract\u00e8res correspondant au nom de la fonction \u00e0 ex\u00e9cuter, soit un tableau de cha\u00eenes de caract\u00e8res correspondant aux noms des fonctions \u00e0 ex\u00e9cuter.
"},{"location":"conf/LSobject/LSattribute/triggers/#ecriture-dune-fonction","title":"\u00c9criture d'une fonction","text":"Une fonction ex\u00e9cut\u00e9 par un d\u00e9clencheur d'un LSattribute se d\u00e9clare de la mani\u00e8re suivante :
/*\n * Ma fonction \u00e0 ex\u00e9cuter lors de l'\u00e9v\u00e8nement [event]\n *\n * Param\u00e8tre :\n * - $object : Le LSobject contenant le LSattribute sur lequel l'\u00e9venement\n * survient\n *\n * Valeurs retourn\u00e9es :\n * - True : Tout s'est bien pass\u00e9\n * - False : Une erreur est survenue ou la fonction souhaite bloquer le\n * processus lors d'un \u00e9v\u00e8nement bloquant.\n */\nfunction maFonction ($object) {\n\n // Actions\n\n}\n
Cette fonction doit prendre pour seul param\u00e8tre, le LSobject contenant le LSattribute sur lequel l'\u00e9venement survient et doit retourner soit True
si tout s'est bien pass\u00e9, soit False
en cas de probl\u00e8me. Dans le cas d'un \u00e9v\u00e9nement bloquant, si la fonction retourne False
, le processus est arr\u00eat\u00e9.
Cette section d\u00e9crit la mani\u00e8re de configurer des r\u00e8gles de v\u00e9rification d'int\u00e9grit\u00e9 sur les donn\u00e9es des attributs. Il est possible de valider la valeur de l'attribut par l'interm\u00e9diraire de la v\u00e9rification de r\u00e9sultat d'une recherche param\u00e8trable dans l'annuaire ou encore d'appeler une fonction de votre choix pour effectuer la v\u00e9rification voulue.
"},{"location":"conf/LSobject/LSattribute/validation/#validation-par-lanalyse-du-resultat-dune-recherche-dans-lannuaire","title":"Validation par l'analyse du r\u00e9sultat d'une recherche dans l'annuaire","text":"Une telle r\u00e8gle permet de v\u00e9rifier si les valeurs des attributs n'entrent pas en conflit avec d'autres objets de l'annuaire. Ce test peut \u00e9galement permetre de v\u00e9rifier si les valeurs devant faire r\u00e9f\u00e9rence \u00e0 d'autres objets de l'annuaire sont correctes.
'validation' => array (\n ...\n array(\n 'msg' => \"[LSformat du message d'erreur]\",\n 'filter' => '[LSformat du filtre de la recherche]',\n 'object_type' => '[Type d'LSobject recherch\u00e9]',\n 'basedn' => '[BaseDn de la recherche]',\n 'scope' => '[Scope de la recherche]',\n 'result' => '[R\u00e9sultat positif de la recherche]',\n 'except_current_object' => '[Exclure l'objet courant]'\n ),\n ...\n),\n...\n
msg
LSformat du message d'erreur \u00e0 afficher lorsque la validation \u00e9choue. Ce format est construit avec les valeurs du LSobject.
filter
LSformat du filtre de la recherche. Ce format peut \u00eatre construit avec toutes les valeurs du LSobject (attributs, DN, ...) et \u00e9galement avec la valeur \u00e0 valider en utilisant pour mot cl\u00e9 %{val}
.
object_type
Le nom du type d'LSobject recherch\u00e9. Si un type est sp\u00e9cifi\u00e9, le filtre de la recherche sera une combinaison de celui du param\u00e8tre filter
et du filtre compos\u00e9 \u00e0 partir des objectClass du type d'LSobject. Param\u00e8tre facultatif.
basedn
Le basedn de la recherche (Param\u00e8tre facultatif, par d\u00e9faut : racine de l'annuaire).
scope
Le scope de la recherche (Param\u00e8tre facultatif, par d\u00e9faut : sub
).
result
Le r\u00e9sultat de la recherche : si result
vaut z\u00e9ro, la recherche ne devra retourner aucun objet pour que la validation soit r\u00e9ussie. Sinon, la recherche devra retourner au moins un objet.
except_current_object
Bool\u00e9en d\u00e9finissant si l'objet courrant doit \u00eatre exclu du r\u00e9sultat de la recherche. Ce param\u00e8tre n'est \u00e9valu\u00e9 quand cas de cr\u00e9ation (formulaire create
).
Il est possible d'effectuer la validation de l'attribut par l'ex\u00e9cution d'une fonction de votre choix. Il lui sera pass\u00e9 en param\u00e8tre une r\u00e9f\u00e9rence \u00e0 l'objet LSldapObject
courant. Si la fonction ne retourne pas true, la validation \u00e9chouera.
'validation' => array (\n ..\n array(\n 'msg' => \"[LSformat du message d'erreur]\",\n 'function' => '[Nom de la fonction de validation]'\n ),\n ...\n),\n...\n
msg
LSformat du message d'erreur \u00e0 afficher lorsque la validation \u00e9choue. Ce format est construit avec les valeurs du LSobject.
function
Le nom de la fonction \u00e0 ex\u00e9cuter. Si cette fonction n'existe pas, un message d'erreur sera affich\u00e9 et la validation \u00e9chouera.
Cette section d\u00e9crit les options propres \u00e0 chacun des types d'attributs HTML support\u00e9s par LdapSaisie.
"},{"location":"conf/LSobject/LSattribute/LSattr_html/LSattr_html_boolean/","title":"LSattr_html_boolean","text":"Ce type est utilis\u00e9 pour la gestion des attributs dont la valeur est un bool\u00e9en.
La valeur retourn\u00e9e est l'une des cha\u00eenes de caract\u00e8res suivantes :
yes
pour Vraino
pour False
'html_options' => array (\n 'true_label' => '[label]',\n 'false_label' => '[label]',\n),\n...\n
true_label
Label affich\u00e9 pour d\u00e9signer la valeur True
.
false_label
Label affich\u00e9 pour d\u00e9signer la valeur False
.
Note
Pour le moment, les attributs \u00e0 valeurs multiples ne sont pas g\u00e9r\u00e9s.
Note
Pour ma\u00eetriser les valeurs stock\u00e9es dans l'annuaire, il faut coupler ce type d'attribut HTML avec le type d'attribut LDAP boolean
Important
La d\u00e9finition de la valeur par d\u00e9faut d'un attribut utilisant ce type HTML (param\u00e8tre default_value
), doit se faire \u00e0 l'aide des valeurs yes
ou no
.
Ce type est utilis\u00e9 pour la gestion des attributs dont la valeur est une date. L'outil de s\u00e9lection de date MooTools-DatePicker est utilis\u00e9 pour la s\u00e9lection graphique de la date et de l'heure.
'html_options' => array (\n 'format' => '[Format d'affichage de la date]',\n 'time' => '[Booleen pour le choix ou non de l heure]',\n 'manual' => '[Booleen pour l edition manuelle ou non]',\n 'showNowButton' => '[Booleen]',\n 'showTodayButton' => '[Booleen]',\n 'style' => '[Nom du style utilise]',\n 'special_values' => array (\n '[value]' => '[label]',\n [...]\n ),\n),\n...\n
format
Format d'affichage de la date dans le champ de saisie. Ce format est compos\u00e9 \u00e0 partir des motifs cl\u00e9s suivants :
Mot cl\u00e9 Valeur de substitution Exemple de valeur%a
Nom abr\u00e9g\u00e9 du jour de la semaine De Sun \u00e0 Sat %A
Nom complet du jour de la semaine De Sunday \u00e0 Saturday %b
Nom du mois, abr\u00e9g\u00e9, suivant la locale De Jan \u00e0 Dec %B
Nom complet du mois, suivant la locale De January \u00e0 December %c
Date et heure pr\u00e9f\u00e9r\u00e9es, bas\u00e9es sur la locale Exemple : Tue Feb 5 00:45:10 2009 pour le 5 F\u00e9vrier 2009 \u00e0 12:45:10 AM %d
Jour du mois en num\u00e9rique, sur 2 chiffres (avec le z\u00e9ro initial) De 01 \u00e0 31 %e
Jour du mois, avec un espace pr\u00e9c\u00e9dant le premier chiffre. L'impl\u00e9mentation Windows est diff\u00e9rente, voyez apr\u00e8s pour plus d'informations. De 1 \u00e0 31 %H
L'heure, sur 2 chiffres, au format 24 heures De 00 \u00e0 23 %I
Heure, sur 2 chiffres, au format 12 heures De 01 \u00e0 12 %j
Jour de l'ann\u00e9e, sur 3 chiffres avec un z\u00e9ro initial 001 \u00e0 366 %m
Mois, sur 2 chiffres De 01 (pour Janvier) \u00e0 12 (pour D\u00e9cembre) %M
Minute, sur 2 chiffres De 00 \u00e0 59 %p
'AM' ou 'PM', en majuscule, bas\u00e9 sur l'heure fournie Exemple : AM pour 00:31, PM pour 22:23 %s
Timestamp de l'\u00e9poque Unix (identique \u00e0 la fonction time()) Exemple : 305815200 pour le 10 Septembre 1979 08:40:00 AM %S
Seconde, sur 2 chiffres De 00 \u00e0 59 %T
Identique \u00e0 \"%H:%M:%S\" Exemple : 21:34:17 pour 09:34:17 PM %U
Num\u00e9ro de la semaine de l'ann\u00e9e donn\u00e9e, en commen\u00e7ant par le premier Lundi comme premi\u00e8re semaine 13 (pour la 13\u00e8me semaine pleine de l'ann\u00e9e) %w
Repr\u00e9sentation num\u00e9rique du jour de la semaine De 0 (pour Dimanche) \u00e0 6 (pour Samedi) %y
L'ann\u00e9e, sur 2 chiffres Exemple : 09 pour 2009, 79 pour 1979 %Y
L'ann\u00e9e, sur 4 chiffres Exemple : 2038 %z
Soit le d\u00e9calage horaire depuis UTC, ou son abr\u00e9viation (suivant le syst\u00e8me d'exploitation) Exemple : -0500 ou EST pour l'heure de l'Est %Z
Le d\u00e9calage horaire ou son abr\u00e9viation NON fournie par %z (suivant le syst\u00e8me d'exploitation) Exemple : -0500 ou EST pour l'heure de l'Est %%
Le caract\u00e8re de pourcentage (\"%\") --- Note
La valeur par d\u00e9faut est %d/%m/%Y, %T. Exemple : 23/04/2009, 23:03:04
time
Bool\u00e9en d\u00e9finissant si l'outil de s\u00e9lection permetra ou non le choix de l'heure en plus de la date
manual
Bool\u00e9en autorisant ou non l'\u00e9dition manuelle du champs. Si ce param\u00e8tre vaut False
, la s\u00e9lection se fera uniquement \u00e0 l'aide de l'outil graphique
showNowButton
Bool\u00e9en d\u00e9finissant si le bouton Maintenant est affich\u00e9 ou non. Par d\u00e9faut, il est affich\u00e9.
showTodayButton
Bool\u00e9en d\u00e9finissant si le bouton Aujourd'hui est affich\u00e9 ou non. Par d\u00e9faut, il est affich\u00e9.
style
Nom du style d'affichage de l'outil de s\u00e9lection. Les valeurs possibles sont par d\u00e9faut :
default
dashboard
vista
jqui
Note
La cr\u00e9ation de nouveau th\u00e8me est possible. Pour plus d'information, consulter l'aide de l'outil de s\u00e9lection de date.
special_values
Tableau listant les valeurs sp\u00e9ciales que peut prendre l'attribut. Dans ce tableau associatif, la cl\u00e9 doit correspondre \u00e0 la valeur de l'attribut (telle que fournie par l'attribut LDAP) et la valeur associ\u00e9e au label associ\u00e9.
Ces valeurs sp\u00e9ciales seront propos\u00e9es \u00e0 l'utilisateur sous la forme de cases \u00e0 cocher dans le formulaire. Elles peuvent permettre par exemple de donn\u00e9es une signification particuli\u00e8re au z\u00e9ro pour un attribut LDAP stockant un timestamp.
Ce type est utilis\u00e9 pour la gestion des attributs dont la valeur est une clef publique GPG. Il permet dans l'interface, d'avoir un affichage adapt\u00e9 \u00e0 ce type de donn\u00e9e.
"},{"location":"conf/LSobject/LSattribute/LSattr_html/LSattr_html_image/","title":"LSattr_html_image","text":"Ce type est utilis\u00e9 pour la gestion des attributs dont la valeur est une image. Pour le moment, les attributs \u00e0 valeurs multiples ne sont pas g\u00e9r\u00e9s.
"},{"location":"conf/LSobject/LSattribute/LSattr_html/LSattr_html_jsonCompositeAttribute/","title":"LSattr_html_jsonCompositeAttribute","text":"Ce type est utilis\u00e9 pour la gestion des attributs dont les valeurs sont des dictionnaires de valeurs encod\u00e9es aux formats JSON.
Exemple de valeur g\u00e9r\u00e9e :
{\"component1\": \"value1\", \"component2\": \"value2\", \"component3\": \"value3\"}\n
Le principe est que ces dictionnaires contienent plusieurs composants r\u00e9f\u00e9renc\u00e9s par leur cl\u00e9 et stockant une valeur dont le type peut \u00eatre un texte libre ou bien \u00eatre issue d'une liste d\u00e9roulante configurable selon le m\u00eame principe que le type d'attribut LSattr_html_select_list.
'html_options' => array (\n 'components' => array (\n '[cl\u00e9 composant 1]' => array (\n 'label' => '[Label du composant]',\n 'help_info' => '[Message d'aide sur le composant]',\n 'type' => '[Type de la valeur stock\u00e9]',\n 'required' => [Bool\u00e9en],\n 'multiple' => [Bool\u00e9en],\n 'check_data' => => array (\n // R\u00e9gle de v\u00e9rification syntaxique des donn\u00e9es saisies\n ),\n ),\n '[cl\u00e9 composant 2]' => array (\n 'label' => '[Label du composant 2]',\n 'type' => 'select_list',\n 'required' => [Bool\u00e9en],\n 'options' => array (\n [Configuration \u00e9quivalente \u00e0 un attribut LSattr_html_select_list]\n )\n ),\n [...]\n ),\n 'fullWidth' => [bool\u00e9en],\n),\n...\n
components
Tableau associatif obligatoire contenant en valeur cl\u00e9, l'identifiant des composants, correspondant \u00e0 la cl\u00e9 dans le dictionnaire JSON, et en valeurs associ\u00e9s, la configuration du composant.
label
Le label du composant.
help_info
Message d'aide sur le composant (affich\u00e9 uniquement en mode \u00e9dition).
type
Le type de valeur du composant. Les types possibles sont text
ou select_list
pour respectivement soit une valeur saisie librement, soit une valeur s\u00e9lectionn\u00e9e parmis une liste d\u00e9roulante.
options
Dans le cadre d'un composant de type select_list
, cela correspond \u00e0 la configuration de la liste d\u00e9roulante. Cette configuration utilise la m\u00eame syntaxe de configuration que celle du type d'attribut LSattr_html_select_list et son param\u00e8tre html_options
.
multiple
Bool\u00e9en d\u00e9finissant si ce composant peut stocker plusieurs valeurs (Par d\u00e9faut : False
).
required
Bool\u00e9en d\u00e9finissant si ce composant doit obligatoirement \u00eatre d\u00e9fini (Par d\u00e9faut : False
).
check_data
Tableau associatif contenant les r\u00e8gles de v\u00e9rification syntaxique des donn\u00e9es du composant. Ces r\u00e8gles sont configurables de la m\u00eame mani\u00e8re que les celles des valeurs attributs. Voir la section concern\u00e9e.
fullWidth
Bool\u00e9en permettant de d\u00e9finir si l'affichage dans le formulaire doit se faire sur toute la largeur disponible de la page (Par d\u00e9faut : False
).
Ce type est utilis\u00e9 pour la gestion des attributs dont la valeur est prefix\u00e9 d'un label
et qui respecte le format suivant : [label]valeur
.
'html_options' => array(\n 'labels' => array ( // Liste des labels possible\n 'label1' => 'Libell\u00e9 label1',\n 'label2' => 'Libell\u00e9 label2',\n [...]\n ),\n 'translate_labels' => [bool\u00e9en],\n),\n...\n
labels
Tableau associatif obligatoire contenant en valeur cl\u00e9, le label
utilis\u00e9 dans la valeur stock\u00e9e et en valeur associ\u00e9e, le valeur d'affichage du label
.
translate_labels
Bool\u00e9en permettant d'activer/d\u00e9sactiver la traduction des labels (Par d\u00e9faut : True
).
Ce type est utilis\u00e9 pour la gestion des attributs dont la valeur est une adresse e-mail. En plus d'un affichage adapt\u00e9, il offre la possibilit\u00e9 d'envoyer des mails directement depuis l'interface de l'application.
'html_options' => array(\n 'disableMailSending' => [bool\u00e9en],\n),\n...\n
disableMailSending
D\u00e9sactive l'envoi de mail depuis l'interface pour cet attribut.
Note
Ceci ne d\u00e9sactive pas pour autant le lien HTML de type mailto:. Pour cela, utilisez plut\u00f4t le type d'attribut HTML text.
Important
Ce type d'attribut HTML est d\u00e9riv\u00e9 du type text. Il profite donc de toutes les fonctionnalit\u00e9s d'un champ de ce type (autog\u00e9n\u00e9ration, ...).
"},{"location":"conf/LSobject/LSattribute/LSattr_html/LSattr_html_mailQuota/","title":"LSattr_html_mailQuota","text":"Ce type est utilis\u00e9 pour la gestion des attributs dont la valeur est le quota d'une boite mail. Le format de la valeur g\u00e9n\u00e9r\u00e9e correspondant au format attendu par le serveur de mail Courier] par d\u00e9faut. Exemple : 50000000S correspond \u00e0 un quota de 50Mio.
'html_options' => array(\n 'suffix' => '[suffix]',\n )\n),\n...\n
suffix
Chaine de caract\u00e8res suffixant la valeur du quota (Par d\u00e9faut : S
).
Ce type est utilis\u00e9 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 mailbox utilis\u00e9 par maildrop pour stocker le chemin des boites mails. Ce type d'attribut offre la possibilit\u00e9 de g\u00e9r\u00e9r un niveau de l'attribut et \u00e0 travers les d\u00e9clencheurs g\u00e9r\u00e9s par LdapSaisie la cr\u00e9ation, la modification et ou la suppression de la boite mails. Le LSaddon maildir est utilis\u00e9 pour manipuler la boite mail \u00e0 distance.
Note
Actuellement, cet LSaddon ne g\u00e9rant que l'acc\u00e8s via FTP au serveur distant, l'API d'acc\u00e8s via FTP est attaqu\u00e9e directement.
'html_options' => array (\n 'LSform' => array (\n '[LSform1]' => [bool\u00e9en],\n '[LSform2]' => [bool\u00e9en],\n ...\n ),\n 'remoteRootPathRegex' => \"[Expression r\u00e9guli\u00e8re pour matcher le dossier \u00e0 cr\u00e9er]\",\n 'archiveNameFormat' => \"[LSformat du chemin/nom du fichier une fois archiver]\"\n ),\n...\n
LSform
Tableau associatif obligatoire contenant en valeur cl\u00e9 le nom des LSforms dans lesquels la fonctionnalit\u00e9 de modification de la boite mail sera pr\u00e9sente. Les valeurs attach\u00e9es sont des bool\u00e9ens d\u00e9finissant si la modification est active par d\u00e9faut.
remoteRootPathRegex
Expression r\u00e9guli\u00e8re (compatible Perl) facultative dont le but est de matcher dans la valeur compl\u00e8te du chemin distant de la maildir, le chemin de la maildir \u00e0 cr\u00e9er une fois connect\u00e9 sur le serveur.
Exemple : Si le chemin complet de la maildir est /home/vmail/user
, mais que l'utilisateur FTP lorsqu'il se connecte arrive directement dans /home/vmail
, et faut d\u00e9finir le param\u00e8tre remoteRootPathRegex
de la mani\u00e8re suivante :
/^\\/home\\/vmail\\/([^\\/]*)\\/+$/\n
archiveNameFormat
LSformat du nom du dossier de la maildir une fois archiv\u00e9e. Si ce format est d\u00e9fini, le dossier ne sera pas supprim\u00e9 mais d\u00e9plac\u00e9 ou r\u00e9nomm\u00e9. Le format sera construit avec pour seul mot cl\u00e9, le nom de l'ancien dossier. Exemple : Si le dossier de la maildir est /home/vmail/user
et le param\u00e8tre archiveNameFormat
vaut %{old}.bckp
, le dossier sera renomm\u00e9 en /home/vmail/user.bckp
.
Important
Ce format est interpr\u00e9t\u00e9 apr\u00e8s application de la routine li\u00e9e au param\u00e8tre remoteRootPathRegex
. Ainsi, dans l'exemple pr\u00e9c\u00e9dent, si le param\u00e8tre remoteRootPathRegex
tronquait uniquement le nom du dossier final, c'est \u00e0 dire user
, le format une fois interpr\u00e9t\u00e9 donnerai user.bckp
.
Ce type est utilis\u00e9 pour la gestion des attributs dont la valeur est un mot de passe.
'html_options' => array(\n 'isLoginPassword' => [booleen],\n 'generationTool' => [booleen],\n 'autoGenerate' => [booleen],\n 'length' => [nombre de caract\u00e8res],\n 'chars' => array ( // Caract\u00e8res que peut contenir le mot de passe\n array( // Liste caract\u00e8re avec un nombre mininum d'apparition sup\u00e9rieur \u00e0 1\n 'nb' => [nb caract\u00e8res],\n 'chars' => '[liste de caract\u00e8res possibles]'\n ),\n '[autre liste de caract\u00e8res possibles]', // Liste caract\u00e8re avec un nombre\n // d'apparitions \u00e9gal \u00e0 1\n ...\n ),\n 'use_pwgen' => [bool\u00e9en], // Utiliser pwgen pour la g\u00e9n\u00e9ration du mot de passe\n 'pwgen_path' => \"/path/to/pwgen\",\n 'pwgen_opts' => \"[options \u00e0 passer \u00e0 pwgen]\",\n 'verify' => [bool\u00e9en], // Activation de l'outil de v\u00e9rification du mot de passe\n 'viewHash' => [bool\u00e9en], // Activation de l'outil de visualisation du mot de passe hach\u00e9\n 'confirmChange' => [bool\u00e9en], // Activation de la confirmation en cas de changement du mot de passe\n 'confirmChangeQuestion' => \"[LSformat]\", // LSformat de la question de confirmation du changement du mot de passe\n 'mail' => array( // Configuration de l'envoi du mot de passe par mail\n 'subject' => \"[LSformat du sujet du mail]\",\n 'msg' => \"[LSformat du message du mail]\",\n 'mail_attr' => 'mail', // Attribut mail de l'objet\n 'get_mail_attr_function' => '[function]', // Fonction retournant l'attribut mail de l'objet\n 'send' => 1, // Activation par d\u00e9faut de l'envoi du mot de passe\n 'ask' => 1, // Laisser le choix \u00e0 l'utilisateur\n 'canEdit' => 1, // Activation de l'\u00e9dition du LSformat du message par l'utilisateur\n 'checkDomain' => false, // D\u00e9sactivation de la v\u00e9rification du domaine de l'adresse email\n 'domain' => '[nom de domaine]', // Nom de domaine obligatoire lors de la validation de l'adresse email\n )\n),\n...\n
isLoginPassword
Bool\u00e9en d\u00e9finissant si le mot de passe est celui utilis\u00e9 par l'utilisateur pour se logguer \u00e0 l'annuaire LDAP. Si c'est le cas, pour v\u00e9rifier si le mot de passe correspond avec un autre, une tentative de connexion de l'utilisateur \u00e0 l'annuaire sera faite. (Par d\u00e9faut : False
)
generationTool
Bool\u00e9en d\u00e9finissant si l'outil de g\u00e9n\u00e9ration de mot de passe est activ\u00e9.
autoGenerate
Active la g\u00e9n\u00e9ration automatique du mot de passe lorsque l'attribut n'a encore aucune valeur de d\u00e9finie. Il faut \u00e9galement que l'outil de g\u00e9n\u00e9ration soit activ\u00e9 (generationTool
).
length
Nombre de caract\u00e8res que devront contenir les mots de passe g\u00e9n\u00e9r\u00e9s.
chars
Tableau contenant une liste de listes de caract\u00e8res possibles pour composer le mot de passe. Dans chacune de ces listes, au moins un caract\u00e8re sera utilis\u00e9 dans le nouveau mot de passe. Il est possible de d\u00e9finir un nombre sup\u00e9rieur de caract\u00e8res d'une liste devant appara\u00eetre dans les mots de passe g\u00e9n\u00e9r\u00e9s en sp\u00e9cifiant un tableau associatif dont la cl\u00e9 nb associra le nombre entier de caract\u00e8res et la cl\u00e9 chars la liste de caract\u00e8res. Une liste de caract\u00e8res est un cha\u00eene.
use_pwgen
Bool\u00e9en d\u00e9finissant si la commande pwgen
doit \u00eatre utilis\u00e9 pour g\u00e9n\u00e9rer le mot de passe.
pwgen_path
Chemin d'acc\u00e8s au binaire pwgen
. (Par d\u00e9faut : pwgen
).
pwgen_opts
Options \u00e0 passer \u00e0 la commande pwgen
.
verify
Bool\u00e9en d\u00e9finissant si l'outil de v\u00e9rification du mot de passe est activ\u00e9. Si celui-ci est activ\u00e9, l'utilisateur pourra entrer un mot de passe dans le champ et cliquer sur un bouton qui lancera une proc\u00e9dure de v\u00e9rification du mot de passe via un test de connexion \u00e0 l'annuaire.
viewHash
Bool\u00e9en d\u00e9finissant si l'utilisateur aura acc\u00e8s \u00e0 la fonctionnalit\u00e9 de visualisation du mot de passe hach\u00e9.
confirmInput
Bool\u00e9en d\u00e9finissant si un second champ mot de passe sera affich\u00e9 dans le formulaire pour que l'utilisateur confirme la saisie du nouveau mot de passe.
confirmInputError
LSformat du message d'erreur affich\u00e9 \u00e0 l'utilisateur si le mot de passe saisie dans le champs de confirmation ne correspond pas au nouveau mot de passe. Param\u00e8tre facultatif.
confirmChange
Bool\u00e9en d\u00e9finissant si l'utilisateur devra confirmer le changement de ce mot de passe. Lorsque cette fonctionnalit\u00e9 est activ\u00e9e, l'utilisateur verra appara\u00eetre une popup de confirmation \u00e0 la validation du formulaire s'il a saisi un nouveau mot de passe.
confirmChangeQuestion
LSformat de la question pos\u00e9e \u00e0 l'utilisateur en cas de changement du mot de passe et si la fonctionnalit\u00e9 est activ\u00e9e. Il sera compos\u00e9 \u00e0 l'aide du label de l'attribut. Param\u00e8tre facultatif.
clearView
Bool\u00e9en d\u00e9finissant si l'utilisateur pourra voir le mot de passe en clair par d\u00e9faut (y comris en mode visualisation uniquement).
clearEdit
Bool\u00e9en d\u00e9finissant si l'utilisateur \u00e9ditera le mot de passe au travers un champs HTML de type text et donc lisible ou au travers un champs HTML de type password.
mail
Param\u00e8tres de configuration de l'envoi par mail du mot de passe \u00e0 l'utilisateur. Lorsque cet outil est activ\u00e9, lors de la modification/cr\u00e9ation du mot de passe, l'utilisateur pourra recevoir un mail lui sp\u00e9cifiant son nouveau mot de passe.
send
Bool\u00e9en d\u00e9finissant si l'envoi du mot de passe est activ\u00e9 par d\u00e9faut.
ask
Bool\u00e9en d\u00e9finissant si on laisse le choix \u00e0 l'utilisateur d'activer ou non l'envoi du mot de passe par mail.
canEdit
Bool\u00e9en d\u00e9finissant si on laisse la possibilit\u00e9 \u00e0 l'utilisateur d'\u00e9diter le LSformat du message et du sujet.
subject
LSformat du sujet du mail. Ce format sera compos\u00e9 avec la valeur du nouveau mot de passe de l'utilisateur.
msg
LSformat du message du mail. Ce format sera compos\u00e9 avec les informations de l'object LDAP, y compris le mot cl\u00e9 %{password} correspondant \u00e0 la valeur du nouveau mot de passe de l'utilisateur.
mail_attr
Le nom de l'attribut listant les mails possibles de l'utilisateur. Par d\u00e9faut, la premi\u00e8re valeur de l'attribut sera utilis\u00e9e comme adresse mail destinatrice. Cet attribut peut \u00e9galement \u00eatre un tableau de plusieurs noms d'attributs. Dans ce cas, la premi\u00e8re valeur correcte sera retenue. Si canEdit
est activ\u00e9, l'utilisateur pourra choisir l'adresse mail destinatrice parmi la liste des valeurs de l'attribut.
get_mail_attr_function
Nom de la fonction (ou callable
au sens PHP) qui sera utilis\u00e9 pour r\u00e9cup\u00e9rer le nom de l'attribut listant les mails possibles de l'utilisateur. Cette fonction prendra en param\u00e8tre, l'objet LSformElement
courant et devra retourner une valeur \u00e9quivalente au param\u00e8tre de configuration mail_attr
. Si ce param\u00e8tre est d\u00e9fini, il pr\u00e9valera toujours sur le param\u00e8tre mail_attr
.
bcc
Mettre en BCC un mail syst\u00e9matiquement (ou plusieurs en les s\u00e9parant par des virgules).
headers
Un tableau de type cl\u00e9/valeur ou la cl\u00e9 est le nom d'un header \u00e0 ajouter au mail et la valeur est la valeur de l'header en question.
checkDomain
Bool\u00e9en d\u00e9finissant si le domaine de l'adresse mail doit \u00eatre valid\u00e9e. *Param\u00e8tre facultatif, par d\u00e9faut: True
domain
Nom de domaine obligatoire lors de la validation de l'adresse mail. Ce param\u00e8tre peut \u00eatre une simple chaine correspondant au domaine ou un tableau listant plusieurs domaines valides. Param\u00e8tre facultatif, par d\u00e9faut tous les domaines sont accept\u00e9s.
Ce type est utilis\u00e9 pour la gestion des attributs du type de l'attribut standard postalAddress. Ce type d'attribut permet d'afficher, en plus de l'adresse, un lien compos\u00e9 \u00e0 partir d'informations de l'objet permettant par exemple d'afficher un lien vers une carte g\u00e9ocalisant l'adresse postale.
Par d\u00e9faut, le lien ajout\u00e9 sera un lien de recherche de l'adresse postale g\u00e9n\u00e9r\u00e9e \u00e0 partir de la valeur de l'attribut (en rempla\u00e7ant les retours \u00e0 la ligne (\\n
) par des espaces) via le service Nominatim d'OpenStreetMap.
Note
Dans le cadre du fonctionnement par d\u00e9faut et pour ma\u00eetriser les valeurs stock\u00e9es dans l'annuaire, il faut coupler ce type d'attribut HTML avec le type d'attribut LDAP postaladdress
'html_options' => array(\n 'map_url_pattern_format' => '[LSformat]',\n 'map_url_pattern_generate_function' => '[callable]',\n 'map_url_format' => '[LSformat]',\n),\n...\n
map_url_pattern_format
Ce LSformat doit permettre de g\u00e9n\u00e9rer la valeur de l'adresse postale qui sera ins\u00e9r\u00e9e dans l'URL du lien ajout\u00e9 dans l'interface.
map_url_pattern_generate_function
Ce param\u00e8tre permet de d\u00e9finir une fonction qui sera utilis\u00e9e \u00e0 la place du param\u00e8tre map_url_pattern_format
pour g\u00e9n\u00e9rer la valeur de l'adresse postale qui sera ins\u00e9r\u00e9e dans l'URL du lien ajout\u00e9 dans l'interface. Cette fonction prendra en param\u00e8tre l'objet LSformElement courant et devra retourner une cha\u00eene de caract\u00e8res correspondant \u00e0 l'adresse postale \u00e0 ins\u00e9rer dans le lien de l'interface. Par d\u00e9faut, la fonction LSformElement_postaladdress__generate_pattern
est utilis\u00e9e.
map_url_format
Ce LSformat doit permettre de g\u00e9n\u00e9rer l'URL du lien ajout\u00e9 dans l'interface. Il sera compos\u00e9 avec les informations de l'objet LDAP, y compris le mot cl\u00e9 %{pattern}
correspondant \u00e0 la valeur de l'adresse postale g\u00e9n\u00e9r\u00e9e \u00e0 l'aide des param\u00e8tres pr\u00e9c\u00e9dents. Par d\u00e9faut, la format suivant sera utilis\u00e9 : http://nominatim.openstreetmap.org/search.php?q=%{pattern}
Ce type est d\u00e9riv\u00e9 du type LSattr_html_textarea et permet simplement que lors de l'affichage de la valeur, celle-ci soit affich\u00e9e en respectant les retours \u00e0 la ligne et en utilisant une police de caract\u00e8res monospace
. Cela reproduit l'affichage d'une balise HTML pre
.
Ce type est utilis\u00e9 pour la gestion des attributs dont la valeur est l'URL d'un flux RSS. Il propose directement dans l'interface, la possibilit\u00e9 d'acc\u00e8der au flux RSS.
Important
Ce type d'attribut HTML est d\u00e9riv\u00e9 du type text. Il profite donc de toutes les fonctionnalit\u00e9s d'un champ de ce type (autog\u00e9n\u00e9ration, ...).
"},{"location":"conf/LSobject/LSattribute/LSattr_html/LSattr_html_sambaAcctFlags/","title":"LSattr_html_sambaAcctFlags","text":"Ce type est pr\u00e9vu pour g\u00e9rer l'attribut sambaAcctFlags du sch\u00e9ma Samba, qui au travers d'une seule et unique valeur, respectant un format pr\u00e9vu, liste l'ensemble des drapeaux actifs d'un compte Samba. Il est con\u00e7u pour \u00eatre utilis\u00e9 conjointement avec le type d'attribut LDAP LSattr_ldap_sambaAcctFlags.
Pour d\u00e9finir la valeur par d\u00e9faut de cet attribut, il faut d\u00e9finir param\u00e8tre default_value
comme un tableau des drapeaux telque pr\u00e9vu par Samba :
- U
Compte utilisateur standard\n
- W
Compte de poste de travail approuv\u00e9\n
- S
Compte de serveur approuv\u00e9\n
- I
Compte de domaine approuv\u00e9\n
- M
Compte de connexion Majority Node Set (MNS)\n
- H
Dossier personnel requis\n
- N
Compte sans mot de passe\n
- X
Le mot de passe n'expire jamais\n
- D
Compte d\u00e9sactiv\u00e9\n
- T
Copie temporaire d'un autre compte\n
- L
Compte automatiquement bloqu\u00e9\n
Exemple de valeur par d\u00e9faut...\n'default_value' => array('U', 'X'),\n...\n
Note
Ce type d'attribut est impl\u00e9ment\u00e9 en d\u00e9rivant le type LSattr_html_select_box dont les valeurs possibles sont pr\u00e9-configur\u00e9es (param\u00e8tre possible_values
). M\u00eame si cela n'est pas forc\u00e9ment utiles, les autres param\u00e8tres du type parent restent utilisables.
Ce type est identique au type LSattr_html_select_list except\u00e9 qu'il utilise en lieu et place d'une balise HTML select
, plusieurs balises HTML input
de type checkbox
en cas de valeurs multiples ou de type radio
en cas de valeur unique. Les param\u00e8tres de configuration de la classe LSattr_html_select_list sont tous h\u00e9rit\u00e9s et fonctionnent donc de la m\u00eame mani\u00e8re. Par ailleurs, ce type dispose \u00e9galement de param\u00e8tres qui lui sont propre (voir ci-dessous).
'html_options' => array (\n 'inline' => [Bool\u00e9en],\n),\n...\n
inline
Bool\u00e9en d\u00e9finissant si les valeurs possibles doivent \u00eatre affich\u00e9es sur une m\u00eame ligne ou non (Faux par d\u00e9faut).
Ce type est utilis\u00e9 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 \u00e9galement des r\u00e9f\u00e9rences \u00e0 d'autres LSobjects. La r\u00e9f\u00e9rence \u00e0 un objet correspond \u00e0 une valeur cl\u00e9, r\u00e9f\u00e9rente \u00e0 un objet pr\u00e9cis, qui peut \u00eatre soit la valeur d'un de ses attributs, soit son DN.
'html_options' => array (\n 'possible_values' => array (\n '[LSformat de la valeur cl\u00e9]' => '[LSformat du nom d'affichage]',\n ...\n 'OTHER_OBJECT' => array (\n 'object_type' => '[Type d'LSobject]',\n 'display_name_format' => '[LSformat du nom d'affichage des LSobjects]',\n 'value_attribute' => '[Nom de l'attribut cl\u00e9]',\n 'values_attribute' => '[Nom de l'attribut cl\u00e9 multi-valeur]',\n 'filter' => '[Filtre de recherche des LSobject]',\n 'scope' => '[Scope de la recherche]',\n 'basedn' => '[Basedn de la recherche]',\n 'onlyAccessible' => '[Bool\u00e9en]'\n ),\n 'OTHER_ATTRIBUTE' => '[attr]',\n // Or :\n 'OTHER_ATTRIBUTE' => array(\n '[attr1]' => '[label1]',\n '[attr2]' => '[label2]',\n [...]\n ),\n // Or :\n 'OTHER_ATTRIBUTE' => array(\n 'attr' => [attr],\n 'json_component_key' => '[Composant JSON cl\u00e9]',\n 'json_component_label' => '[Composant JSON label]',\n ),\n array (\n 'label' => '[LSformat du nom du groupe de valeurs]',\n 'possible_values' => array (\n '[LSformat de la valeur cl\u00e9]' => '[LSformat du nom d'affichage]',\n ...\n 'OTHER_OBJECT' => array (\n ...\n )\n )\n )\n ),\n 'get_possible_values' => [callable],\n 'translate_labels' => [bool\u00e9en],\n 'sort' => [Bool\u00e9en],\n 'sortDirection' => '[ASC|DESC]'\n),\n...\n
possible_values
Tableau associatif obligatoire contenant en valeur cl\u00e9 le LSformat des valeurs cl\u00e9s prisent par l'attribut et en valeurs associ\u00e9es, le LSformat des noms d'affichage de ces valeurs. Ces LSformats sont compos\u00e9s \u00e0 partir des valeurs de l'objet courant (attributs, dn, ...).
Si la valeur cl\u00e9 est \u00e9gale \u00e0 OTHER_OBJECT
, une liste d'LSobject sera ins\u00e9r\u00e9e dans la liste des valeurs possibles. La valeur associ\u00e9e est alors un tableau associatif dont les valeurs cl\u00e9s sont les noms des param\u00e8tres de configuration de la recherche de ces LSobjects et les valeurs associ\u00e9es, les valeurs des param\u00e8tres.
Il est possible de regrouper des valeurs de l'attribut en pla\u00e7ant leur d\u00e9claration dans un sous-tableau. Ce sous-tableau devra contenir la cl\u00e9 label
dont la valeur associ\u00e9 sera le LSformat du nom du groupe de valeurs. Ce LSformat est compos\u00e9 \u00e0 partir des valeurs de l'objet courant (attributs, dn, ...). Une seconde cl\u00e9 possible_values
regroupera les valeurs possibles du groupe. Comme pour le tableau principal, la cl\u00e9 OTHER_OBJECT
permet d'imcorporer une liste d'LSobject.
object_type
Nom du type d'LSobject en r\u00e9f\u00e9rence.
display_name_format
LSformat du nom d'affichage des objets lors de leur s\u00e9lection.
value_attribute
Nom de l'attribut des LSobjects en r\u00e9f\u00e9rence servant de valeur cl\u00e9 et permettant de les identifier (Exemple : dn
ou uid
).
values_attribute
Nom de l'attribut des LSobjects en r\u00e9f\u00e9rence servant de catalogue de valeurs. Dans ce mode, la valeur n'a pas de label et est affich\u00e9e directement dans l'interface. Ce param\u00e8tre peut-\u00eatre utilis\u00e9 en compl\u00e9ment ou non du param\u00e8tre value_attribute
.
filter
Filtre falcultatif de la recherche des LSobjets. Il sera dans tous les cas agr\u00e9ment\u00e9 des valeurs des objectclass du type d'LSobject.
scope
Scope falcultatif de la recherche des LSobjets.
basedn
Basedn falcultatif de la recherche des LSobjets.
onlyAccessible
Bool\u00e9en falcultatif d\u00e9finissant si seul les LSobjets auxquels l'utilisateur connect\u00e9 \u00e0 acc\u00e8s doivent \u00eatre consid\u00e9r\u00e9s comme s\u00e9lectionnables (Faux par d\u00e9faut).
Si la valeur cl\u00e9 est \u00e9gale \u00e0 OTHER_ATTRIBTE
, une liste de valeur possible sera compos\u00e9e \u00e0 l'aide des valeurs d'un (ou plusieurs) autre attribut de l'objet courant. La valeur associ\u00e9e peut \u00eatre alors\u00a0:
attr
dont les valeurs seront utilis\u00e9es comme valeurs possibles. Cet attribut peut-\u00eatre du type LSattr_html_jsonCompositeAttribute. Il sera alors possible d'utiliser les valeurs d'un composant en particulier en le r\u00e9f\u00e9ren\u00e7ant \u00e0 l'aide de la cl\u00e9 json_component_key
. Il est \u00e9galement possible de r\u00e9f\u00e9rencer un autre composant \u00e0 l'aide de la cl\u00e9 json_component_label
et dont les valeurs seront utilis\u00e9es comme valeurs affich\u00e9es lors de la s\u00e9lection. \u00c0 d\u00e9faut, les valeurs affich\u00e9es seront identiques \u00e0 celles stock\u00e9es.get_possible_values
Param\u00e8tre permettant de sp\u00e9cifier un callable qui sera utilis\u00e9 pour lister les valeurs possibles de l'attribut. Il recevra en param\u00e8tres les informations suivantes:
$options
Les options HTML de l'attribut.
$name
Le nom de l'attribut.
&$ldapObject
Une r\u00e9f\u00e9rence \u00e0 l'objet LSldapObject
.
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\u00e9 et le label correspondant en tant que valeur. Tout autre retour sera consid\u00e9r\u00e9 comme un \u00e9chec et d\u00e9clenchera une erreur.
Il est \u00e9galement possible de regrouper des valeurs possibles de l'attribut: pour cela, le tableau retourn\u00e9 devra lui-m\u00eame contenir un tableau associatif contenant la label traduit du groupe sous la cl\u00e9 label
et les valeurs possibles du groupe sous la cl\u00e9 possible_values
.
Les valeurs retourn\u00e9es pourront \u00eatre combin\u00e9es avec les autres valeurs possibles configur\u00e9es de l'attribut. La prise en charge du tri des valeurs possibles est assur\u00e9e par la fonction appelante sauf dans le cas des sous-groupes de valeurs possibles. Dans ce cas, la m\u00e9thode LSattr_html_select_list :: _sort()
pourra \u00eatre utilis\u00e9e pour trier les valeurs du sous-groupe : cette m\u00e9thode accepte en param\u00e8tre une r\u00e9f\u00e9rence du tableau des valeurs possibles ainsi que les options HTML de l'attribut.
Si la traduction des labels des valeurs possibles de l'attribut est activ\u00e9es (voir ci-dessous), celle-ci doit \u00eatre prise en charge par la fonction configur\u00e9e.
translate_labels
Bool\u00e9en permettant d'activer/d\u00e9sactiver la traduction des labels (Par d\u00e9faut : True
).
sort
Bool\u00e9en d\u00e9finissant si les valeurs possibles doivent \u00eatre tri\u00e9es ou non (Vrai par d\u00e9faut). Le trie est effectu\u00e9 sur les libell\u00e9s des valeurs possibles.
sortDirection
Mot cl\u00e9 d\u00e9terminant le sens du trie des valeurs possibles.
Valeurs possibles : ASC
ou DESC
(ASC
par d\u00e9faut).
Ce type est utilis\u00e9 pour la gestion des attributs dont les valeurs sont des r\u00e9f\u00e9rences \u00e0 d'autres LSobjects. Chaque r\u00e9f\u00e9rence \u00e0 un objet correspond \u00e0 une valeur prise par l'attribut. Les valeurs cl\u00e9s r\u00e9f\u00e9rant \u00e0 un LSobject sont soit la valeur d'un de leurs attributs, soit leur DN.
'html_options' => array (\n selectable_object => array (\n array (\n 'object_type' => '[Type d'LSobject selectionnable]',\n 'display_name_format' => '[LSformat du nom d'affichage des LSobjects]',\n 'value_attribute' => '[Nom de l'attribut cl\u00e9 des LSobjects]',\n 'filter' => '[Filtre de recherche]',\n 'onlyAccessible' => '[Bool\u00e9en]'\n ),\n [...]\n ),\n 'ordered' => [Bool\u00e9en],\n 'sort' => [Bool\u00e9en],\n 'sortDirection' => '[ASC|DESC]'\n),\n...\n
selectable_object
Tableau dont chaque valeur correspond \u00e0 un tableau associatif sp\u00e9cifiant un type d'LSobject s\u00e9lectionnable. Pour chaque type d'objet s\u00e9lectionnable, les param\u00e8tres suivants doivent \u00eatre renseign\u00e9s :
object_type
Nom du type d'LSobject en r\u00e9f\u00e9rence (Param\u00e8tre obligatoire).
display_name_format
LSformat du nom d'affichage des objets lors de leur s\u00e9lection (Param\u00e8tre facultatif).
value_attribute
Nom de l'attribut des LSobjects en r\u00e9f\u00e9rence servant de valeur cl\u00e9 et permettant de les identifier (Param\u00e8tre obligatoire, exemples : dn
ou uid
).
filter
Filtre de recherche qui sera ajouter au filtre par d\u00e9faut lors de la s\u00e9lection des objets (Param\u00e8tre facultatif).
onlyAccessible
Bool\u00e9en d\u00e9finissant si seul les LSobjets auxquels l'utilisateur connect\u00e9 \u00e0 acc\u00e8s doivent \u00eatre consid\u00e9r\u00e9s comme s\u00e9lectionnables (Param\u00e8tre facultatif, par d\u00e9faut: False
).
ordered
Bool\u00e9en d\u00e9finissant si la liste des objets choisis doit \u00eatre ordonnable ou non (Param\u00e8tre facultatif, par d\u00e9faut: False
). Cela aura pour effet d'activer une fonctionnalit\u00e9 dynamique de l'interface permettant de remonter ou descendre dans la liste les objets choisis.
Note
Cette fonctionnalit\u00e9 d\u00e9sactive automatiquement le trie des objets \u00e0 l'affichage.
sort
Bool\u00e9en d\u00e9finissant si la liste des objets choisis doit \u00eatre tri\u00e9e ou non (Param\u00e8tre facultatif, par d\u00e9faut: True
). Le trie est effectu\u00e9 sur les libell\u00e9s des objets choisis.
sortDirection
Mot cl\u00e9 d\u00e9terminant le sens du trie des objets choisis.
Valeurs possibles : ASC
ou DESC
(ASC
par d\u00e9faut).
Ce type est utilis\u00e9 pour la gestion des attributs dont la valeur est une clef publique SSH. Il permet dans l'interface, d'avoir un affichage adapt\u00e9 \u00e0 ce type de donn\u00e9e.
"},{"location":"conf/LSobject/LSattribute/LSattr_html/LSattr_html_tel/","title":"LSattr_html_tel","text":"Ce type est utilis\u00e9 pour la gestion des attributs dont la valeur est un num\u00e9ro de t\u00e9l\u00e9phone. Lors de l'affichage, un lien hypertexte avec une URI de type tel:~~
est affich\u00e9.
Important
Ce type d'attribut HTML est d\u00e9riv\u00e9 du type text. Il profite donc de toutes les fonctionnalit\u00e9s d'un champ de ce type (autog\u00e9n\u00e9ration, ...).
"},{"location":"conf/LSobject/LSattribute/LSattr_html/LSattr_html_text/","title":"LSattr_html_text","text":"Ce type est utilis\u00e9 pour la gestion des attributs dont la valeur est une cha\u00eene de caract\u00e8res devant \u00eatre affich\u00e9e dans un champ input HTML de type text.
'html_options' => array(\n 'generate_value_format' => '[LSformat pour la g\u00e9n\u00e9ration de la valeur]',\n 'autoGenerateOnCreate' => [bool\u00e9en],\n 'autoGenerateOnModify' => [bool\u00e9en],\n 'withoutAccent' => [booleen],\n 'replaceSpaces' => \"[cha\u00eene de remplacement]\",\n 'upperCase' => [booleen],\n 'lowerCase' => [booleen],\n\n // Autocompl\u00e9tion\n 'autocomplete' => array (\n 'object_type' => '[Type d'LSobject]', // facultatif (voir ci-dessous)\n 'value_attributes' => array (\n '[attr1]',\n '[attr2]',\n [...]\n ),\n 'filter' => '[filtre LDAP]',\n 'basedn' => '[base DN sp\u00e9cifique]',\n 'scope' => '[scope de recherche]',\n 'displayFormat' => '[LSformat]',\n 'onlyAccessible' => [bool\u00e9en],\n ),\n\n),\n...\n
generate_value_format
LSformat de la valeur utilis\u00e9e pour la g\u00e9n\u00e9ration automatique de celle-ci \u00e0 partir des informations saisies dans le formulaire. Les valeurs clefs du format sont les noms des attributs de l'objet. Seuls les attributs affich\u00e9s au moins en lecture seule dans le formulaire peuvent \u00eatre utilis\u00e9s dans le format. Une seule valeur par attribut sera utilis\u00e9e pour la g\u00e9n\u00e9ration : celle du premier champ (dans l'ordre d'apparition dans le formulaire).
Important
Seuls les \u00e9l\u00e9ments du formulaire de type HTML input, select ou textarea peuvent \u00eatre utilis\u00e9s.
autoGenerateOnCreate
Activation de la g\u00e9n\u00e9ration automatique lorsque celui-ci est vide au moment du chargement du formulaire (par d\u00e9faut : False
).
autoGenerateOnModify
Activation de la g\u00e9n\u00e9ration automatique lors de chaque modification de la valeur des champs du formulaire li\u00e9 (par d\u00e9faut : False
).
withoutAccent
Activation de la suppression des accents dans la cha\u00eene de caract\u00e8res g\u00e9n\u00e9r\u00e9e automatiquement (par d\u00e9faut : False
).
withoutAccent
Activation du remplacement des accents dans la cha\u00eene de caract\u00e8res g\u00e9n\u00e9r\u00e9e automatiquement. La valeur de remplacement est celle du param\u00e8tre (par d\u00e9faut : False
).
upperCase
Activation de la mise en majuscule de la valeur g\u00e9n\u00e9r\u00e9e automatiquement (par d\u00e9faut : False
).
lowerCase
Activation de la mise en minuscule de la valeur g\u00e9n\u00e9r\u00e9e automatiquement (par d\u00e9faut : False
).
autocomplete
Param\u00e8trage de l'autocompl\u00e9tion des valeurs saisies : on param\u00e8tre ici la recherche des valeurs possibles de l'attribut dans l'annuaire qui peut se faire :
value_attributes
correspondant.Les param\u00e8tres associ\u00e9s \u00e0 ces deux cas de figure sont d\u00e9crits ci-dessous :
object_type
Le type d'LSobject recherch\u00e9.
value_attributes
Le(s) nom de l'attribut stockant les valeurs possibles recherch\u00e9es. Il peut s'agir d'une cha\u00eene de caract\u00e8res ou d'un tableau s'il y a plusieurs attributs.
pattern_filter
Le LSformat du filtre de recherche \u00e0 partir du mot cl\u00e9 recherch\u00e9. Ce param\u00e8tre est facultatif et utile que dans le cas d'une recherche sans type d'LSobject pr\u00e9cis. S'il est d\u00e9fini, ce LSformat sera compos\u00e9 \u00e0 l'aide du mot cl\u00e9 recherch\u00e9. \u00c0 d\u00e9faut, le filtre de recherche sera compos\u00e9 \u00e0 l'aide des diff\u00e9rents value_attributes
configur\u00e9s.
filter
Un filtre de recherche facultatif venant en plus de celui calcul\u00e9 automatiquement \u00e0 partir du mot cl\u00e9 de recherche.
basedn
Le basedn de la recherche. Param\u00e8tre facultatif.
scope
Le scope de la recherche. Param\u00e8tre facultatif, par d\u00e9faut : sub
.
display_name_format
Le LSformat d'affichage des objets trouv\u00e9s. Ce param\u00e8tre est facultatif et par d\u00e9faut, il s'agira du format d'affichage propre au type d'LSobject (si d\u00e9fini) et \u00e0 d\u00e9faut, la valeur possible trouv\u00e9e sera affich\u00e9e. Si est configur\u00e9, ce LSformat sera compos\u00e9 \u00e0 l'aide des valeurs brutes des attributs des objets correspondants avec en plus la valeur possible trouv\u00e9e dans le mot cl\u00e9 value
.
only_accessible
Bool\u00e9en falcultatif d\u00e9finissant si seul les LSobjects auxquels l'utilisateur connect\u00e9 \u00e0 acc\u00e8s doivent \u00eatre consid\u00e9r\u00e9s comme s\u00e9lectionnables (Faux par d\u00e9faut). Ce param\u00e8tre n'est appliqu\u00e9 que dans le cas d'une recherche pour un type d'LSobject donn\u00e9.
Ce type est utilis\u00e9 pour la gestion des attributs dont la valeur est une chaine de caract\u00e8res trop longue pour \u00eatre saisie dans un champs HTML imput de type text et est plus adapt\u00e9 \u00e0 un champ HTML textarea.
"},{"location":"conf/LSobject/LSattribute/LSattr_html/LSattr_html_url/","title":"LSattr_html_url","text":"Ce type est utilis\u00e9 pour la gestion des attributs dont la valeur est une URL. Il propose directement dans l'interface, la possibilit\u00e9 d'acc\u00e8der au site ou encore de l'ajouter dans ses favoris (lorsque le navigateur le supporte).
Important
Ce type d'attribut HTML est d\u00e9riv\u00e9 du type text. Il profite donc de toutes les fonctionnalit\u00e9s d'un champ de ce type (autog\u00e9n\u00e9ration, ...).
"},{"location":"conf/LSobject/LSattribute/LSattr_html/LSattr_html_valueWithUnit/","title":"LSattr_html_valueWithUnit","text":"Ce type est utilis\u00e9 pour la gestion des attributs dont la valeur est un entier auxquel un facteur peut s'appliquer (par exemple : Kilo, M\u00e9ga, ...
).
'html_options' => array(\n 'units' => array (\n '[facteur1]' => '[label unit1]',\n '[facteur2]' => '[label unit2]',\n [...]\n ),\n 'translate_labels' => [bool\u00e9en],\n 'nb_decimals' => [number of decimals],\n 'dec_point' => '[decimals point]',\n 'thousands_sep' => '[thousands separator]',\n 'store_integer' => [bool\u00e9en],\n 'round_down' => [bool\u00e9en],\n )\n),\n...\n
units
Tableau associatif dont la cl\u00e9 est un entier correspondant au facteur et la valeur est le label de l'unit\u00e9. (Par exemple : 1 => Octet, 1024 => Kilo-octet, ...
).
translate_labels
Bool\u00e9en permettant d'activer/d\u00e9sactiver la traduction des labels (Par d\u00e9faut : True
).
nb_decimals
Le nombre de d\u00e9cimals \u00e0 afficher en cas de nombre non-entier (Par d\u00e9faut : 2
).
dec_point
Le caract\u00e8re \u00e0 utiliser comme s\u00e9parateur de d\u00e9cimal (Par d\u00e9faut, une virgule).
thousands_sep
Le caract\u00e8re \u00e0 utiliser comme s\u00e9parateur de milliers (Par d\u00e9faut, un espace).
store_integer
Bool\u00e9en permettant d'activer/d\u00e9sactiver le stockage de valeurs enti\u00e8res (Par d\u00e9faut : True
).
round_down
Bool\u00e9en permettant d'arrondir \u00e0 l'entier inf\u00e9rieur (et non \u00e0 l'entier sup\u00e9rieur par d\u00e9faut) en cas de stockage de valeurs enti\u00e8res.
Ce type est utilis\u00e9 pour la gestion des attributs dont la valeur est du code HTML et dont l'\u00e9dition doit \u00eatre fait \u00e0 l'aide d'un \u00e9diteur WYSIWYG. La librairie TinyMCE est utilis\u00e9e pour cela.
'html_options' => array(\n 'extra_options' => array (\n [Options \u00e0 passer \u00e0 TinyMCE]\n ),\n),\n...\n
extra_options
Ce param\u00e8tre permet de passer des options \u00e0 TinyMCE pour personnaliser son comportement. Par exemple, il est possible d'utiliser le param\u00e8tre valid_styles
pour d\u00e9finir quels styles CSS sont autoris\u00e9s. Pour plus d'informations, consultez la documentation de TinyMCE .
Ce type est utilis\u00e9 pour la gestion des attributs dont la valeur est une adresse XMPP. Il propose directement dans l'interface, la possibilit\u00e9 de lancer une fen\u00eatre de dialogue avec l'interlocuteur de son client XMPP pr\u00e9f\u00e9r\u00e9.
Note
Cette fonctionnalit\u00e9 n'est support\u00e9 uniquement par les navigateurs web supportant les URI de type xmpp://
.
Important
Ce type d'attribut HTML est d\u00e9riv\u00e9 du type text. Il profite donc de toutes les fonctionnalit\u00e9s d'un champ de ce type (autog\u00e9n\u00e9ration, ...).
"},{"location":"conf/LSobject/LSattribute/LSattr_ldap/","title":"Configuration des attributs LDAP (LSattr_ldap)","text":"Cette section d\u00e9crit les options propres \u00e0 chacun des types d'attributs LDAP support\u00e9s par LdapSaisie.
"},{"location":"conf/LSobject/LSattribute/LSattr_ldap/LSattr_ldap_ascii/","title":"LSattr_ldap_ascii","text":"Ce type est utilis\u00e9 pour la gestion des attributs dont la valeur est une chaine de caract\u00e8re. Ce type est le type par d\u00e9faut.
"},{"location":"conf/LSobject/LSattribute/LSattr_ldap/LSattr_ldap_boolean/","title":"LSattr_ldap_boolean","text":"Ce type est utilis\u00e9 pour la gestion des attributs dont la valeur est une bool\u00e9en. On attend ici par bool\u00e9en, tout attribut ne pouvant prendre que deux valeurs pr\u00e9-d\u00e9finies correspond pour l'un \u00e0 Oui et l'autre \u00e0 Non
'ldap_options' => array (\n 'true_value' => '[valeur correspondant \u00e0 Vrai]',\n 'false_value' => '[valeur correspondant \u00e0 Faux]'\n),\n...\n
true_value
La valeur de l'attribut correspondant \u00e0 Vrai\u00ad. (Par d\u00e9faut : TRUE
)
false_value
La valeur de l'attribut correspondant \u00e0 False
\u00ad. (Par d\u00e9faut : FALSE
)
Important
Les valeurs possibles pour le param\u00e8tre default_value
sont yes
et no
.
Ce type est utilis\u00e9 pour la gestion des attributs composites dont les valeurs respectent le format suivant : [key1=value1][key2=value2][...]
Ce type d'attribut LDAP sera utilis\u00e9 pour convertir la valeur en son \u00e9quivalent JSON
pour pouvoir \u00eatre trait\u00e9 \u00e0 l'aide du type d' attribut HTML LSattr_html_jsonCompositeAttribute.
Ce type est utilis\u00e9 pour la gestion des attributs dont la valeur est une date.
Note
Au sein d'LdapSaisie, les dates manipul\u00e9es au travers ce type d'attribut LDAP, sont au format timestamp. Il s'agit donc de nombres entiers correpondants au nombre de secondes depuis le 1 janvier 1970.
Le type d'attribut HTML utilis\u00e9 conjointement avec ce type d'attribut LDAP devra \u00eatre pr\u00e9vu pour recevoir et fournir des dates au format timestamp, comme c'est le cas pour le type d'attribut HTML date.
'ldap_options' => array (\n 'timestamp' => [Bool\u00e9en], // Si la date est stock\u00e9e au format timestamp\n 'formats' => array(\n '[Format de stockage principal]', // Par d\u00e9faut : \"YmdHisO\"\n '[Formats de stockage alternatifs]', // Par d\u00e9faut : \"YmdHis.vO\" & \"YmdHis.uO\"\n [...]\n ),\n 'timezone' => '[Fuseau horaire]', // Default : \"UTC\"\n),\n...\n
timestamp
Bool\u00e9en d\u00e9finissant si la date est stock\u00e9e sous la forme d'un timestamp Unix (nombre de secondes depuis le 1er janvier 1970 \u00e0 00:00:00 UTC)\u00ad.
Si timestamp
est vrai, LdapSaisie ne tient pas compte du param\u00e8tre format.
formats
Formats de stockage de la date dans l'annuaire. Ces formats sont compos\u00e9s \u00e0 partir des motifs cl\u00e9s g\u00e9r\u00e9s par la fonction date()
de PHP. Pour plus d'information, consulter la documentation officielle. Plusieurs formats peuvent \u00eatre d\u00e9finis, mais en cas de stockage d'une nouvelle valeur, se sera le premier format d\u00e9fini qui sera utilis\u00e9.
Note
La valeur par d\u00e9faut est [\"YmdHisO\", \"YmdHis.vO\", \"YmdHis.uO\"], correspondant \u00e0 la syntaxe Generalized Time
(sans et avec les milli-secondes ou micro-secondes) telle que d\u00e9finie dans la RFC4517. Exemples : 20091206230506Z
(=2009/12/06 23:05:66 UTC), 20190613143537+0200
(=2019/06/13 14:35:37 UTC+0200) ou 20230818121005.307+0200
(=2023/08/18 12:10:05.307 UTC+0200).
Warning
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\u00e9rer l'interpratation des valeurs stock\u00e9es, en outre le type d'attribut LSattr_html_date, s'appuyant sur les m\u00e9thodes standards strftime()
et strptime()
, ne permettra pas aujourd'hui leur saisie et affichage.
timezone
Fuseau horaire de stockage des dates dans l'annuaire LDAP. Les valeurs possibles sont document\u00e9es dans la documentation officielle de PHP. (Par d\u00e9faut : UTC
)
Ce type est utilis\u00e9 pour la gestion des attributs dont la valeur est une image. Pour le moment, aucun traitement particulier n'est appliqu\u00e9 pour le stockage.
"},{"location":"conf/LSobject/LSattribute/LSattr_ldap/LSattr_ldap_naiveDate/","title":"LSattr_ldap_naiveDate","text":"Ce type est utilis\u00e9 pour la gestion des attributs dont la valeur est une date dont la timezone doit \u00eatre ignor\u00e9e. C\u00f4t\u00e9 LDAP, les dates seront stock\u00e9es au format UTC \u00e9tant donn\u00e9e que la syntaxe LDAP exige une timezone, cependant celle-ci sera compl\u00e8tement ignor\u00e9e. Ce type peut-\u00eatre utilis\u00e9 \u00e0 la place du type LSattr_ldap_date.
'ldap_options' => array (\n 'format' => '[Format de stockage]', // Default : \"%Y%m%d%H%M%SZ\"\n),\n...\n
format
Format de stockage de la date dans l'annuaire. Ce format est compos\u00e9 \u00e0 partir des motifs cl\u00e9s g\u00e9r\u00e9s par la fonction strftime()
de PHP. Pour plus d'information, consulter la documentation officielle.
Note
La valeur par d\u00e9faut est %Y%m%d%H%M%SZ, correspondant \u00e0 la syntaxe Generalized Time
(sans les micro-secondes) telle que d\u00e9finie dans la RFC4517. Exemple : 20091206230506Z
(=2009/12/06 23:05:66 UTC).
Ce type est utilis\u00e9 pour la gestion des attributs dont la valeur est un nombre. Pour le moment, aucun traitement particulier est n'appliqu\u00e9 pour le stockage.
"},{"location":"conf/LSobject/LSattribute/LSattr_ldap/LSattr_ldap_password/","title":"LSattr_ldap_password","text":"Ce type est utilis\u00e9 pour la gestion des attributs dont la valeur est un mot de passe.
'ldap_options' => array (\n 'encode' => '[Type d'encodage du mot de passe]',\n 'encode_function' => '[Nom de la fonction d'encodage]',\n 'verify_function' => '[Nom de la fonction de v\u00e9rification]',\n 'no_random_crypt_salt' => '[Bool\u00e9en]', // D\u00e9sactivation de l'utilisation d'une salt al\u00e9atoire\n 'wildcardPassword' => '[mot de passe(s) en clair]',\n 'encodedWildcardPassword' => '[mot de passe(s) encod\u00e9(s)]'\n),\n...\n
encode
Nom du type d'encodage du mot de passe utilis\u00e9. Les types d'encodages support\u00e9s sont les suivants :
argon2
(ou argon2i
, PHP >= 7.2)argon2id
(PHP >= 7.3)md5crypt
crypt
ext_des
blowfish
sha
sha256
sha512
ssha
ssha256
ssha512
smd5
md5
clear
Note
Valeur par d\u00e9faut : md5crypt
Important
Si le type d'encodage est inconnu, ou qu'il n'est pas support\u00e9 par le serveur web, un message d'erreur alertera l'utilisateur et le mot de passe sera stock\u00e9 en clair.
encode_function
Nom d'une function qui sera utilis\u00e9e afin d'encoder le mot de passe. Cette fonction recevra deux param\u00e8tres : le LSldapObject
et le mot de passe en clair.
verify_function
Nom d'une function qui sera utilis\u00e9e afin de valider un mot de passe soumis par l'utilisateur par rapport \u00e0 celui stock\u00e9 dans l'annuaire. Cette fonction recevra trois param\u00e8tres : le LSldapObject
,le mot de passe en clair et le mot de passe hash\u00e9. Si ce param\u00e8tre est omis et que le param\u00e8tre encode_function
est d\u00e9fini, le mot de passe \u00e0 tester sera encod\u00e9 \u00e0 nouveau \u00e0 l'aide de la fonction encode_function
et le r\u00e9sultat sera compar\u00e9 avec le mot de passe stock\u00e9 dans l'annuaire.
no_random_crypt_salt
D\u00e9sactivation de l'utilisation d'une salt g\u00e9n\u00e9r\u00e9e al\u00e9atoirement au profit de l'utilisation des deux premiers caract\u00e8res du mot de passe. Ce param\u00e8tre impacte uniquement le type de cryptage crypt
.
wildcardPassword
Mot de passe (ou tableau de mot de passe) qui sera ajout\u00e9 syst\u00e9matiquement, en plus du mot de passe choisi. Il sera encod\u00e9 de la m\u00eame mani\u00e8re que pour le mot de passe choisi avant enregistrement.
encodedWildcardPassword
Mot de passe (ou tableau de mot de passe) qui sera ajout\u00e9 syst\u00e9matiquement, en plus du mot de passe choisi. Contrairement \u00e0 la directive wildcardPassword
, le mot de passe ne sera pas encod\u00e9 avant enregistrement.
Note
Cette directive peut cohabiter avec sa cousine wildcardPassword
. Les mot de passes contenus dans les deux directives seront alors ajout\u00e9s.
Ce type est utilis\u00e9 pour la gestion des attributs dont la valeur est construite sur le mod\u00e8le de l'attribut standard postalAddress, c'est \u00e0 dire dont les lignes sont s\u00e9par\u00e9es \u00e0 l'aide du caract\u00e8re de d\u00e9limiteur $
.
Lors de la lecture des valeurs de ce type d'attribut dans l'annuaire, les caract\u00e8res $
seront remplac\u00e9s par des caract\u00e8res \\n
et, \u00e0 l'inverse, lors de l'\u00e9criture des valeurs de ce type d'attribut dans l'annuaire, les caract\u00e8res \\n
seront remplac\u00e9s par des caract\u00e8res $
.
Ce type est utilis\u00e9 pour la gestion de l'attribut standard pwdHistory. Cet attribut, accessible en lecture uniquement, stocke dans un format pr\u00e9d\u00e9fini l'historique des mots de passe d'une utilisateur avec pour chaque entr\u00e9e :
Ce type d'attribut LDAP permettra de convertir la valeur en son \u00e9quivalent JSON
pour pouvoir \u00eatre trait\u00e9 \u00e0 l'aide du type d'attribut HTML LSattr_html_jsonCompositeAttribute.
Exemple de valeur de l'attribut pwdHistory :
20201202144718Z#1.3.6.1.4.1.1466.115.121.1.40#105#{SSHA512}XDSiR6Sh6W7gyVIk6Rr2OUv8rNPr+0rHF99d9lcirE/TnnEdkjkncIi5iPubErL5lpfgh8gXLgSfmqvmFcMqXLToC25xIqyk\n
Exemple de valeur tranform\u00e9e :
{\"time\":1606920438,\"syntaxOID\":\"1.3.6.1.4.1.1466.115.121.1.40\",\"length\":105,\"hashed_password\":\"{SSHA512}XDSiR6Sh6W7gyVIk6Rr2OUv8rNPr+0rHF99d9lcirE/TnnEdkjkncIi5iPubErL5lpfgh8gXLgSfmqvmFcMqXLToC25xIqyk\"}\n
Exemple de configuration compl\u00e8te de l'attribut :
'pwdHistory' => array (\n 'label' => 'Passwords in history',\n 'ldap_type' => 'pwdHistory',\n 'html_type' => 'jsonCompositeAttribute',\n 'html_options' => array (\n 'components' => array (\n 'time' => array (\n 'label' => 'Date added to history',\n 'type' => 'text',\n 'required' => true,\n 'multiple' => false,\n ),\n 'syntaxOID' => array (\n 'label' => 'Syntax OID',\n 'type' => 'text',\n 'required' => true,\n 'multiple' => false,\n ),\n 'length' => array (\n 'label' => 'Length',\n 'type' => 'text',\n 'required' => true,\n 'multiple' => false,\n ),\n 'hashed_password' => array (\n 'label' => 'Hashed password',\n 'type' => 'text',\n 'required' => true,\n 'multiple' => false,\n ),\n ),\n ),\n 'no_value_label' => 'History is empty.',\n 'multiple' => 1,\n 'rights' => array(\n 'admin' => 'r',\n ),\n 'view' => 1,\n),\n
La date et heure de l'ajout du mot de passe dans l'historique est convertie dans un format lisible. Par d\u00e9faut, ce format est AAAA/MM/JJ HH:MM:SS
, mais il peut aussi est personnalis\u00e9 via le param\u00e8tre date_format
. Ce format est compos\u00e9 \u00e0 partir des motifs cl\u00e9s g\u00e9r\u00e9s par la fonction date()
de PHP. Pour plus d'information, consulter la documentation officielle.
Note
La valeur par d\u00e9faut est YmdHisO, correspondant \u00e0 la syntaxe Generalized Time
telle que d\u00e9finie dans la RFC4517 et pr\u00e9vu par le Draft-behera-ldap-password-policy sp\u00e9cifiant cet attribut standard.
Ce type est pr\u00e9vu pour g\u00e9rer l'attribut sambaAcctFlags du sch\u00e9ma Samba, qui au travers d'une seule et unique valeur, respectant un format pr\u00e9vu, 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\u00e9s sur le compte. Il est con\u00e7u pour \u00eatre utilis\u00e9 conjointement avec le type d'attribut HTML LSattr_html_sambaAcctFlags.
"},{"location":"conf/LSobject/LSattribute/LSattr_ldap/LSattr_ldap_shadowExpire/","title":"LSattr_ldap_shadowExpire","text":"Ce type est pr\u00e9vu pour g\u00e9rer l'attribut shadowExpire
du sch\u00e9ma 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\u00e9vu pour \u00eatre utilis\u00e9 conjointement avec le type d'attribut HTML LSattr_html_date.
Note
Malgr\u00e9s son nom, ce type d'attribut LDAP peux \u00eatre utilis\u00e9 pour d'autres attributs stockant ce m\u00eame format de date, tel-que l'attribut shadowLastChange
.
Cette section d\u00e9crit la mani\u00e8re de configuer des r\u00e8gles de v\u00e9rification syntaxique sur les donn\u00e9es des attributs. Ces r\u00e8gles seront utilis\u00e9es pour v\u00e9rifier que les valeurs saisies par un utilisateur dans un formulaire sont correctes.
'check_data' => array (\n '[regle1]' => array(\n 'msg' => \"[Message d'erreur]\",\n 'params' => array(\n // Param\u00e8tres de la r\u00e8gle\n )\n ),\n ...\n),\n...\n
Le param\u00e8tre check_data
est un tableau associatif dont les cl\u00e9s sont les noms des r\u00e8gles de v\u00e9rification syntaxique actives et les valeurs associ\u00e9es sont des tableaux associatifs contenant les param\u00e8tres des r\u00e8gles.
msg
Le message d'erreur \u00e0 afficher lors que la r\u00e8gle n'est pas respect\u00e9e (optionnel).
params
Tableau associatif contenant les param\u00e8tres de la r\u00e8gle. Les param\u00e8tres possibles sont propres \u00e0 chaque type de r\u00e8gle. Les cl\u00e8s sont les noms des param\u00e8tres et les valeurs associ\u00e9s, les valeurs des param\u00e8tres.
Cette r\u00e8gle v\u00e9rifie que la valeur est une cha\u00eene de caract\u00e8res compos\u00e9e uniquement de lettres non-accuent\u00e9es, en minuscule ou en majuscule et/ou de chiffres.
withAccents
Si le param\u00e8tre est \u00e0 true, les lettres accentu\u00e9es seront accept\u00e9es.
Cette r\u00e8gle v\u00e9rifie que la valeur saisie est correcte en utilisant une fonction personnalis\u00e9e. Cette fonction devra prendre en param\u00e8tres la valeur \u00e0 valider, le tableau des param\u00e8tres de la r\u00e8gle ainsi qu'un pointeur sur l'objet LSformElement. Sur la base de ses informations, elle devra valider la valeur et retourner True
si la valeur est valide et False
sinon.
callable
Le nom de la fonction (ou tout autre callable
au sens PHP) de validation.
Cette r\u00e8gle v\u00e9rifie que la valeur saisie est bien une date et qu'elle respecte un format pr\u00e9cis.
format
Format de la date \u00e0 respecter. Ce format doit \u00eatre compatible avec la fonction strftime()
de PHP. Voir la documentation de la fonction
special_values
Tableau listant les valeurs sp\u00e9ciales que peut prendre l'attribut. Dans ce tableau, seules les valeurs sont utilis\u00e9es et les cl\u00e9s n'ont pas d'importance. Ces valeurs sp\u00e9ciales n'auront pas forc\u00e9ment besoin de respecter le format attendu.
Cette r\u00e8gle v\u00e9rifie que la valeur saisie ne correspond pas \u00e0 un des mots de passe stock\u00e9s dans d'autres attributs du m\u00eame objet.
Important
Les autres attributs doivent utiliser le type d'attribut LDAP LSattr_ldap_password.
otherPasswordAttributes
La liste des autres attributs dont les mots de passe doivent \u00eatre diff\u00e9rent.
Cette r\u00e8gle v\u00e9rifie que la valeur saisie est bien une adresse e-mail. Il est possible de v\u00e9rifier si elle appartient bien \u00e0 un domaine en particulier ou encore de v\u00e9rifier si le domaine existe et qu'il poss\u00e8de un serveur de mail(MX).
domain
Nom de domaine obligatoire. Ce param\u00e8tre peut \u00eatre une simple chaine correspondant au domaine ou un tableau listant plusieurs domaines possibles.
checkDomain
Bool\u00e9en d\u00e9finissant si le domaine de l'adresse mail doit \u00eatre valid\u00e9e.
Cette r\u00e8gle v\u00e9rifie que la valeur est un fichier dont la taille en octets respecte les limites pass\u00e9es en param\u00e8tre.
minSize
Taille minimum.
maxSize
Taille maximum.
Cette r\u00e8gle v\u00e9rifie que la valeur est une cl\u00e9 publique GPG. Pour cela, la cl\u00e9 est import\u00e9e dans un keyring GnuPG.
"},{"location":"conf/LSobject/LSattribute/check_data/imagefile/","title":"imagefile","text":"Cette r\u00e8gle v\u00e9rifie que la valeur est bien un fichier et que le type mime de celui-ci est bien une image. Cette r\u00e8gle utilise la r\u00e8gle mimetype en sp\u00e9cifiant si l'utilisateur ne le fait pas que le type mime doit respecter la regex suivante : /image\\/.*/
Important
Cette r\u00e8gle est une simple interface \u00e0 la r\u00e8gle mimetype, il est donc possible de passer d'autres param\u00e8tres propres \u00e0 ce type.
"},{"location":"conf/LSobject/LSattribute/check_data/imagesize/","title":"imagesize","text":"Cette r\u00e8gle v\u00e9rifie que la valeur est une image dont la taille en pixels respecte les limites pass\u00e9es en param\u00e8tre.
minWidth
Largeur minimum.
maxWitdh
Largeur maximum.
minHeight
Hauteur minimum.
maxHeight
Hauteur maximum.
Cette r\u00e8gle v\u00e9rifie que la valeur saisie fait partie d'une liste de valeurs autoris\u00e9es (ou interdites).
possible_values
Tableau listant les valeurs autoris\u00e9es.
reverse
Bool\u00e9en permettant d'inverser la logique de validation : si reverse
est vrai, la valeur test\u00e9e sera accept\u00e9e si elle ne fait pas partie des valeurs possibles (Param\u00e8tre facultatif, par d\u00e9faut : False
).
Cette r\u00e8gle v\u00e9rifie que la valeur saisie est un entier. Les param\u00e8tres permettent de sp\u00e9cifier \u00e9ventuellement si la valeur doit \u00eatre positive ou n\u00e9gative et \u00e9galement de borner les valeurs valides.
positive
Bool\u00e9en d\u00e9finissant si la valeur doit \u00eatre positive.
negative
Bool\u00e9en d\u00e9finissant si la valeur doit \u00eatre negative.
min
Valeur minimale (sup\u00e9rieur ou \u00e9gale).
max
Valeur maximale (inf\u00e9rieur ou \u00e9gale).
Cette r\u00e8gle v\u00e9rifie que la valeur est une URI de recherche LDAP valide, c'est \u00e0 dire, par exemple, ldaps://ldap.example.com:636/o=example?attr1,attr2?one?(gidNumber=100)
Cette v\u00e9rification commence par d\u00e9couper la valeur \u00e0 l'aide du s\u00e9p\u00e9rateur ?
et elle s'assure ensuite :
Param\u00eatres de configuration :
check_resolving_ldap_host
Si l'h\u00f4te du serveur LDAP est sp\u00e9cifi\u00e9 et qu'il s'agit d'un nom de domaine valide, un tentative de r\u00e9solution DNS sera \u00e9galement faite (optionnel, par d\u00e9faut : True
).
host_required
Bool\u00e9en d\u00e9termintant si une erreur est relev\u00e9e en cas d'absence de l'h\u00f4te LDAP. (optionnel, par d\u00e9faut : False
)
basedn_required
Bool\u00e9en d\u00e9termintant si une erreur est relev\u00e9e en cas d'absence de base de recherche. (optionnel, par d\u00e9faut : False
)
scope_required
Bool\u00e9en d\u00e9termintant si une erreur est relev\u00e9e en cas d'absence de port\u00e9e de recherche. (optionnel, par d\u00e9faut : True
)
attr_required
Bool\u00e9en d\u00e9termintant si une erreur est relev\u00e9e en cas d'absence d'attribut recherch\u00e9. (optionnel, par d\u00e9faut : False
)
max_attrs_count
Nombre maximum d'attribut recherch\u00e9s. (optionnel, par d\u00e9faut : pas de limite)
filter_required
Bool\u00e9en d\u00e9termintant si une erreur est relev\u00e9e en cas d'absence de filtre de recherche. (optionnel, par d\u00e9faut : False
)
Cette r\u00e8gle v\u00e9rifie que la valeur est une cha\u00eene de caract\u00e8res compos\u00e9e uniquement de lettres non-accuent\u00e9es, en minuscule ou en majuscule.
"},{"location":"conf/LSobject/LSattribute/check_data/maxlength/","title":"maxlength","text":"Cette r\u00e8gle v\u00e9rifie que la valeur saisie est une chaine de caract\u00e8res dont la longueur est inf\u00e9rieur ou \u00e9gale \u00e0 la valeur pass\u00e9es en param\u00e8tre.
limit
Limite sup\u00e9rieur (ou \u00e9gale) de la longueur de la cha\u00eene de carat\u00e8res.
Cette r\u00e8gle v\u00e9rifie que la valeur est bien un fichier et que le type mime de celui-ci est correct. Il est possible de v\u00e9rifier si le type mime fait partie d'une liste ou encore s'il valide une expression r\u00e9guli\u00e8re.
mimeType
Type mime obligatoire. Ce param\u00e8tre peut \u00eatre une simple chaine correspondant au type mime ou un tableau listant plusieurs possibilit\u00e9s.
mimeTypeRegEx
Expression r\u00e9guli\u00e8re que doit respecter le type mime.
Cette r\u00e8gle v\u00e9rifie que la valeur saisie est une chaine de caract\u00e8res dont la longueur est sup\u00e9rieur ou \u00e9gale \u00e0 la valeur pass\u00e9e en param\u00e8tre.
limit
Limite inf\u00e9rieure (ou \u00e9gale) de la longueur de la cha\u00eene de carat\u00e8res.
Cette r\u00e9gle v\u00e9rifie que la valeur est une valeur num\u00e9rique non nulle.
"},{"location":"conf/LSobject/LSattribute/check_data/nopunctuation/","title":"nopunctuation","text":"Cette r\u00e9gle v\u00e9rifie que la valeur est une cha\u00eene de caract\u00e8res ne contenant pas de signe de ponctuation. Les caract\u00e8res suivants sont actuellement exclus : ( ) . \\ / \\ * \\ ^ \\ ? # ! @ $ % + = , \" ' > < ~ [ ] { }
Cette r\u00e8gle v\u00e9rifie que le nombre de valeurs de l'attribut est comprise entre les limites pass\u00e9es en param\u00e8tre.
min
Nombre minimum de valeurs (param\u00e8tre optionnel).
max
Nombre maximum de valeurs (param\u00e8tre optionnel).
Cette r\u00e9gle v\u00e9rifie que la valeur est une valeur num\u00e9rique.
"},{"location":"conf/LSobject/LSattribute/check_data/password/","title":"password","text":"Cette r\u00e8gle v\u00e9rifie que la valeur est un mot de passe respectant la politique de s\u00e9curit\u00e9 d\u00e9finie par les param\u00e8tres de la r\u00e8gle.
minlength
Longueur minimale du mot de passe.
maxlength
Longueur maximale du mot de passe.
prohibitedValues
Tableau de valeurs interdites.
regex
Expression(s) r\u00e9guli\u00e8re(s) que doit respecter le mot de passe. Ce param\u00e8tre peut \u00eatre une expression r\u00e9guli\u00e8re au format PCRE ou un tableau d'expressions r\u00e9guli\u00e8res.
minValidRegex
Le nombre minimum d'expression r\u00e9guli\u00e8re qui doivent \u00eatre valid\u00e9es pour que le mot de passe soit consid\u00e9r\u00e9 comme correct. Ce param\u00e8tre est optionnel, par d\u00e9faut, toutes les expressions r\u00e9guli\u00e8res doivent \u00eatre valid\u00e9es.
Cette r\u00e8gle v\u00e9rifie que la valeur saisie est une chaine de caract\u00e8res dont la longueur est comprise entre deux valeurs pass\u00e9es en param\u00e8tre.
limits
Tableau contenant deux valeurs, la premi\u00e8re \u00e9tant la limite inf\u00e9rieure ou \u00e9gale et la seconde la limite sup\u00e9rieure ou \u00e9gale.
Cette r\u00e8gle v\u00e9rifie que la valeur saisie respecte bien l'expression r\u00e9guli\u00e8re pass\u00e9e en param\u00e8tre.
regex
L'expression r\u00e9guli\u00e8re devant \u00eatre respect\u00e9e. Cette expression r\u00e9guli\u00e8re doit \u00eatre au format PCRE.
Cette r\u00e9gle v\u00e9rifie que la valeur n'est pas une cha\u00eene de caract\u00e8res de longueur nulle.
"},{"location":"conf/LSobject/LSattribute/check_data/ssh_pub_key/","title":"ssh_pub_key","text":"Cette r\u00e8gle v\u00e9rifie que la valeur est une cl\u00e9 publique SSH.
Cette v\u00e9rification utilise tout d'abord une expression r\u00e9guli\u00e8re pour valider la forme syntaxique de la cl\u00e9 publique (ssh-[type] [cl\u00e9 au format base64] [commentaire]
) puis tente de d\u00e9coder la partie en base64 de la cl\u00e9 pour v\u00e9rifier qu'il s'agit bien d'une chaine de caract\u00e8res.
Cette r\u00e9gle v\u00e9rifie que la valeur est un num\u00e9ro de t\u00e9l\u00e9phone fran\u00e7ais. Celui-ci doit respecter l'expression reguli\u00e8re suivante : /^(01|02|03|04|05|06|08|09)[0-9]{8}$/
Cette r\u00e8gle v\u00e9rifie la s\u00e9curit\u00e9 d'un mot de passe en utilisant la librairie ZxcvbnPhp. Cette librairie s'appuie sur un ensemble de v\u00e9rifications permettant de d\u00e9terminer \u00e0 quel point le mot de passe choisi est commun, pr\u00e9visible et plus globalement, estime en combien de temps il pourra \u00eatre cass\u00e9 par une personne malveillante. Sur la base de l'analyse du mot de passe saisi, des conseils seront donn\u00e9s \u00e0 l'utilisateur pour le guider dans le choix d'un mot de passe s\u00fbre.
Warning
La librairie ZxcvbnPhp
n'est compatible qu'avec PHP 7 et sup\u00e9rieur.
minScore
Le score minimal pour que le mot de passe soit accept\u00e9. Il doit s'agir d'un entier cimpris entre 0 (le plus faible) et 4 (le plus s\u00e9curis\u00e9). Param\u00e8tre facultatif valant 4 par d\u00e9faut.
userDataAttrs
Liste d'attributs de l'objet dont les valeurs seront pass\u00e9es \u00e0 la librairie Zxcvbn
qui les consid\u00e9rera comme associ\u00e9s \u00e0 l'utilisateur. Ainsi, par exemple, si l'utilisateur utilise son nom de famille ou encore son pr\u00e9nom dans son mot de passe, la librairie pourra lui indiqu\u00e9 que cela ne le prot\u00e8ge que peut des attaques cibl\u00e9es. Param\u00e8tre facultatif, mais il est fortement conseill\u00e9 de renseigner un maximum d'attributs contenant des informations personnelles relatives \u00e0 l'utilisteur.
showWarning
Bool\u00e9en d\u00e9finissant si les messages d'alertes retourn\u00e9s par la librairie Zxcvbn
doivent \u00eatre affich\u00e9s \u00e0 l'utilisateur. Param\u00e8tre facultatif et vrai par d\u00e9faut.
showSuggestions
Bool\u00e9en d\u00e9finissant si les messages de suggestions retourn\u00e9s par la librairie Zxcvbn
doivent \u00eatre affich\u00e9s \u00e0 l'utilisateur. Param\u00e8tre facultatif et vrai par d\u00e9faut.
zxcvbn_autoload_path
Le chemin vers le fichier de chargement automatique des classes de la librairie ZxcvbnPhp. Ce param\u00e8tre est facultatif et vaut par d\u00e9faut Zxcvbn/autoload.php
, ce qui est adapt\u00e9 si vous utiliser le paquet Debian php-zxcvbn
disponible sur le d\u00e9p\u00f4t Debian du projet LdapSaisie.
La plus grande partie de la configuration globale se trouve dans le fichier config.inc.php
.
// Variables globales\n$GLOBALS['LSconfig'] = array(\n // Variables globales\n);\n\n// Variables et constantes ind\u00e9pendantes\n$var1 = 'val1'\n$var2 = 'val2'\n...\ndefine('CONST1','val1')\ndefine('CONST2','val2')\n...\n
"},{"location":"conf/global/#variables-globales","title":"Variables globales","text":"NetLDAP2
Chemin vers la librairie PEAR Net_LDAP2.
/usr/share/php/Net/LDAP2.php\n
Smarty
Chemin vers le moteur de template Smarty.
/usr/share/php/smarty/libs/Smarty.class.php\n
public_root_url
URL publique de la racine web de l'application. Il peut s'agir d'une URL relative bien qu'une URL absolue soit pr\u00e9f\u00e9rable, notament pour \u00e9viter l'auto-d\u00e9tection de celle-ci lorsque n\u00e9cessaire (lien dans un e-mail par exemple. Par d\u00e9faut : /
.)
Important
Il est indispensable que ce param\u00e8tre soit configur\u00e9 en ad\u00e9quation avec votre environement pour que l'application fonctionne correctement (notament en cas en cas de d\u00e9ploiement dans un sous-dossier ou encore dans le cadre d'un acc\u00e8s \u00e0 l'application au travers un reverse-proxy).
lang
Param\u00e8tre utilis\u00e9 pour l'internationalisation : code de la langue (fr_FR
ou en_US
)
encoding
Encodage de caract\u00e8re (UTF8
)
ldap_servers
Configuration des serveurs LDAP. Voir section concern\u00e9e.
Important
Les variables globales suivantes ont une action globale, mais non-prioritaire sur le comportement de l'application. Il peux \u00eatre red\u00e9fini pour chacun des serveurs LDAP.
cacheLSprofiles
Activation/D\u00e9sactivation de la mise en cache des profils des utilisateurs connect\u00e9s (LSprofiles).
Valeurs possibles : True
ou False
Valeur recommand\u00e9e : True
Valeur par d\u00e9faut : False
cacheSubDn
Activation/D\u00e9sactivation de la mise en cache des niveaux de connexion (subDn) dans l'annuaire.
Valeurs possibles : True
ou False
Valeur recommand\u00e9e : True
Valeur par d\u00e9faut : False
cacheSearch
Activation/D\u00e9sactivation de la mise en cache du r\u00e9sultat des recherches dans l'annuaire.
Valeurs possibles : True
ou False
Valeur recommand\u00e9e : True
Valeur par d\u00e9faut : False
globalSearch
Activation/D\u00e9sactivation de la recherche globale dans l'annuaire.
Valeurs possibles : True
ou False
Valeur par d\u00e9faut : True
keepLSsessionActive
Activation/D\u00e9sactivation du maintient de la LSsession active.
Valeurs possibles : True
ou False
Valeur par d\u00e9faut : False
LS_THEME
Constante d\u00e9terminant le nom du theme utilis\u00e9.
Valeur par d\u00e9faut : default
LS_TEMPLATES_DIR
Constante d\u00e9terminant le chemin du dossier des templates.
Valeur par d\u00e9faut : templates
LS_IMAGES_DIR
Constante d\u00e9terminant le chemin du dossier des images.
Valeur par d\u00e9faut : images
LS_CSS_DIR
Constante d\u00e9terminant le chemin du dossier des CSS.
Valeur par d\u00e9faut : css
LSdebug
Variable bool\u00e9enne d\u00e9terminant si le d\u00e9bogage \u00e0 l'\u00e9cran est activ\u00e9.
$GLOBALS['LSlog']
Variable permettant de configurer la journalisation de l'application. Voir section concern\u00e9e.
NB_LSOBJECT_LIST
Constante d\u00e9terminant le nombre d'objet affich\u00e9s par page de r\u00e9sultat de recherche.
NB_LSOBJECT_LIST_SELECT
Constante d\u00e9terminant le nombre d'objet affich\u00e9s par page de r\u00e9sultat de recherche dans une fen\u00eatre LSselect.
$GLOBALS['NB_LSOBJECT_LIST_CHOICES']
Variable permettant de configurer la liste des choix propos\u00e9s \u00e0 l'utilisateur pour le nombre maximum d'objets affich\u00e9s par page de r\u00e9sultat de recherche.
MAX_SEND_FILE_SIZE
Constante d\u00e9terminant la taille maximale d'un fichier envoy\u00e9 \u00e0 travers les formulaires.
$GLOBALS['defaultJSscripts']
Tableau d\u00e9terminant les fichiers Javascript \u00e0 charger sur toute les pages.
$GLOBALS['defaultCSSfiles']
Tableau d\u00e9terminant les fichiers CSS \u00e0 charger sur toute les pages. Ces fichiers seront charg\u00e9s dans l'ordre et en dernier permettant de surcharger tous param\u00e8tres de style.
Les param\u00e8tres des recherches sont ceux support\u00e9s par Net_LDAP2. Ces param\u00e8tres sont pass\u00e9s sous la forme d'un tableau associatif. Les param\u00e8tres support\u00e9s sont d\u00e9taill\u00e9s ci-dessous :
Nom Description Valeur par d\u00e9fautscope
D\u00e9finition de l'\u00e9tendue de la recherche :
base
- Sur une entr\u00e9e seulement
one
- Sur les entr\u00e9es im\u00e9diatement contenu par le basedn
de la recherche
sub
- Sur l'arbre entier
sub
sizelimit
Le nombre maximum d'entr\u00e9es retourn\u00e9es par la recherche. 0
(illimit\u00e9) timelimit
Le d\u00e9lai d'attente maximum de la r\u00e9ponse du serveur en secondes. 0
(illimit\u00e9) attrsonly
Si vrai, seuls les noms des atttributs seront retourn\u00e9s. false
attributes
Tableau contenant les noms des attributs que les entr\u00e9es retourn\u00e9es peuvent contenir et que l'on souhaite r\u00e9cup\u00e9rer. array()
(tous) Pour plus d'information sur le sujet, vous pouvez consulter la documentation officiel du projet Net_LDAP2.
"},{"location":"conf/global/LSformat/","title":"Format param\u00e9trable (LSfomat)","text":"Un format param\u00e9trable est une cha\u00eene de caract\u00e8res contenant des mots cl\u00e9s form\u00e9s comme dans l'exemple suivant\u00a0:
%{[nom du mot cl\u00e9][:A][:B][! ou _][~][%]}\n
Le nom du mot cl\u00e9 peut contenir des lettres de \"a\" \u00e0 \"z\", de \"A\" \u00e0 \"Z\" et des chiffres de 0 \u00e0 9. Ces mots cl\u00e9s seront remplac\u00e9s par les valeurs pass\u00e9es en param\u00e8tres et li\u00e9es au contexte d'utilisation. Les param\u00e8tres :A et :B permettent d'extraire une partie de la cha\u00eene compl\u00e8te avant la substitution.
Le param\u00e8tre A
correspond, lorsque B
n'est pas d\u00e9fini, au nombre maximum de caract\u00e8res \u00e0 extraire de la cha\u00eene de substitution. A doit \u00eatre un entier dont le signe influ, comme expliqu\u00e9 ci-dessous\u00a0:
A
est positif, les A
premiers caract\u00e8res de la cha\u00eene de substitution seront extraits.A
est n\u00e9gatif, les |A|
derniers caract\u00e8res de la cha\u00eene de substitution seront extraits.Lorsque le param\u00e8tre B
est d\u00e9fini, A
correspond au rang du premier caract\u00e8re \u00e0 partir duquel la cha\u00eene de substitution sera d\u00e9coup\u00e9e et B
le nombre maximum de caract\u00e8res \u00e0 extraire. Le signe de B
influera comme expliqu\u00e9 dans le premier cas. Si B
vaut z\u00e9ro, la totalit\u00e9 de la longeur de la cha\u00eene sera retourn\u00e9e en tenant compte de A
pour le rang du premier caract\u00e8re.
Il existe par ailleurs des param\u00e8tres permettant de modifier la valeur de substitution avant son utilisation :
Important
Lorsque qu'une seule valeur cl\u00e9 est disponible pour la substitution, le nom du mot cl\u00e9 n'importe pas. Tous les mots cl\u00e9s trouv\u00e9s dans le format seront remplac\u00e9s par cette seule valeur.
"},{"location":"conf/global/LSlog/","title":"Configuration de la journalisation (LSlog)","text":"Cette section d\u00e9crit le tableau de configuration de la journalisation de l'application.
$GLOBALS['LSlog'] = array(\n 'enable' => [bool\u00e9en],\n 'level' => '[niveau]',\n 'handlers' => array(\n '[handler 1]',\n array (\n 'handler' => [handler 2],\n 'enabled' => [bool\u00e9en],\n 'level' => '[niveau]',\n 'loggers' => array('logger1', [...]),\n 'excluded_loggers' => array('logger2', [...]),\n 'format' => '[LSformat]',\n 'cli_format' => '[LSformat]',\n 'datetime_prefix' => [bool\u00e9en],\n 'datetime_format' => '[format date()]',\n // Autres param\u00e8tres propre \u00e0 ce handler\n [...]\n ),\n [...]\n ),\n 'loggers' => array (\n 'logger1' => array (\n 'level' => 'DEBUG',\n ),\n 'logger2' => array (\n 'enabled' => false,\n ),\n [...]\n );\n);\n...\n
enable
Bool\u00e9en permatant d'activer ou d\u00e9sactiver compl\u00e8tement la journalisation. Par d\u00e9faut : False
level
Ce param\u00e8tre d\u00e9fini le niveau minimum de la journalisation : tous les messages des niveaux inf\u00e9rieurs ne seront pas inclus dans le journal de l'application. Les niveaux de journalisation g\u00e9r\u00e9s par l'application sont (dans l'ordre du plus petit au plus grand) :
TRACE
DEBUG
INFO
WARNING
ERROR
FATAL
handlers
Tableau permettant de configurer les handlers de la journalisation. Chaque handler g\u00e8re les messages journalis\u00e9s d'une mani\u00e8re qui lui est propre.
Plusieurs handlers peuvent \u00eatre configur\u00e9s en m\u00eame temps (y compris plusieurs handlers du m\u00eame type).
Ce tableau peut contenir simplement le nom du type de handler \u00e0 utiliser ou bien des tableaux configurant un \u00e0 un chacun des handlers. Dans ce second cas, la structure de la configuration d'un handler est la suivante :
array(\n 'handler' => [type],\n 'level' => '[niveau]',\n 'loggers' => array('logger1', [...]),\n 'excluded_loggers' => array('logger2', [...]),\n 'format' => '[LSformat]',\n 'cli_format' => '[LSformat]',\n 'datetime_prefix' => [bool\u00e9en],\n 'datetime_format' => '[format date()]',\n // Autres param\u00e8tres propre \u00e0 ce handler\n [...]\n)\n...\n
handler
Type du handler (voir ci-dessous).
level
Ce param\u00e8tre d\u00e9fini le niveau minimum de la journalisation sp\u00e9cifique \u00e0 cet handler. Si ce param\u00e8tre est omis, le niveau global sera utilis\u00e9. Les valeurs possibles de ce param\u00e8tre sont les m\u00eames que pour le param\u00e8tre $GLOBALS['LSlog']['level']
.
enabled
Bool\u00e9en permettant d'activer ou d\u00e9sactiver cet handler (param\u00e8tre facultatif, par d\u00e9faut : True
).
loggers
Liste exhautive des composants dont les messages doivent \u00eatre trait\u00e9s par ce handler (param\u00e8tre facultatif, par d\u00e9faut : tous les composants).
excluded_loggers
Liste exhautive des composants dont les messages ne doivent pas \u00eatre trait\u00e9s par ce handler (param\u00e8tre facultatif, par d\u00e9faut : aucun composant).
format
LSformat des messages de cet journalis\u00e9 par ce handler. Ce format est compos\u00e9 \u00e0 partir des informations d\u00e9critent ci-dessous. Par d\u00e9faut :
%{requesturi} - %{remoteaddr} - %{ldapservername} - %{authuser} - %{logger} - %{level} - %{message}\n
level
Le niveau du message.
message
Le message.
logger
Le composant ayant d\u00e9chench\u00e9 cette journalisation.
clibinpath
Le nom du script ayant d\u00e9clench\u00e9 cette jounalisation (uniquement en cas d'ex\u00e9cution en ligne de commande).
requesturi
L'URL de la page courante (uniquement dans un contexte Web).
remoteaddr
L'adresse IP du client (uniquement dans un contexte Web).
ldapservername
Le nom du serveur LDAP courant.
authuser
Le DN de l'utilisateur connect\u00e9 (uniquement dans un contexte Web).
cli_format
LSformat des messages de cet journalis\u00e9 par ce handler dans le cas d'une ex\u00e9cution en ligne de commande. Ce format est compos\u00e9 \u00e0 partir des m\u00eame informations que le param\u00e8tre format
(voir ci-dessus). Par d\u00e9faut :
%{clibinpath} - %{logger} - %{level} - %{message}\n
datetime_format
Bool\u00e9en permettant de d\u00e9finir si le message doit \u00eatre pr\u00e9fix\u00e9 de la date et heure courante. La valeur par d\u00e9faut d\u00e9pends de l'handler (en r\u00e8gle g\u00e9n\u00e9ral, toujours actif sauf lorsque le canal de journalisation l'ajoute d\u00e9j\u00e0).
datetime_format
Format de la date et heure lorsque celle-ci est ajout\u00e9e en pr\u00e9fixe du message (voir param\u00e8tre datetime_format
). Le format correspond \u00e0 celui attendu par la function date()
de PHP. Consultez la documentation officielle pour plus de d\u00e9tails (Par d\u00e9faut : Y/m/d H:i:s
).
Il existe plusieurs types d'handlers g\u00e9r\u00e9s par l'application :
file
Journalisation dans un simple fichier texte. Le chemin du fichier peut \u00eatre configur\u00e9 via le param\u00e8tre path
. Si ce param\u00e8tre est omis, le chemin du fichier par d\u00e9faut est soit la valeur de la variable $GLOBALS['LSlog']['filename']
(pour la r\u00e9tro-compatibilit\u00e9 avec les anciennes versions d'LdapSaisie) ou \u00e0 d\u00e9faut : tmp/LS.log
.
syslog
Journalisation via le service syslog. Il est possible de configurer une priorit\u00e9 syst\u00e9matique pour les messages journalis\u00e9s. \u00c0 d\u00e9faut, la priorit\u00e9 sera d\u00e9termin\u00e9e automatiquement en fonction du niveau du message. Les valeurs possibles de ce param\u00e8tre sont : EMERG, ALERT, CRITICAL,ERROR, WARNING, NOTICE, INFO, DEBUG
system
Journalisation via le gestionnaire d'erreurs PHP. Cet handler utilise la fonction PHP error_log
. Pour plus d'informations sur comment configurer le gestionnaire d'erreurs PHP, consulter la documentation officielle.
email
Journalisation via l'envoi d'un email : chaque message journalis\u00e9 d\u00e9clenchera l'envoi d'un email au destinataire configur\u00e9. L'adresse email du destinataire peut-\u00eatre configur\u00e9e via le param\u00e8tre recipient
.
Note
Il est conseill\u00e9 d'utiliser ce type d'handler avec un niveau minimum de journalisation important (FATAL
recommand\u00e9) pour ne pas d\u00e9clencher un nombre trop important d'envois d'emails.
loggers
Tableau permettant de configurer la journalisation composant par composant. Chaque composant peut avoir son propre logger
ce qui permet alors, par exemple, de configurer le niveau de log sp\u00e9cifiquement pour ce composant.
Le nom des composant correspond en g\u00e9n\u00e9ral au nom de la classe PHP correspondante, ou bien encore le nom d'une commande (lors d'une ex\u00e9cution en ligne de commande).
Note
Par d\u00e9faut, le nom du composant ayant d\u00e9clench\u00e9 un message journalis\u00e9 est affich\u00e9 juste avant le niveau de log.
enabled
Bool\u00e9en permettant de d\u00e9sactiver compl\u00e8tement les logs du composant (par d\u00e9faut: True
).
level
Niveau de log sp\u00e9cifique pour ce composant (par d\u00e9faut: le niveau de log global).
Cette section d\u00e9crit le tableau de configuration des diff\u00e9rents serveurs LDAP utilis\u00e9s par l'application. Ce tableau contient lui m\u00eame un tableau par serveur LDAP.
$GLOBALS['LSconfig'] = array(\n ...\n 'ldap_servers' => array(\n array (\n 'name' => [nom de l'annuaire],\n 'ldap_config'=> array(\n // D\u00e9finition des param\u00e8tres de connexion \u00e0 l'annuaire\n ),\n 'useUserCredentials' => [boolean],\n 'useAuthzProxyControl' => [boolean],\n 'LSauth' => array (\n 'method' => [LSauth method],\n 'api_method' => [LSauth method],\n 'LSobjects' => array(\n '[object type 1]',\n '[object type 2]' => array(\n 'filter' => '[LDAP filter]',\n 'filter_function' => [callable],\n 'password_attribute' => '[attribute name]',\n 'web_access' => [bool\u00e9en],\n 'api_access' => [bool\u00e9en],\n )\n )\n ),\n 'LSprofiles' => array (\n // D\u00e9finition des LSprofiles\n ),\n 'cacheLSprofiles' => [boolean],\n 'cacheSearch' => [boolean],\n 'globalSearch' => [boolean],\n 'LSaccess' => array (\n [Type LSobject 1],\n [Type LSobject 2],\n ...\n ),\n 'subDn' => array(\n // D\u00e9finition des sous-niveaux de l'annuaire\n ),\n 'subDnLabel' => [nom des sous-niveaux],\n 'recoverPassword' => array(\n // D\u00e9finition des param\u00e8tres de configuration de la r\u00e9cup\u00e9ration de mot de passe\n ),\n 'defaultView' => [view],\n 'emailSender' => [email],\n 'keepLSsessionActive' => [bool\u00e9en]\n )\n ...\n);\n...\n
name
Le nom d'affichage de ce serveur Ldap (utilis\u00e9 lorsque plusieurs serveur LDAP sont d\u00e9clar\u00e9s).
ldap_config
Informations de connexion au serveur LDAP. Ces informations sont structur\u00e9es selon les attentes de la librairie Net_LDAP2. Plus d'informations
useUserCredentials
Bool\u00e9en d\u00e9finissant si il faut utiliser les identifiants de l'utilisateur pour se connecter \u00e0 l'annuaire (false par d\u00e9faut). Si cette option est activ\u00e9e, la connexion \u00e0 l'annuaire LDAP sera \u00e9tablie avec la configuration fournie dans le param\u00e8tre ldap_config en \u00e9crasant les informations de connexion (binddn et bindpwd) par ceux de l'utilisateur. Si l'utilisateur n'est pas encore connect\u00e9, la connexion sera \u00e9talie sans modifier la configuration fournie.
useAuthzProxyControl
Bool\u00e9en d\u00e9finissant si, lorsqu'on utilise les identifiants de l'utilisateur pour se connecter \u00e0 l'annuaire, il faut utiliser une authentification via proxy authorization. Dans ce cas, les identifiants de l'utilisateur ne seront pas, \u00e0 proprement parl\u00e9, utilis\u00e9s pour se connecter \u00e0 l'annuaire, mais une demande de proxy authorization en tant que l'utilisateur connect\u00e9 sera faites \u00e0 l'aide des identifiants de l'application. Ce mode n\u00e9cessite une configuration particuli\u00e8re au niveau de l'annuaire pour autoriser le compte de l'application \u00e0 faire des demandes de proxy authorization en tant que les autres utilisateurs de l'annuaire.
LSprofiles
D\u00e9finition des profils d'utilisateurs se connectant \u00e0 l'annuaire. Voir la section concern\u00e9e.
LSauth
Ce tableau d\u00e9fini les param\u00e8tres d'authentification \u00e0 l'application.
method
Nom de la m\u00e9thode d'authentification LSauthMethod. Exemple : pour utiliser la classe LSauthMethod_HTTP
, la valeur de ce param\u00e8tre sera HTTP
. Param\u00e8tre facultatif, m\u00e9thode par d\u00e9faut : basic
.
api_method
Nom de la m\u00e9thode d'authentification LSauthMethod \u00e0 utilis\u00e9e lors d'une connexion \u00e0 l'API. Exemple : pour utiliser la classe LSauthMethod_HTTP
, la valeur de ce param\u00e8tre sera HTTP
. Param\u00e8tre facultatif, m\u00e9thode par d\u00e9faut : HTTP
.
Warning
Toutes les LSauthMethod ne supportent pas forc\u00e9ment le mode API.
LSobjects
Tableau listant les types LSobjects pouvant se connecter \u00e0 l'application. Les valeurs de ce tableau peuvent \u00eatre un nom de type d'objet ou bien tableau d\u00e9taillant les param\u00e8tres de connexion de ce type d'objet.
filter
LSformat du filtre de recherche de l'utilisateur \u00e0 sa connexion. Ce format sera compos\u00e9 avec l'identifiant fourni par l'utilisateur. Cela peut par exemple permettre \u00e0 l'utilisateur de se connecter en fournissant son login ou son email comme identifiant. Exemple de valeur : (|(uid=%{user})(mail=%{user}))
. Param\u00e8tre facultatif, filtre par d\u00e9faut compos\u00e9 \u00e0 l'aide de l'attribut RDN.
filter_function
Callable (au sens PHP) utilis\u00e9 pour filtrer les utilisateurs trouv\u00e9s dans l'annuaire \u00e0 partir des autres param\u00e8tres : cette fonction, si elle est d\u00e9finie, sera appel\u00e9e pour chaque utilisateur trouv\u00e9, avec pour unique param\u00e8tre, une r\u00e9f\u00e9rence \u00e0 l'objet LDAP correspondant (LSldapObject
). Cette m\u00e9thode devra alors retourner true
ou false
pour respectivement autoriser ou interdire l'acc\u00e8s \u00e0 l'application \u00e0 l'utilisateur.
Note
Si un utilisateur est exclus par cette m\u00e9thode et qu'aucun autre utilisateur correspondant n'a \u00e9t\u00e9 trouv\u00e9 dans l'annuaire, une page d'erreur sera affich\u00e9e et indiquera que l'acc\u00e8s \u00e0 l'application est refus\u00e9e.
password_attribute
Nom de l'attribut stockant le mot de passe de ce type d'LSobject. Param\u00e8tre facultatif, valeur par d\u00e9faut : userPassword
.
Note
C'est cet attribut de l'utilisateur qui sera modifi\u00e9 par la fonctionnalit\u00e9 de r\u00e9cup\u00e9ration de mot de passe.
web_access
Permet de d\u00e9finir si ce type d'objet \u00e0 le droit d'utiliser l'interface web (facultatif, par d\u00e9faut : True
).
api_access
Permet de d\u00e9finir si ce type d'objet \u00e0 le droit d'utiliser l'API (facultatif, par d\u00e9faut : False
).
allow_multi_match
Bool\u00e9en permettant de d\u00e9finir si un doublon d'identifiant utilisateur est autoris\u00e9. Si c'est le cas et lorsqu'un identifiant fourni par l'utilisateur a sa connexion a permi de trouver plus d'un utilisateur possible correspondant, l'application tentera de d\u00e9terminer lequel de ces utilisateurs correspond \u00e0 la tentative d'authentification. La m\u00e9thodologie employ\u00e9e d\u00e9pendra de la LSauthMethod configur\u00e9e. Par exemple, la LSauthMethod basic
tentera de s'identifier avec le mot de passe. Dans tous cas, si cette m\u00e9thode n'a pas permis d'identifier un seul utilisateur, l'authentification \u00e9choura. Param\u00e8tre facultatif, valeur par d\u00e9faut : False
.
cacheLSprofiles
Activation/D\u00e9sactivation de la mise en cache des LSprofiles des utilisateurs connect\u00e9s \u00e0 ce serveur.
Valeur par d\u00e9faut : valeur de la variable globale du m\u00eame nom
cacheSearch
Activation/D\u00e9sactivation de la mise en cache du r\u00e9sultat des recherches sur ce serveur.
Valeur par d\u00e9faut : valeur de la variable globale du m\u00eame nom
globalSearch
Activation/D\u00e9sactivation de la recherche globale sur ce serveur en particulier. Par d\u00e9faut, la valeur du param\u00e8tre global globalSearch
est utilis\u00e9e.
Valeur par d\u00e9faut : valeur de la variable globale du m\u00eame nom
LSaccess
D\u00e9finition des types d'LSobjects devant appara\u00eetre dans le menu de l'interface.
Important
Ce param\u00e8tre n'est utilis\u00e9 que pour les annuaires n'ayant pas de sous-niveaux (subDn).
subDn
D\u00e9finition des sous-niveaux de connexion \u00e0 l'annuaire. Voir section concern\u00e9e.
Important
Ce param\u00e8tre remplace le param\u00e8tre LSaccess dans le cas d'un annuaire multi-niveaux.
subDnLabel
D\u00e9finition du label utilis\u00e9 pour qualifier les sous-niveaux de connexion.
Important
Ce param\u00e8tre est utile uniquement dans le cas d'un annuaire multi-niveaux.
recoverPassword
D\u00e9finition des param\u00e8tres de la r\u00e9cup\u00e9ration de mot de passe. Voir la section concern\u00e9e.
defaultView
D\u00e9finition de la vue par d\u00e9faut de l'application. Par d\u00e9faut, une page blanche est affich\u00e9e et il est possible de d\u00e9finir \u00e0 l'aide de ce param\u00e8tre la vue qui s'affichera. Ce param\u00e8tre peut prendre comme valeur :
SELF
pour la vue Mon compte[addon]::[viewId]
pour afficher cette vueemailSender
Adresse mail utilis\u00e9e par LdapSaisie pour envoyer des e-mails en relation avec cet annuaire. Cette adresse est celle utilis\u00e9e par d\u00e9faut. L'adresse utilis\u00e9e peut \u00e9galement \u00eatre configur\u00e9e dans le contexte de configuration du module devant envoyer des e-mails.
keepLSsessionActive
Activation/D\u00e9sactivation du maintient de la LSsession active.
Valeurs possibles : True
ou False
Valeur par d\u00e9faut : valeur de la variable globale du m\u00eame nom
Cette section d\u00e9crit la mani\u00e8re dont sont d\u00e9finis les profils d'utilisateurs se connectant \u00e0 l'interface appel\u00e9s LSprofile. Il est possible d'attribuer un profil \u00e0 l'utilisateur connect\u00e9 sur tout ou partie de l'annuaire LDAP.
"},{"location":"conf/global/ldap/LSprofile/#profils-dutilisateurs-par-defaut","title":"Profils d'utilisateurs par d\u00e9faut","text":"Il existe des profils d'utilisateurs par d\u00e9faut, non li\u00e9e \u00e0 la configuration de l'application:
user
Tous les utilisateurs connect\u00e9s \u00e0 l'utilisateur. Ce LSprofile est valide sur l'ensemble de l'annuaire.
self
L'utilisateur connect\u00e9 sur son objet correspondant dans l'annuaire. Ce LSprofile est utile pour donner des droits \u00e0 l'utilisateur sur lui-m\u00eame.
nom du type de l'objet connect\u00e9
Un LSprofile du nom du type d'objet utilisateur connect\u00e9 est automatiquement ajout\u00e9 \u00e0 l'utilisateur. Ainsi, si l'utilisateur connect\u00e9 est un LSobject LSpeople
par exemple, il aura le LSprofile LSpeople
sur tous l'annuaire. Ce LSprofile est utile pour donner des droits \u00e0 tous un type d'objets pouvant se connecter \u00e0 l'application (par exemple, tous les utilisateurs applicatifs).
Il est possible de d\u00e9finir autant de profils d'utilisateurs que l'on souhaite. Pour chaque profil d'utilisateur personnalis\u00e9, il faudra d\u00e9finir dans quelles parties de l'annuaire ce profil existe (Exemple : les admistrateurs de groupes existent uniquement dans la branche de l'annuaire stockant les groupes). Enfin pour chaque partie de l'annuaire, il faudra d\u00e9finir la mani\u00e8re d'identifier si l'utilisateur qui se connecte appartient \u00e0 ce profil.
'LSprofile' => array (\n [nom d'un LSprofile] => array (\n [label] => [label du LSprofile],\n [basedn] => [dn utilisateur],\n [autre basedn] => array (\n [dn d'un utilisateur] => NULL,\n [autre dn] => array ( // via un listage de l'attribut d'un objet\n 'attr' => [nom de l'attribut cl\u00e9 de l'objet],\n 'attr_value' => [format de la valeur de l'attribut cl\u00e9],\n 'LSobject' => [nom du type LSobject de l'objet]\n )\n ),\n 'LSobjects' => array ( // via une liste d'objet sur lequel l'utilisateur a des pouvoirs\n [nom du LSobject] => array (\n 'attr' => [nom de l'attribut cl\u00e9],\n 'attr_value' => [format de la valeur de l'attribut cl\u00e9],\n // ou\n 'filter' => [format du filtre de recherche],\n\n 'basedn' => [basedn de recherche],\n 'params' => [configuration de la recherche]\n ),\n [nom quelconque] => array (\n 'filters' => array(\n array(\n 'LSobject' => [nom du LSobject],\n 'attr' => [nom de l'attribut cl\u00e9],\n 'attr_value' => [format de la valeur de l'attribut cl\u00e9],\n // ou\n 'filter' => [format du filtre de recherche],\n\n 'basedn' => [basedn de recherche],\n 'params' => [configuration de la recherche]\n ),\n ),\n ),\n ...\n )\n ),\n ...\n),\n...\n
Le param\u00e8tre LSprofiles
est un tableau associatif contenant, en valeur cl\u00e9, le nom d'un LSprofile et en valeur associ\u00e9e, la configuration n\u00e9cessaire pour d\u00e9terminer si l'utilisateur connect\u00e9 appartient \u00e0 ce LSprofile pour tout ou partie de l'annuaire.
Dans chaque configuration de LSprofile, il est possible d'identifier l'appartenance ou non de l'utilisateur connect\u00e9 de deux mani\u00e8res\u00a0:
Pour une branche de l'annuaire donn\u00e9e (basedn)\u00a0: en listant les utilisateurs appartenant \u00e0 ce LSprofile pour tous les objets de la branche. Il sera possible de lister les utilisateurs dont on connait le DN ou de lister les utilisateurs appartenant \u00e0 une liste stock\u00e9e dans l'annuaire (par exemple la liste des membres d'un groupe).
Liste des DNs d'utilisateurs\u00a0:
'LSprofile' => array (\n [nom du LSprofile] => array (\n [basedn] => [dn utilisateur],\n // ou si plusieurs DNs\n [autre basedn] => array (\n [dn d'un utilisateur] => NULL,\n [dn d'un utilisateur 2] => NULL\n ),\n ...\n ),\n ...\n),\n...\n
Explication\u00a0: Pour un LSprofile et un basedn donn\u00e9s, on d\u00e9finit l'utilisateur appartenant au LSprofile en donnant son DN. Si on souhaite lister plusieurs utilisateurs, on utilise un tableau associatif dans lequel les cl\u00e9s sont les DNs des utilisateurs et les valeurs associ\u00e9es sont toutes NULL.
Liste d'utilisateurs stock\u00e9e dans l'annuaire\u00a0:
'LSprofile' => array (\n [nom du LSprofile] => array (\n [basedn] => array (\n [DN d'un object] => array (\n 'attr' => [nom de l'attribut cl\u00e9 de l'objet],\n 'attr_value' => [format de la valeur de l'attribut cl\u00e9],\n 'LSobject' => [nom du type LSobject de l'objet]\n )\n ),\n ...\n),\n...\n
Explication\u00a0: Pour un LSprofile et un basedn donn\u00e9s, on liste les utilisateurs du LSprofile r\u00e9f\u00e9renc\u00e9s dans l'attribut attr
de l'object de type LSobject
et selon le format de valeur d\u00e9crit dans attr_value
.
Pour un type de LSobject donn\u00e9\u00a0: en listant les objets pour lesquels l'utilisateur aura les droits du LSprofile. Il sera possible, \u00e0 travers une recherche param\u00e9trable dans l'annuaire, de lister les objets pour lesquels l'utilisateur appartiendra au LSprofile.
'LSprofile' => array (\n [nom d'un LSprofile] => array (\n 'LSobjects' => array ( // via un liste d'objet pour lequel l'utilisateur\n // appartient au LSprofile\n [nom du LSobject] => array (\n 'attr' => [nom de l'attribut cl\u00e9],\n 'attr_value' => [format de la valeur de l'attribut cl\u00e9],\n // or\n 'filter' => [format du filtre de recherche],\n\n 'basedn' => [format du basedn de recherche],\n 'params' => [configuration de la recherche]\n ),\n array (\n 'filters' => array(\n array(\n 'LSobject' => [nom du LSobject],\n 'attr' => [nom de l'attribut cl\u00e9],\n 'attr_value' => [format de la valeur de l'attribut cl\u00e9],\n // ou\n 'filter' => [format du filtre de recherche],\n\n 'basedn' => [format du basedn de recherche],\n 'params' => [configuration de la recherche]\n ),\n ),\n ),\n ...\n )\n ),\n ...\n),\n...\n
Explications\u00a0: Dans la configuration d'un LSprofile, la valeur cl\u00e9 LSobjects signifie qu'on est dans un cas de la d\u00e9l\u00e9gation de droits sur des types d'LSobject. Dans ce tableau associatif, il est possible de d\u00e9finir un ou plusieurs types de LSobject pour lesquels on d\u00e9l\u00e8gue des droits via des recherches simples ou encha\u00een\u00e9es. Le fonctionnement simple consiste \u00e0 partir de l'objet de l'utilisateur et \u00e0 g\u00e9n\u00e9rer un filtre et une base de recherche sur un type de LSobject. Le fonctionnement enchain\u00e9e consiste \u00e0 faire un premi\u00e8re recherche \u00e0 partir de l'objet de l'utilisateur puis \u00e0 recommencer \u00e0 partir des objets trouv\u00e9s en construisant une liste de filtres de recherche pour chaque objet qui seront combin\u00e9s via l'op\u00e9rateur bool\u00e9en ou. Dans le cadre d'un fonctionnement enchain\u00e9e, la base de recherche est toujours g\u00e9n\u00e9rer \u00e0 partir de l'objet de l'utilisateur connect\u00e9.
Pour configurer une d\u00e9l\u00e9gation de type simple on mettra le nom du LSobject dans la cl\u00e9 du tableau et dans la valeur un tableau d\u00e9finissant la recherche. Il est possible de ne pas utiliser la cl\u00e9 du tableau comme nom du LSobject gr\u00e2ce \u00e0 la cl\u00e9 de configuration LSobject.
Pour configurer une d\u00e9l\u00e9gation de type encha\u00een\u00e9 on pourra utiliser n'importe quelle valeur unique pour la cl\u00e9 du tableau et pour la valeur un tableau contenant une unique cl\u00e9 filters. La valeur associ\u00e9e \u00e0 cette cl\u00e9 est celle d'une d\u00e9l\u00e9gation de type simple o\u00f9 la cl\u00e9 LSobject est devenue obligatoire.
Cette configuration contient les param\u00e8tres d'une ou plusieurs recherches dans l'annuaire en consid\u00e9rant que l'utilisateur connect\u00e9 aura les droits du LSprofile sur les objets retourn\u00e9s. Les param\u00e8tres de la recherche sont\u00a0:
LSobject
C'est le nom du LSobject recherch\u00e9. (Param\u00e8tre facultatif pour une d\u00e9l\u00e9gation de type simple)
attr
Nom de l'attribut des LSobjets contenant une valeur cl\u00e9 qui permettra d'identifier l'utilisateur comme ayant droit.
attr_value
Le format de la valeur cl\u00e9 prise par l'attribut attr
. Ce format est compos\u00e9 \u00e0 partir des donn\u00e9es de l'objet de l'utilisateur connect\u00e9. Voir le paragraphe Format param\u00e8trable pour plus d'informations sur l'\u00e9criture du format.
filter
Ce param\u00e8tre remplace les param\u00e8tres attr
et attr_value
. Il est possible ici d'\u00e9crire directement le format param\u00e8trable du filtre recherche dans l'annuaire. Ce filtre sera automatiquement agr\u00e9ment\u00e9 des conditions sur l'attribut objectclass. Voir le paragraphe Format param\u00e8trable pour plus d'informations sur l'\u00e9criture du format.
basedn
C'est le format param\u00e9trable du basedn de la recherche g\u00e9n\u00e9r\u00e9 \u00e0 partir de l'utilisateur connect\u00e9. Il est possible ainsi de la limiter sur les LSojects d'une branche pr\u00e9cise de l'annuaire. Voir le paragraphe Format param\u00e8trable pour plus d'informations sur l'\u00e9criture du format. (Param\u00e8tre facultatif)
params
C'est un tableau associatif contenant les param\u00e8tres \u00e9tendus de la recherche. Voir le paragraphe Param\u00e8tres \u00e9tendus des recherches dans l'annuaire pour plus de d\u00e9tails. (Param\u00e8tre facultatif)
Par ailleurs, il est possible d'attribuer un label plus explicite \u00e0 chaque LSprofile \u00e0 l'aide de la cl\u00e9 label
. Ce label sera utilis\u00e9 pour faire r\u00e9f\u00e9rence au LSprofile lorsque n\u00e9c\u00e9ssaire. (Param\u00e8tre facultatif)
Cette section d\u00e9crit la mani\u00e8re de configurer la r\u00e9cup\u00e9ration de mot de passe par les utilisateurs. Le m\u00e9canisme de r\u00e9cup\u00e9ration de mot de passe fonctionne en deux parties\u00a0:
Dans un premier lieu, l'utilisateur ayant perdu son mot de passe acc\u00e8de \u00e0 l'interface de r\u00e9cup\u00e9ration \u00e0 partir de la page de connexion. L'interface lui demande de saisir son identifiant et \u00e9ventuellement de s\u00e9lectionner le serveur LDAP concern\u00e9. Une fois ces informations saisies, une recherche de l'utilisateur est effectu\u00e9e dans l'annuaire et si celui-ci est trouv\u00e9, la valeur de l'attribut recoveryHashAttr
de l'objet est alors red\u00e9finie avec une valeur al\u00e9atoire.
Un mail est ensuite envoy\u00e9 \u00e0 l'utilisateur en utilisant la premi\u00e8re valeur de l'attribut mailAttr
comme adresse. Ce mail est form\u00e9 \u00e0 partir des param\u00e8tres du tableau associatif recoveryHashMail
. Celui-ci doit contenir le sujet du mail dans subject
et le corps du message dans msg
. Ces deux informations sont des formats param\u00e8trables compos\u00e9s avec, comme valeur cl\u00e9, l'URL de retour \u00e0 laquelle l'utilisateur devra se rendre pour acc\u00e8der \u00e0 la seconde \u00e9tape de la r\u00e9cup\u00e9ration de son mot de passe.
L'utilisateur doit donc se rendre sur l'interface par l'interm\u00e9diaire de l'URL qui lui aura \u00e9t\u00e9 fournie dans le mail de l'\u00e9tape pr\u00e9c\u00e9dente. Cette URL contient la valeur de l'attribut recoveryHashAttr
pr\u00e9c\u00e9dement d\u00e9finie. A partir de cette information, une recherche est effectu\u00e9e dans l'annuaire pour retrouver l'utilisateur correspondant.
Si l'utilisateur est retrouv\u00e9, un nouveau mot de passe lui est g\u00e9n\u00e9r\u00e9 en utilisant les param\u00e8tres de configuration \u00e9ventuellement d\u00e9finis dans la configuration HTML de l'attribut \"mot de passe\". Pour avoir plus d'information sur ces param\u00e8tres, consulter la documentation du type d'attribut HTML LSattr_html_password. L'attribut recoveryHashAttr
est quant \u00e0 lui supprim\u00e9.
Ensuite, un mail est compos\u00e9 \u00e0 partir des param\u00e8tres du tableau associatif newPasswordMail
et est envoy\u00e9 \u00e0 l'utilisateur. Ce tableau doit contenir le sujet du mail dans subject
et le corps du message dans msg
. Ces deux informations sont des formats param\u00e8trables compos\u00e9s avec, comme valeur cl\u00e9, le nouveau mot de passe de l'utilisateur.
'recoverPassword' => array(\n 'mailAttr' => '[attribut mail]',\n 'recoveryHashAttr' => '[attribut hash]',\n 'recoveryEmailSender' => '[adresse mail utilis\u00e9e par LdapSaisie pour l'envoi des mails]',\n 'recoveryHashMail' => array( // 1er mail : avec l'URL pour l'acc\u00e8s \u00e0 la 2nde partie\n 'subject' => '[sujet du mail]',\n 'msg' => \"[message contenant le mot cl\u00e9 %{url}]\"\n ),\n 'newPasswordMail' => array( // 2nd mail : avec le mot de passe\n 'subject' => '[sujet du mail]',\n 'msg' => \"[message contenant le mot cl\u00e9 %{mdp}]\"\n )\n),\n...\n
"},{"location":"conf/global/ldap/subDn/","title":"Sous-niveaux de connexion","text":"Cette section d\u00e9crit la mani\u00e8re de d\u00e9finir des sous-niveaux de connexion \u00e0 l'annuaire (subDn). Le concept de sous-niveau de connexion sert \u00e0 d\u00e9clarer les niveaux logiques de l'annuaire. Par exemple, dans un annuaire dans lequel sont stock\u00e9s des objets concernant plusieurs organisations et que celles-ci se distinguent gr\u00e2ce \u00e0 la pr\u00e9sence d'une s\u00e9paration dans l'arbre, il sera alors possible de d\u00e9finir des sous-niveaux de connexion pour chacune des organisations.
Exemple d'arborescence d'annuaire utilisant le concept de sous-niveaux correspondant \u00e0 des soci\u00e9t\u00e9s :
|- o=ls\n| |- ou=companies\n| | |- ou=company1\n| | | |- ou=people\n| | | |- ou=groups\n| | |- ou=company2\n| | | |- ou=people\n| | | |- ou=groups\n| |- ou=people\n| |- ou=groups\n
Explications : Il est possible dans cet exemple de d\u00e9finir des sous-niveaux de connexion correspondants aux soci\u00e9t\u00e9s. Dans chacune de ces soci\u00e9t\u00e9s, on retrouve les OU correspondant au type d'LSobjets. Lors de la connexion \u00e0 l'interface, l'utilisateur devra choisir dans quel sous-niveau de l'annuaire il souhaite se connecter. Une fois connect\u00e9, l'utilisateur manipulera uniquement les objets du sous-niveau de l'annuaire dans lequel il se trouve. Il lui sera \u00e9galement possible de changer de sous-niveau de connexion \u00e0 travers l'interface\u00a0: une liste d\u00e9roulante est disponible pour cela dans le menu.
Il existe deux mani\u00e8res de d\u00e9clarer des sous-niveaux de connexion \u00e0 l'annuaire\u00a0:
Pour chacune de ces m\u00e9thodes on d\u00e9finira \u00e9galement les types d'LSobjets qui sont pr\u00e9sents dans cette branche de l'annuaire.
'subDn' => array(\n // D\u00e9claration manuelle\n '[Nom du sous-niveau]' => array(\n 'dn' => '[basedn du sous-niveau]',\n 'nologin' => true, // D\u00e9sactive la connection dans ce subDn\n 'LSobjects' => array( // Liste des types d'LSobjets pr\u00e9sents dans le sous-niveau\n [LSobject1],\n [LSobject2],\n ...\n )\n ),\n // Liste de LSobjets\n 'LSobject' => array(\n '[type d'LSobject]' => array( // le type d'LSobjet \u00e0 lister\n 'basedn' => '[basedn]', // Le basedn de la recherche\n 'displayValue' => '[format]', // Format du nom des sous-niveaux\n 'nologin' => true, // D\u00e9sactive la connection dans ces subDn\n 'onlyAccessible' => True, // Pour que seul les LSobjet accessible \u00e0 l'utilisateur soit list\u00e9\n 'LSobjects' => array( // Liste des types d'LSobjets pr\u00e9sents dans les sous-niveaux\n [LSobject1],\n [LSobject2],\n ...\n )\n )\n )\n),\n...\n
"},{"location":"contrib/","title":"Contribution","text":"Comme tout projet libre qui se respecte, les contributions \u00e0 LdapSaisie sont les bienvenues. Ce chapitre explique les possibilit\u00e9s de contribution.
"},{"location":"contrib/form-elements/","title":"Les \u00e9l\u00e9ments des formulaires (LSformElement)","text":"Les LSformElements sont les types de champs de formulaire support\u00e9s par l'application.
Pour chaque type impl\u00e9ment\u00e9, on devra trouver :
LSattr_html
et devant s'appeler LSattr_html_[nom du type d'attribut HTML]
. Dans celle-ci, il devra \u00eatre d\u00e9fini \u00e0 minima la variable de classe LSformElement_type
permettant de r\u00e9f\u00e9rencer le type d'LSformElement \u00e0 utiliser ;Une classe PHP d\u00e9riv\u00e9e de la classe LSformElement
et devant s'appeler LSformElement_[nom du type d'LSformElement]
. Cette classe impl\u00e9mentera tout ce qui concerne l'affichage du champ dans le formulaire et le traitement d'une valeur retourn\u00e9e par ce dernier. Cela concerne notamment les m\u00e9thodes suivantes\u00a0:
getDisplay()
Retourne les informations d'affichage du champ dans un formulaire sous la forme d'un tableau (impl\u00e9mentation obligatoire, pas de m\u00e9thode par d\u00e9faut). Il sera possible de s'appuyer sur la m\u00e9thode getLabelInfos()
permettant de g\u00e9n\u00e9rer et r\u00e9cup\u00e9rer tout ce qui concerne le label du champ du formulaire. Il faudra cependant \u00e0 minima fournir \u00e9galement la cl\u00e9 html
dans le tableau retourn\u00e9 qui devra contenir le bout de code HTML correspondant au champ du formulaire. Commun\u00e9ment, ce code HTML est g\u00e9n\u00e9r\u00e9 en appelant la m\u00e9thode fetchTemplate()
.
fetchTemplate()
Retourne le code HTML du champ dans le formulaire. L'impl\u00e9mentation de cette m\u00e9thode est facultative et par d\u00e9faut, cette m\u00e9thode utilisera la variable de classe $template
pour conna\u00eetre le fichier de template \u00e0 utiliser. Ce fichier de template permettra la g\u00e9n\u00e9ration de la liste de tous les champs associ\u00e9s \u00e0 chacune des valeurs de l'attribut. Individuellement, le champ d'une des valeurs de l'attribut est g\u00e9n\u00e9r\u00e9 \u00e0 l'aide du fichier de template r\u00e9f\u00e9renc\u00e9 dans la variable de class $fieldTemplate
.
Note
La variable de classe $fieldTemplate
est \u00e9galement utilis\u00e9e par la m\u00e9thode LSformElement :: getEmptyField()
qui sert \u00e0 g\u00e9n\u00e9rer le code HTML d'un champ du formulaire pour une nouvelle valeur de l'attribut. Cette m\u00e9thode est notamment utilis\u00e9e lorsque l'on clique sur le bouton permettant d'ajouter une valeur \u00e0 un champ du formulaire.
getPostData()
R\u00e9cup\u00e8re dans les donn\u00e9es post\u00e9es par le formulaire, celle concernant ce champ. Cette m\u00e9thode devra potentiellement traiter l'ensemble des valeurs de l'attribut envoy\u00e9es par le formulaire et les d\u00e9finir dans le tableau pass\u00e9 en r\u00e9f\u00e9rence en tant que premier argument, les valeurs de l'attribut. L'impl\u00e9mentation de cette m\u00e9thode est facultative et par d\u00e9faut, un tableau de valeurs portant le nom de l'attribut LDAP correspondant sera r\u00e9cup\u00e9r\u00e9e comme valeur de l'attribut.
Note
Pour plus d'informations sur le r\u00f4le et fonctionnement de cette m\u00e9thode, r\u00e9f\u00e9rer \u00e0 la m\u00e9thode par d\u00e9faut, d\u00e9finie dans la classe PHP parente LSformElement
.
setValueFromPostData()
D\u00e9finit les valeurs de l'attribut \u00e0 partir des donn\u00e9es re\u00e7ues du formulaire (et r\u00e9cup\u00e9r\u00e9es par la m\u00e9thode getPostData
). L'impl\u00e9mentation de cette m\u00e9thode est facultative et par d\u00e9faut, aucune transformation ne sera faites \u00e0 cette \u00e9tape sur les donn\u00e9es r\u00e9cup\u00e9r\u00e9es depuis le formulaire. Impl\u00e9menter cette m\u00e9thode pourra cependant se r\u00e9v\u00e9ler utile en cas de champs de formulaire complexe (attribut composite par exemple).
autocomplete_attr_values()
G\u00e9n\u00e8re de la liste des valeurs possibles de l'attribut dans un contexte CLI.
Note
Pour plus d'informations sur le r\u00f4le et fonctionnement de cette m\u00e9thode, r\u00e9f\u00e9rer aux commentaires de la m\u00e9thode par d\u00e9faut, d\u00e9finie dans la classe PHP parente LSformElement
. Vous pouvez \u00e9galement vous inspirer des exemples d'impl\u00e9mentations fournies avec les autres type d'LSformElement.
LSformElement.tpl
est utilis\u00e9 pour g\u00e9n\u00e9rer la structure de la liste des champs correspondant aux diff\u00e9rentes valeurs de l'attribut. Ce template utilise une variable $fieldTemplate
pour d\u00e9finir quel fichier template devra \u00eatre utilis\u00e9 pour g\u00e9n\u00e9rer le code HTML de chaque champ associ\u00e9s \u00e0 une valeur. C'est ce second fichier de template qui est en g\u00e9n\u00e9ral \u00e0 fournir \u00e0 minima avec votre LSformElement.Note
Il peut \u00eatre utile d'\u00e9tendre un type d'LSformElement existant pour faciliter l'impl\u00e9mentation d'un nouveau type. Pour cela, vous devez utiliser l'h\u00e9ritage de classe PHP en faisant d\u00e9river vos nouvelles classes des classes du LSformElement dont vous vous inspirer, plut\u00f4t que les classes g\u00e9n\u00e9riques. Vous pouvez prendre exemple sur le type d'LSformElement pre
qui s'inspire du type textarea
, ou encore du type url
d\u00e9riv\u00e9 du type text
.
Les LSformRules sont les r\u00e8gles syntaxiques applicables aux champs des formulaires. Ces r\u00e8gles serviront \u00e0 s'assurer que les valeurs des champs r\u00e9cup\u00e9r\u00e9es des formulaires sont syntaxiquement correctes. Elles seront configurables via le param\u00e8tre check_data
des attributs des LSobjects.
Pour chaque type impl\u00e9ment\u00e9, on trouvera une classe PHP d\u00e9riv\u00e9e de la classe LSformRule
et devant s'appeler LSattr_rule_[nom du type]
. Dans celle-ci, il devra \u00eatre d\u00e9fini la m\u00e9thode statique validate()
qui impl\u00e9mentera le contr\u00f4le syntaxique. Cette m\u00e9thode prendra en param\u00e8tres :
$value
La valeur \u00e0 tester.
$options
Un tableau des options d\u00e9finies dans la configuration pour ce contr\u00f4le syntaxique.
$formElement
Une r\u00e9f\u00e9rence au champ du formulaire (objet LSformElement).
Cette m\u00e9thode devra retourner True
ou False
si la valeur test\u00e9e est respectivement valide ou invalide. Elle pourra \u00e9galement d\u00e9clencher une exception LSformRuleException
qui lui permettra de donner des messages d'erreurs elle-m\u00eame sur le(s) probl\u00e8me(s) detect\u00e9(s) durant l'analyse de la valeur pass\u00e9e. Le constructeur de ce type d'exception prend en tant que premier param\u00e8tre un tableau de messages d'erreurs (ou un simple message d'erreur) qui seront retourn\u00e9s \u00e0 l'utilisateur.
Note
Par d\u00e9faut, les valeurs de l'attribut sont test\u00e9es une \u00e0 une via la m\u00e9thode validate()
. Cependant, il est possible d'impl\u00e9menter une m\u00e9thode de validation pour toutes les valeurs de l'attribut en une seule fois en affectant la valeur false
\u00e0 la constante de classe validate_one_by_one
. Dans ce cas, l'ensemble des valeurs de l'attribut seront pass\u00e9es via le param\u00e8tre $value
\u00e0 la m\u00e9thode validate()
(sous la forme d'un tableau). Cela pourra par exemple \u00eatre utile pour impl\u00e9menter une validation de la coh\u00e9rence des valeurs les unes vis \u00e0 vis des autres (unicit\u00e9, nombre maximum de valeurs, \u2026).
Les LSaddons sont utilis\u00e9s pour impl\u00e9menter dans LdapSaisie des fonctionnalit\u00e9s sp\u00e9cifiques tel que :
generate_function
) ;L'\u00e9criture d'un LSaddon doit respecter une structure suffisamment souple afin de ne pas \u00eatre un frein \u00e0 vos contributions, tout en permettant d'assurer la bonne int\u00e9gration de votre contribution au projet. Le code que vous \u00e9crirez sera r\u00e9parti dans deux fichiers :
conf/LSaddons/config.LSaddons.[addon name].php
Ce fichier contiendra la configuration de votre LSaddon. On y retrouvera la d\u00e9claration de constances et/ou variables de configuration permettant d'adapter votre LSaddon \u00e0 une installation et \u00e0 un environnement.
includes/addons/LSaddons.[addon name].php
Ce fichier contiendra le code \u00e0 proprement dit de votre LSaddon.
Structure du fichier includes/addons/LSaddons.[addon name].php :
<?php\n\n/*\n * Error messages\n */\n\n// Support error messages\nLSerror :: defineError('MYADDON_SUPPORT_01',\n ___(\"MYADDON Support : Unable to load %{dep}.\")\n);\n\nLSerror :: defineError('MYADDON_SUPPORT_02',\n ___(\"MYADDON Support : The constant %{const} is not defined.\")\n);\n\n// Other orror messages\nLSerror :: defineError('MYADDON_01',\n ___(\"An error : %{msg}.\")\n);\n\nLSerror :: defineError('MYADDON_02',\n ___(\"An other error about %{about} : %{msg}\")\n);\n\nLSerror :: defineError('MYADDON_03',\n ___(\"Unknown error.\")\n);\n\n/**\n * Verify support of my addon by LdapSaisie\n *\n * @author My Name <my.email@example.com>\n *\n * @return boolean true if my addon is totaly supported, false in other cases\n **/\nfunction LSaddon_myaddon_support() {\n\n $retval=true;\n\n // Check/load dependencies\n if ( !class_exists('mylib') ) {\n if ( !LSsession::includeFile(LS_LIB_DIR . 'class.mylib.php') ) {\n LSerror :: addErrorCode('MYADDON_SUPPORT_01', 'mylib');\n $retval=false;\n }\n }\n\n\n $MUST_DEFINE_CONST= array(\n 'LS_MYADDON_CONF_O1',\n 'LS_MYADDON_CONF_O2',\n ...\n );\n\n foreach($MUST_DEFINE_CONST as $const) {\n if ( (!defined($const)) || (constant($const) == \"\")) {\n LSerror :: addErrorCode('MYADDON_SUPPORT_02',$const);\n $retval=false;\n }\n }\n\n if ($retval) {\n // Register LSaddon view using LSsession :: registerLSaddonView()\n\n if (php_sapi_name() == 'cli') {\n // Register LSaddon CLI command using LScli :: add_command()\n }\n }\n\n return $retval;\n}\n\n/**\n * My first function\n *\n * Description of this wonderfull function\n *\n * @author My Name <my.email@example.com>\n *\n * @return [type(s) of returned values (pipe separator)] Description of the return of this function\n **/\nfunction myaddon_first_function($arg1, $arg2) {\n // Do some stuff\n if (something) {\n LSerror :: addErrorCode(\n 'MYADDON_01',\n 'something went wrong' // Error LSformat unique argument\n );\n return false;\n }\n\n if (something else) {\n LSerror :: addErrorCode(\n 'MYADDON_02',\n array( // Error LSformat arguments\n 'about' => 'second step',\n 'msg' => 'something went wrong'\n )\n );\n return false;\n }\n\n if (still something else) {\n LSerror :: addErrorCode('MYADDON_03'); // Error without argument\n return false;\n }\n return true;\n}\n\n[...]\n\n// Defined custom CLI commands functions only on CLI context\nif (php_sapi_name() != 'cli')\n return true; // Always return true to avoid some warning in log\n\n// Defined functions handling custom CLI commands and optionnaly\n// their arguments autocompleter functions.\n
Par convention, la structure de ce fichier est toujours \u00e0 peu pr\u00e8s la m\u00eame:
LSerror :: defineError()
qui attends en premier argument, l'identifiant du message d'erreur et en tant que second argument, le LSformat du message d'erreur. Par convention, les identifiants des messages d'erreurs seront en majuscule et pr\u00e9fix\u00e9s du nom du LSaddon.On d\u00e9clare ensuite une fonction LSaddon_[myaddon]_support
qui sera ex\u00e9cut\u00e9e lors du chargement de l'addon et qui permettra de s'assurer du support de celui-ci. Cette fonction devra retourner True
si c'est le cas ou False
dans le cas contraire.
Cette fonction s'assura notamment :
Si notre addon offre des commandes CLI personnalis\u00e9es, les fonctions les impl\u00e9mentant ne seront d\u00e9finies, dans un souci de performance, que dans un contexte ou elles seraient potentiellement appelables, c'est \u00e0 dire dans un contexte d'ex\u00e9cution CLI
. Pour cela, nous utilisons commun\u00e9ment la fonction php_sapi_name
pour d\u00e9terminer le contexte d'ex\u00e9cution et si celui-ci vaut cli
, nous stoppons l'ex\u00e9cution du reste du code du fichier via un return true
.
Note
Il est important dans ce contexte de ne jamais retourner autre chose que True
pour \u00e9viter tout message d'erreur inutile dans les logs.
Les LSaddons peuvent fournir des commandes CLI personnalis\u00e9es qui seront accessibles via la commande ldapsaisie
fournie avec l'application. Cela peut, par exemple, vous permettre de rendre accessible en ligne de commandes une proc\u00e9dure impl\u00e9ment\u00e9e dans le code d'LdapSaisie et vous permettre de mettre en place une t\u00e2che planifi\u00e9e ex\u00e9cutant cette proc\u00e9dure r\u00e9guli\u00e8rement.
Pour mettre en place une telle commande CLI personnalis\u00e9e, il est n\u00e9cessaire de :
LSaddon_[addon]_support
de l'addon \u00e0 l'aide de la m\u00e9thode LScli :: add_command()
;True
ou False
en cas de succ\u00e8s/d'erreur d'ex\u00e9cution de la commande. Cette valeur de retour influencera le code retourn\u00e9 par la commande : 0
en cas de succ\u00e8s, 1
en cas d'erreur.Bien que cela ne soit pas obligatoire, il sera \u00e9galement possible de d\u00e9clarer une fonction permettant l'autocompl\u00e9tion des arguments accept\u00e9s par la commande.
Cette m\u00e9thode recevra en param\u00e8tre :
$command_args
Un tableau des arguments d\u00e9j\u00e0 re\u00e7us par la commande.
$comp_word_num
Un entier indiquant le rang de l'argument que l'autocompl\u00e9tion tente de compl\u00e9ter. Il peut s'agir du rang d'un param\u00e8tre d\u00e9j\u00e0 fourni et pr\u00e9sent dans le tableau $command_args
ou bien d'un rang sup\u00e9rieur aux nombres d'arguments d\u00e9j\u00e0 fournis \u00e0 la commande et dans ce cas il s'agira d'autocompl\u00e9ter tous potentiels autre argument que pourrait accepter cette commande.
$comp_word
Une cha\u00eene de caract\u00e8res correspondant \u00e0 ce qu'a d\u00e9j\u00e0 saisi l'utilisateur de l'argument que l'on tente d'autocompl\u00e9ter. Cette cha\u00eene de caract\u00e8res peut \u00eatre vide ou non, en fonction de s'il s'agit d'un nouvel argument \u00e0 autocompl\u00e9ter ou non.
$opts
Un tableau des potentiels arguments globaux accept\u00e9s par LScli dans le contexte actuel (par exemple, -d
ou --debug
pour l'activation du mode debug). La r\u00e9ponse de cette fonction devra inclure ces potentiels arguments si le contexte d'autocompl\u00e9tion si pr\u00eate (nouvel argument par exemple).
Pour finir, cette fonction devra retourner un tableau des potentielles valeurs que pourrait prendre l'argument autocompl\u00e9t\u00e9. Si une unique proposition est faite \u00e0 l'utilisateur, celle-ci sera automatiquement propos\u00e9e \u00e0 l'utilisateur et \u00e0 d\u00e9faut, la liste des valeurs possibles lui seront affich\u00e9es.
Note
Pour vous aider dans l'\u00e9crire d'une telle m\u00e9thode d'autocompl\u00e9tion, des m\u00e9thodes statiques sont fournies par la classe LScli
pour les autocompl\u00e9tions les plus courantes :
LScli :: autocomplete_class_name()
Autocompl\u00e9tion du nom d'une classe PHP.
LScli :: autocomplete_addon_name()
Autocompl\u00e9tion du nom d'un LSaddon.
LScli :: autocomplete_int()
Autocompl\u00e9tion d'un nombre entier.
LScli :: autocomplete_LSobject_types()
Autocompl\u00e9tion du nom d'un type d'LSobject.
LScli :: autocomplete_LSobject_dn()
Autocompl\u00e9tion du DN d'un type pr\u00e9cis d'LSobject de l'annuaire.
Par ailleurs, la m\u00e9thode LScli :: autocomplete_opts()
vous facilitera la construction de la liste des valeurs d'autocompl\u00e9tion de l'argument courant en fonction de ce qui a d\u00e9j\u00e0 \u00e9t\u00e9 saisi par l'utilisateur (param\u00e8tre $comp_word
). Cette m\u00e9thode s'occupera en l'occurrence de filtrer parmi toutes les valeurs contextuelles possibles, celles qui correspondent au pr\u00e9fixe fourni par l'utilisateur.
Pour impl\u00e9menter une telle commande CLI personnalis\u00e9e, vous pouvez vous inspirer de l'exemple fourni ci-dessous ou encore des commandes CLI fournies par les autres LSaddons ou classes PHP de l'application.
Structure du fichier includes/addons/LSaddons.[addon name].php :
<?php\nfunction LSaddon_myaddon_support() {\n\n $retval=true;\n\n // Some check\n\n if ($retval) {\n if (php_sapi_name() == 'cli') {\n LScli :: add_command(\n 'my_custom_cli_cmd', // The CLI command name (required)\n 'cli_my_custom_cli_cmd', // The CLI command handler (must be callable, required)\n 'My custom CLI command', // A short description of what this command does (required)\n '[arg1] [arg2] [...]', // A short list of commands available arguments show in usage message\n // (optional, default: false)\n 'This command permit to ...', // A long description of what this command does (optional, default:\n // false)\n true, // Permit to define if this command need connection to LDAP server\n // (optional, default: true)\n 'cli_my_custom_cli_cmd_autocompleter', // Callable of the CLI command arguments autocompleter (optional,\n // default: null)\n true // Allow override if a command already exists with the same name\n // (optional, default: null)\n );\n }\n }\n\n return $retval;\n}\n\n[...]\n\n// Defined CLI commands functions only on CLI context\nif (php_sapi_name() != 'cli')\n return true; // Always return true to avoid some warning in log\n\n/**\n * My addon CLI command my_custom_cli_cmd handler function\n *\n * Description of this CLI command.\n *\n * @param array $command_args Command arguments\n * - Positional arguments :\n * - LSobject\n * - dn\n * - Optional arguments :\n * - -f|--force : Force mode\n *\n * @author My Name <my.email@example.com>\n *\n * @return boolean True on success, false otherwise\n **/\nfunction cli_my_custom_cli_cmd($command_args) {\n $objType = null;\n $dn = null;\n $force_mode = false;\n foreach ($command_args as $arg) {\n if ($arg == '-f' || $arg == '--force')\n $force_mode = true;\n elseif (is_null($objType)) {\n $objType = $arg;\n }\n elseif (is_null($dn)) {\n $dn = $arg;\n }\n else\n LScli :: usage(\"Invalid $arg parameter.\");\n }\n\n if (is_null($objType) || is_null($dn))\n LScli :: usage('You must provide LSobject type and DN.');\n\n if (!LSsession :: loadLSobject($objType))\n return false;\n\n $obj = new $objType();\n if (!$obj->loadData($dn)) {\n self :: log_fatal(\"Fail to load object $dn data from LDAP\");\n return false;\n }\n\n // Do some stuff on loaded object\n [...]\n\n return true;\n}\n\n/**\n * Args autocompleter for CLI my_custom_cli_cmd command\n *\n * @param array<string> $command_args List of already typed words of the command\n * @param int $comp_word_num The command word number to autocomplete\n * @param string $comp_word The command word to autocomplete\n * @param array<string> $opts List of global available options\n *\n * @return array<string> List of available options for the word to autocomplete\n **/\npublic static function cli_my_custom_cli_cmd_autocompleter($command_args, $comp_word_num, $comp_word, $opts) {\n $opts = array_merge($opts, array ('-f', '--force'));\n\n // Handle positional args\n $objType = null;\n $objType_arg_num = null;\n $dn = null;\n $dn_arg_num = null;\n for ($i=0; $i < count($command_args); $i++) {\n if (!in_array($command_args[$i], $opts)) {\n // If object type not defined\n if (is_null($objType)) {\n // Defined it\n $objType = $command_args[$i];\n LScli :: unquote_word($objType);\n $objType_arg_num = $i;\n\n // Check object type exists\n $objTypes = LScli :: autocomplete_LSobject_types($objType);\n\n // Load it if exist and not trying to complete it\n if (in_array($objType, $objTypes) && $i != $comp_word_num) {\n LSsession :: loadLSobject($objType, false);\n }\n }\n elseif (is_null($dn)) {\n $dn = $command_args[$i];\n LScli :: unquote_word($dn);\n $dn_arg_num = $i;\n }\n }\n }\n\n // If objType not already choiced (or currently autocomplete), add LSobject types to available options\n if (!$objType || $objType_arg_num == $comp_word_num)\n $opts = array_merge($opts, LScli :: autocomplete_LSobject_types($comp_word));\n\n // If dn not alreay choiced (or currently autocomplete), try autocomplete it\n elseif (!$dn || $dn_arg_num == $comp_word_num)\n $opts = array_merge($opts, LScli :: autocomplete_LSobject_dn($objType, $comp_word));\n\n return LScli :: autocomplete_opts($opts, $comp_word);\n}\n
"},{"location":"contrib/addons/custom-views/","title":"Les vues personnalis\u00e9es","text":"Les LSaddons peuvent fournir des vues personnalis\u00e9es qui seront accessibles \u00e0 tout ou parties des utilisateurs de l'application. Ce filtrage d'acc\u00e8s sera fait en utilisant les LSprofiles de l'utilisateur connect\u00e9 sur la racine courante de l'annuaire LDAP.
Pour mettre en place une telle vue personnalis\u00e9e, il est n\u00e9cessaire de :
LSaddon_[addon]_support
de l'addon \u00e0 l'aide de la m\u00e9thode LSsession :: registerLSaddonView()
;Pour impl\u00e9menter une telle vue personnalis\u00e9e, vous pouvez vous inspirer de l'exemple fourni ci-dessous ou encore des vues fournies par les autres LSaddons (par exemple, l'addon exportSearchResultAsCSV).
Structure du fichier includes/addons/LSaddons.[addon name].php :
<?php\nfunction LSaddon_myaddon_support() {\n\n $retval=true;\n\n // Some check\n\n if ($retval) {\n $retval = LSsession :: registerLSaddonView(\n 'myaddon', // addon name\n 'myaddon_view', // addon view ID\n __('MyAddon view'), // addon view label\n 'myaddon_view', // callable (ex: function name) that implement addon view\n array('user'), // array listing allowed LSprofiles\n true // Show/hide this addon view in user menu\n );\n }\n\n return $retval;\n}\n\n[...]\n\n/**\n * My addon view handler function\n *\n * Description of this view\n *\n * @author My Name <my.email@example.com>\n *\n * @return void\n **/\nfunction myaddon_view() {\n // Do some stuff and set some template variables\n $list = array ([...]);\n LStemplate :: assign('list', $list);\n\n // Load some CSS & JS files need on this view\n LStemplate :: addCssFile('LSaddon_myadon.css');\n LStemplate :: addJSscript('LSaddon_myadon.js');\n\n // Set template file of the view\n LSsession :: setTemplate('LSaddon_myadon_view.tpl');\n}\n
"},{"location":"install/arbo/","title":"Arborescence du projet","text":"doc/
Les fichiers sources de la documentation (Markdown & configuration Mkdocs).
lsexample/
Les fichiers relatifs \u00e0 l'annuaire d'exemple.
src/
Les sources de l'application.
public_html/
La racine web de l'application : celle-ci ne contient que les fichiers .htaccess
et index.php
qui configure et d\u00e9clenche la r\u00e9\u00e9criture d'URL.
conf/
Contient les fichiers de configuration.
LSobjects/
Configuration des LSobjects.
LSaddons/
Configuration des LSaddons.
LSauth/
Configuration des LSauthMethod.
includes/
Contient les fichiers des ressources.
addons/
Les addons au projet.
class/
Les fichiers de d\u00e9finition des classes PHP.
js/
Les fichiers Javascript.
libs/
Les librairies utilis\u00e9es.
lang/
Les fichiers d'internationalisation.
templates/
Les fichiers template de l'interface. Il y a un sous-dossier par template.
css/
Les fichiers css de l'interface. Il y a un sous-dossier par template CSS.
images/
Les images de l'interface. Il y a un sous-dossier par template d'image.
local/
Les fichiers personnalis\u00e9s de l'installation.
tmp/
Les fichiers temporaires (y compris le cache des templates).
L'installation \u00e0 partir du paquet Debian peut \u00eatre r\u00e9alis\u00e9e soit en t\u00e9l\u00e9chargeant manuellement le paquet, soit en d\u00e9clarant le d\u00e9p\u00f4t APT suivant dans votre fichier /etc/apt/sources.list
:
deb http://ldapsaisie.org/debian stable main\n
Il ne vous restera ensuite plus qu'a installer le paquet ldapsaisie
avec la commande suivante :
apt-get install ldapsaisie\n
Le fichier /etc/ldapsaisie/apache.conf
est un example de configuration du serveur web Apache. La configuration du logiciel ce fera ensuite dans le dossier /etc/ldapsaisie/local/
.
Le d\u00e9p\u00f4t Git peut \u00eatre r\u00e9cup\u00e9r\u00e9 anonymement en utilisant la commande suivante :
git clone https://gitlab.easter-eggs.com/ee/ldapsaisie.git\n
La racine web de l'application se trouvera alors dans le dossier /ldapsaisie/src/public_html/
.
Toutes les nuits, un snapshot de l'arbre Git est r\u00e9alis\u00e9 et est t\u00e9l\u00e9chargeable au format tar.gz \u00e0 l'adresse suivante :
http://ldapsaisie.org/download/ldapsaisie-snapshoot.tar.gz
"},{"location":"install/howto/","title":"Tutoriel d'installation","text":"Cette section d\u00e9crit les diff\u00e9rentes \u00e9tapes de l'installation de LdapSaisie. Deux m\u00e9thodes d'installation sont pr\u00e9sent\u00e9es ici, l'une \u00e0 partir des sources du projet et l'autre \u00e0 partir du paquet Debian.
Dans ce tutoriel, nous partirons du principe que vous avez pleinement la main sur votre serveur (installation de nouveau paquet et configuration de votre serveur web). Nous partons \u00e9galement du principe que votre annuaire LDAP est d\u00e9j\u00e0 en place. Nous utiliserons pour cette exemple de mise en oeuvre l'annuaire correspondant au sch\u00e9ma et \u00e0 la configuration pr\u00e9sente dans les sources du projet dans le dossier lsexample
.
La premi\u00e8re \u00e9tape consiste \u00e0 installer le locigiel en tant que tel. Pour cela, r\u00e9f\u00e9rez vous au chapitre T\u00e9l\u00e9chargement.
En cas d'installation \u00e0 partir du paquet Debian, la configuration du logiciel se fera dans le dossier /etc/ldapsaisie/local/
. Les fichiers plac\u00e9s dans ce dossier pr\u00e9valeront toujours aux fichiers fournis par le paquet Debian, vous permettant facilement de modifier un composant existant ou dans \u00e9crire de nouveaux. Ainsi, pour modifier un fichier CSS par exemple, il vous suffira de le placer dans le dossier /etc/ldapsaisie/local/css/
.
Pour une installation \u00e0 partir du code source, il vous faut cloner le d\u00e9p\u00f4t Git du projet dans le dossier /var/www/ldapsaisie
. Pour cela il vous faut avoir install\u00e9s les outils de Git contenu, dans Debian, dans le paquet git-core
. Le d\u00e9p\u00f4t Git doit ensuite \u00eatre r\u00e9cup\u00e9r\u00e9 anonymement en utilisant la commande suivante :
git clone https://gitlab.easter-eggs.com/ee/ldapsaisie.git /var/www/ldapsaisie\n
Note
Pour que cette commande se d\u00e9roule correctement, vous devez avoir acc\u00e8s au port TCP 443 du serveur gitlab.easter-eggs.com
. En cas de probl\u00e8me v\u00e9rifiez votre parefeu.
La suite des op\u00e9rations se d\u00e9roulera donc maintenant dans le dossier /var/www/ldapsaisie
. Pour avoir plus de d\u00e9tails sur les \u00e9lements qu'on retrouve dans ce dossier, vous pouvez consulter la section concern\u00e9e. Nous allons nous inst\u00e9r\u00e9sser plus particuli\u00e8rement :
upgradeFromGit.sh
permettant la mise \u00e0 jour de votre repos tout en concervant les adaptations que nous ferons pour l'usage d'LdapSaisie adapt\u00e9 \u00e0 notre annuaire ;config.local
dans lequel seront stock\u00e9s vos fichiers et vos adaptations de l'application ;src/public_html
qui correspond \u00e0 la futur racine du site web de l'application.Le principe de l'adaptation est ici de mettre vos fichiers personnalis\u00e9s dans le dossier config.local
, de les d\u00e9clarer dans votre fichier config.local/local.sh
contenant la liste des fichiers devant \u00eatre install\u00e9s. Le fichier local.sh
est la source de configuration du script upgradeFromGit.sh
. Il faut donc dans un premier temps cr\u00e9er votre fichier local.sh
en copiant le fichier d'example local.sh.example
. Ce fichier est un script bash d\u00e9clarant les variables de configurations suivantes :
LOCAL_FILES
La liste des chemins des fichiers \u00e0 installer dans l'arboressence du site. Cette \u00e9l\u00e9ment doivent \u00eatre s\u00e9par\u00e9s par des espaces ou des retour \u00e0 la liste. Exemple :
conf/config.inc.php\nlang/fr_FR.UTF8/lang.php\n
LOG_FILE
Nom du fichier de log des mises \u00e0 jour.
THEME
Le nom du theme \u00e0 installer (facultatif et non trait\u00e9 dans ce tutoriel).
Note
Il est possible d'utiliser dans ce fichier de configuration la variable bash $ROOT_DIR
correspondant au chemin du dossier d'installation, c'est \u00e0 dire dans notre exemple /var/www/ldapsaisie
.
La deuxi\u00e8me \u00e9tape concerne la configuration globale de l'application : Cette partie est principalement contenue dans le fichier src/conf/config.inc.php
(ou /etc/ldapsaisie/local/conf/config.inc.php
en cas d'installation \u00e0 partir du paquet Debian). En cas d'installation \u00e0 partir du code source, il faut donc dans un premier temps copier ce fichier dans le dossier config.local
et le d\u00e9clarer dans la liste des fichiers \u00e0 d\u00e9ployer lors des mises \u00e0 jour (variable LOCAL_FILES
dans le fichier local.sh
). Il s'agit en particulier dans ce fichier de configurer la connexion \u00e0 votre annuaire. Vous pouvez vous inspirer du fichier d'exemple fourni et pour plus de d\u00e9tails, reportez-vous \u00e0 la section concern\u00e9e.
Note
Notez qu'il est possible de passer l'application en mode debug ce qui peut \u00eatre utile par la suite.
La troisi\u00e8me \u00e9tape concerne la configuration des types de LSobjects : Chaque type d'objet manipul\u00e9 par LdapSaisie doit correspondre avec un type de LSobject.
Cr\u00e9ation du fichier de classe (optionnel) : Ce fichier contient la d\u00e9claration de la classe PHP correspondant au type de LSobject. Cette classe \u00e9tend la classe LSldapObject
qui contient pour ainsi dire toute les m\u00e9thodes et proprit\u00e9s n\u00e9cessaires pour les types de LSobject simples. Si votre type de LSobject n\u00e9cessite des m\u00e9thodes ou propri\u00e9t\u00e9s particuli\u00e8res, vous pouvez impl\u00e9menter cette classe. \u00c0 d\u00e9faut, une classe vierge d'adaptation sera automatiquement d\u00e9clar\u00e9e.
Les fichiers des classes sont contenus dans le dossier /includes/class/
et portent les noms compos\u00e9s de la mani\u00e8re suivante :
class.LSobjects.[nom du type d'LSobject].php\n
Configurer vos LSobject : Cette partie est certainement la plus longue et consiste \u00e0 d\u00e9clarer l'ensemble des informations relatives aux types des objets LDAP manipul\u00e9s. Les fichiers d'exemples fournis vous seront alors d'une aide pr\u00e9cieuse. Basez vous sur l'un de pour cr\u00e9er le votre. Pour cela le fichier de configuration du type d'LSobjet LSpeople
est le plus complet et est un bon point de d\u00e9part. Pour plus de d\u00e9tails sur les \u00e9lements de configuration de ce fichier, reportez-vous \u00e0 la section concern\u00e9e.
Configurer si n\u00e9cessaire les relations entre les objets appel\u00e9s LSrelations. Les relations les plus simples (via un attribut de liaison) pourront \u00eatre impl\u00e9ment\u00e9es \u00e0 l'aide d'un simple param\u00e8trage. Pour des relations, plus complexes, il sera possible d'impl\u00e9menter des m\u00e9thodes personnalis\u00e9es pour les g\u00e9rer. Pour plus de d\u00e9tails, reportez-vous \u00e0 la section concern\u00e9e.
Note
Pour avoir un exemple de fichier de classe PHP impl\u00e9mentant des methodes de gestion de LSrelations complexes, vous pouvez consulter le fichier de classe LSgroup
.
Important
En cas d'installation \u00e0 partir du code source, pensez \u00e0 d\u00e9clarer les fichiers que vous venez de cr\u00e9er dans la variable LOCAL_FILES
du fichier local.sh
. Exemple pour le type d'LSobjet portant comme nom LSexample
:
src/conf/LSobjects/config.LSobjects.LSexample.php\nsrc/includes/class/class.LSobjects.LSexample.php\n
Note
Vous pouvez \u00e9galement personnaliser l'interface : Il est possible de personnaliser \u00e0 votre go\u00fbt l'interface en \u00e9crivant votre template ou en modifiant simplement les fichiers CSS. Une partie de cette documentation concernera bient\u00f4t cette probl\u00e9matique. Patience...
En cas d'installation \u00e0 partir du code source, une derni\u00e8re \u00e9tape \u00e0 ce niveau consiste \u00e0 lancer le script upgradeFromGit.sh
pour qu'il installe les fichiers que vous venez de cr\u00e9er. Ce script est con\u00e7u pour dire tout ce qu'il fait donc en cas de probl\u00e8me vous devriez rapidement comprendre o\u00f9 cela coince. Dans tout les cas, n'h\u00e9sitez pas \u00e0 poser vos questions \u00e0 la communaut\u00e9 sur la liste ldapsaisie-users@lists.ldapsaisie.org.
.htaccess
fourni avec l'application et il est donc n\u00e9cessaire d'autoriser une telle configuration \u00e0 ce niveau via la directive AllowOverride
devant inclure \u00e0 minima FileInfo
.tmp
. En cas d'installation \u00e0 partir du paquet Debian, ce dossier est remplac\u00e9 par un lien symbolique vers le dossier /var/cache/ldapsaisie/
.magic_quotes_gpc
et register_globals
\u00e0 off
. L'outil CLI de PHP est par ailleurs n\u00e9cessaire pour l'utilisation des outils CLI fournis avec l'application (fourni par le paquet php-cli
dans Debian).php-ldap
dans Debian)php5-mhash
dans Debian Lenny, int\u00e9gr\u00e9 \u00e0 php-common
dans les versions sup\u00e9rieurs)pear install pecl/json
sur RedHat, int\u00e9gr\u00e9 au paquet php5-common
pr\u00e9c\u00e9dement)php-net-ldap2
dans Debian ou pear install net_ldap2
)php-mbstring
depuis Debian Stretch, int\u00e9gr\u00e9 au paquet php-common
dans Debian)smarty3
dans Debian)php-console-table
dans Debian)php-mail
et php-mail-mime
dans Debian)ftp
(n\u00e9cessaire pour le fonctionnement du LSaddon FTP, paquet php-ftp
dans Debian)php-phpseclib
dans Debian)Warning
La librairie Net_LDAP2 oblige le fait que la racine DSE de l'annuaire soit lisible en anonyme sinon la connexion \u00e0 l'annuaire \u00e9chouera syst\u00e9matiquement.
Note
Cette documentation est \u00e9crite \u00e0 l'aide du langage Markdown et est mis en forme pour une consultation en ligne \u00e0 l'aide de mkdocs et son th\u00e8me mkdocs-material. Le d\u00e9pendances pour construire cette documentation sont list\u00e9es dans le fichier doc/requirements.txt
et sont installables \u00e0 l'aide de la commande pip install -r doc/requirements.txt
.
Cette section de la documentation d\u00e9taille la proc\u00e9dure de mise \u00e0 jour d'une installation existante et regroupe des informations pratiques et utiles pour des mont\u00e9es de versions sp\u00e9cifiques entra\u00eenant par exemple une perte de r\u00e9trocompatibilit\u00e9 de la configuration.
"},{"location":"upgrade/2_4_1-to-3_0_0/","title":"Mise \u00e0 jour 2.4.1 -> 3.0.0","text":"Cette mise \u00e0 jour majeure apporte de nombreuses nouveaut\u00e9s auxquelles il est important de pr\u00eater attention. Cette section ne parlera pas particuli\u00e8rement de ces nouveaut\u00e9s, mais vous pouvez consulter le fichier debian/ldapsaisie.NEWS pour cela. Cette section listera en outre les points de vigilances \u00e0 avoir et les adaptations \u00e0 apporter sur votre configuration et votre code personnalis\u00e9.
"},{"location":"upgrade/2_4_1-to-3_0_0/#fichier-configincphp","title":"Fichier config.inc.php","text":"ConsoleTable
avec pour valeur par d\u00e9faut sous Debian /usr/share/php/Console/Table.php
public_root_url
avec pour valeur par d\u00e9faut sous Debian /ldapsaisie
$GLOBALS['defaultCSSfiles']
: il est n\u00e9cessaire de modifier les URLs des fichiers list\u00e9s : seul le nom du fichier doit rester, sa localisation sera d\u00e9tect\u00e9e automatiquement. Par exemple, $GLOBALS['defaultCSSfiles'] = array('../light-blue.css');
devient $GLOBALS['defaultCSSfiles'] = array('light-blue.css');
.les param\u00e8tres authObjectType
, authObjectFilter
et authObjectTypeAttrPwd
sont remplac\u00e9s par le tablau LSobjects
dans le param\u00e8tre LSauth
.
Par exemple:
'authObjectType' => 'LSpeople',\n'authObjectFilter' => '(|(uid=%{user})(mail=%{user}))',\n'authObjectTypeAttrPwd' => 'userPassword',\n
Devient:
'LSauth' => array (\n 'LSobjects' => array(\n 'LSpeople' => array(\n 'filter' => '(|(uid=%{user})(mail=%{user}))',\n 'password_attribute' => 'userPassword',\n ),\n ),\n [...]\n),\n
$GLOBALS['defaultJSscripts']
, \u00e0 savoir un \"R\" manquant.$GLOBALS['defaultJSscripts']
. Seul doit y demeurer vos propres fichiers. Voici la liste des fichiers concern\u00e9s et qui n'ont plus \u00e0 \u00eatre inclus via ce param\u00e8tre :- mootools-core.js
- mootools-more.js
- functions.js
- LSdefault.js
- LSinfosBox.js
Note
Les fichiers light-*.css
ont \u00e9t\u00e9 retravaill\u00e9s pour tous h\u00e9riter du fichier light-blue.css
qui d\u00e9fini les couleurs de l'interface au travers des variables. Ainsi, il est tr\u00e8s simple d'ajuster ce th\u00e8me \u00e0 vos couleurs. Si cela vous int\u00e9resse, vous pouvez prendre exemple sur les autres fichiers light-*.css
.
Au passage, ce th\u00e8me a \u00e9t\u00e9 retravaill\u00e9 pour prendre en compte la mise en forme d'un maximum de composants de l'application tout en profitant du c\u00f4t\u00e9 responsive de l'interface apporter par cette mise \u00e0 jour. Si vous avez un th\u00e8me personnalis\u00e9, il est conseill\u00e9 de regarder si celui-ci ne pourrait pas tirer partie du fichier light-blue.css
en le surchargeant. \u00c0 minima, vous pouvez analyser les \u00e9volutions de ce fichier pour identifier les modifications int\u00e9ressantes \u00e0 reporter sur votre th\u00e8me personnel.
light-*.css
autre que le fichier light-blue.css
, vous devez d\u00e9sormais \u00e9galement charger ce dernier en premier.corriger les URL des images : url(../../images/default/find.png)
devient url(../image/find)
. Pour identifier les fichiers CSS concern\u00e9s, vous pouvez utiliser les commandes suivantes :
grep -Er 'url\\(.*images' /etc/ldapsaisie/local/css\ngrep -Er 'url\\(.*\\.(png|gif|jpg)' /etc/ldapsaisie/local/css\n
fatal_error
(fichier base.css
) : #fatal_error
devient #error
LSsession :: redirect()
devient LSurl :: redirect()
. Pour identifier les fichiers CSS concern\u00e9s, vous pouvez utiliser la commande suivante :
grep -Er 'LSsession *:: *redirect *\\(' /etc/ldapsaisie/local/\n
Les m\u00e9thodes de gestion des Javascript et CSS additionels ont \u00e9t\u00e9 migr\u00e9es de la classe LSsession
vers la classe LStemplate
:
LSsession :: addJSscript()
devient LStemplate :: addJSscript()
.
Par ailleurs le param\u00e8tre $path
disparait et la m\u00e9thode addLibJSscript
a \u00e9t\u00e9 ajout\u00e9e pour permettre sp\u00e9cifiquement l'inclusion des fichiers Javascript des librairies. Voici quelques exemples d'utilisation et leur \u00e9quivalent \u00e0 pr\u00e9sent:
LSsession :: addJSscript('../../local/includes/js/LSformElement_eetelephone.js');
devient LStemplate :: addJSscript('LSformElement_eetelephone.js');
LSsession :: addJSscript('../../local/includes/js/LSformElement_eetelephone.js');
devient LStemplate :: addJSscript('LSformElement_eetelephone.js');
LSsession :: addJSscript('click-to-dial_view.js', 'local/includes/js/');
devient LStemplate :: addJSscript('click-to-dial_view.js');
LSsession :: addJSscript('Picker.js',LS_LIB_DIR.'arian-mootools-datepicker/');
devient LStemplate :: addLibJSscript('arian-mootools-datepicker/Picker.js');
LSsession :: addJSconfigParam()
devient LStemplate :: addJSconfigParam()
.LSsession :: addHelpInfos()
devient LStemplate :: addHelpInfo()
.LSsession :: addCssFile()
devient LStemplate :: addCssFile()
.
Par ailleurs le param\u00e8tre $path
disparait et la m\u00e9thode addLibCssFile
\u00e0 \u00e9t\u00e9 ajout\u00e9e pour permettre sp\u00e9cifiquement l'inclusion des fichiers CSS des librairies. Voici quelques exemples d'utilisation et leur \u00e9quivalent \u00e0 pr\u00e9sent:
LSsession :: addCssFile('test.css', '../../local/css/');
devient LStemplate :: addCssFile('test.css');
. Doit donc \u00eatre conserv\u00e9, que le nom du fichier CSS, pas de chemin vers celui-ci.LSsession :: addCssFile('datepicker_vista.css',LS_LIB_DIR.'arian-mootools-datepicker/datepicker_vista/');
devient LStemplate :: addLibCssFile('arian-mootools-datepicker/datepicker_vista/datepicker_vista.css');
Pour identifier les fichiers concern\u00e9s, vous pouvez utiliser les commandes suivantes :
grep -Er 'LSsession *:: *(addJSscript|addLibJSscript|addJSconfigParam|addHelpInfos|addCssFile|addLibCssFile) *\\(' /etc/ldapsaisie/local/\ngrep -Er '(LSsession|LStemplate) *:: *addJSscript\\(.*local' /etc/ldapsaisie/local/\ngrep -Er '(LSsession|LStemplate) *:: *addJSscript\\(.*\\.\\.\\/' /etc/ldapsaisie/local/\ngrep -Er '(LSsession|LStemplate) *:: *addCssFile\\(.*local' /etc/ldapsaisie/local/\ngrep -Er '(LSsession|LStemplate) *:: *addCssFile\\(.*\\.\\.\\/' /etc/ldapsaisie/local/\n
LSlog
vs LSdebug
: L\u2019utilisation de LSdebug
est d\u00e9prioris\u00e9e en faveur de LSlog
. Ce dernier ajoute d\u00e9sormais la notion de logger, permettant d\u2019identifier la source des logs. Ce m\u00e9canisme permet la configuration d\u2019un niveau de log sp\u00e9cifique pour un logger donn\u00e9, ainsi que la mise en place de filtres au niveau des handers pour ne logger par exemple que certains loggers, ou \u00e0 l\u2019inverse en exclure d\u2019autres.
log_debug
, log_info
, \u2026). \u00c0 d\u00e9faut, il est possible d\u2019utiliser la classe LSlog_staticLoggerClass
qui facilite l\u2019impl\u00e9mentation.Pour vos LSaddons : il est conseill\u00e9 d\u2019utiliser un logger LSaddon_[addon]
d\u00e9di\u00e9. Le logger peut facilement \u00eatre r\u00e9cup\u00e9r\u00e9 de la mani\u00e8re suivante :
LSlog :: get_logger(\"LSaddon_[addon]\")\n
Cette m\u00e9thode retourne une r\u00e9f\u00e9rence au logger et il est possible d\u2019appeler directement une m\u00e9thode de log, par exemple :
LSlog :: get_logger(\"LSaddon_[addon]\") -> debug(\"message\");\n
Le cas des fichiers top.tpl
et bottom.tpl
{include file='ls:top.tpl'}\n\n[...]\n\n{include file='ls:bottom.tpl'}\n
devient :
{extends file='ls:base_connected.tpl'}\n{block name=\"content\"}\n\n[...]\n\n{/block}\n
Note
Pages \u00e0 l\u2019\u00e9tat connect\u00e9 uniquement (incluant le menu, l\u2019ent\u00eate\u2026).
Fichiers avec ent\u00eate HTML :
<html>\n <head>\n [...]\n </head>\n <body>\n [...]\n </body>\n</html>\n
devient :
{extends file='ls:base.tpl'}\n{block name=\"body\"}\n[...]\n{/block}\n
Au besoin, si vous avez besoin :
de remplacer les fichiers CSS charg\u00e9s par d\u00e9faut (base.css
par exemple) : ajouter le block css
:
{block name=\"css\"}\n <link rel=\"stylesheet\" type=\"text/css\" href=\"{css name='custom.css'}\" media=\"screen\" title=\"Normal\" />\n {include file='ls:css.tpl'}\n{/block}\n
Note
Ce block contient tous les CSS, y compris ceux g\u00e9r\u00e9s par LSsession :: addCssFile()
. Pensez \u00e0 ajouter {include file='ls:css.tpl'}
pour conserver ces derniers.
d\u2019ajouter des infos dans <head>
: ajouter le block head
(vide par d\u00e9faut) :
{block name=\"head\"}\n[...]\n{/block}\n
d\u2019ajouter des fichiers Javascript personnalis\u00e9s : ajouter le block js
(vide par d\u00e9faut):
{block name=\"js\"}\n[...]\n{/block}\n
Note
Ce block sera ajout\u00e9 APR\u00c8S les autres fichiers Javascript charg\u00e9s (ceux par d\u00e9faut et ceux ajout\u00e9s via LSsession :: addJSscript()
.
Autres fichiers remplac\u00e9s :
blank.tpl
remplac\u00e9 par base.tpl
empty.tpl
remplac\u00e9 par base_connected.tpl
accueil.tpl
remplac\u00e9 par homepage.tpl
Pour identifier les fichiers concern\u00e9s, vous pouvez utiliser la commande suivante :
grep -Er '(accueil|blank|empty|top|bottom)\\.tpl' /etc/ldapsaisie/local/\n
"},{"location":"upgrade/2_4_1-to-3_0_0/#fichiers-templates-fournis-par-defaut","title":"Fichiers templates fournis par d\u00e9faut :","text":"V\u00e9rifier les modifications des fichiers templates fourni avec l\u2019application et que vous auriez personnalis\u00e9. Pour cela, vous pouvez utiliser la commande suivante :
for i in $( ls /etc/ldapsaisie/local/templates/* )\ndo\n default_file=\"/usr/share/ldapsaisie/templates/default/$( basename \"$i\" )\"\n [ ! -e \"$default_file\" ] && continue\n vi -d $default_file $i\ndone\n
Note
Une attention particuli\u00e8re doit \u00eatre port\u00e9 aux fichiers login.tpl
et recoverpassword.tpl
qui ont particuli\u00e8rement chang\u00e9s.
../../images/default/find.png
devient ../image/find
Pour identifier les fichiers concern\u00e9s, vous pouvez utiliser les commandes suivantes :
grep -Er 'images' /etc/ldapsaisie/local/templates\ngrep -Er '\\.(png|gif|jpg)' /etc/ldapsaisie/local/templates\n
"},{"location":"upgrade/2_4_1-to-3_0_0/#le-cas-de-variable-de-template-lssession_css-et-lssession_js","title":"Le cas de variable de template {$LSsession_css}
et {$LSsession_js}
:","text":"Note
Ceci est d\u00e9j\u00e0 g\u00e9r\u00e9 si vous \u00e9tendez bien vos templates du fichier base.tpl
(pour les pages non-connect\u00e9es) ou base_connected.tpl
(pour les pages connect\u00e9es).
{$LSsession_css}
doit \u00eatre remplac\u00e9 par {include file='ls:css.tpl'}
{$LSsession_js}
doit \u00eatre remplac\u00e9 par {include file='ls:js.tpl'}
view.php
:
view.php?LSobject=LSpeople
devient object/LSpeople
view.php?LSobject=LSpeople&dn=$dn
devient object/LSpeople/$dn
addon_view.php
: addon_view.php?LSaddon=ee&view=copyContract
devient addon/ee/copyContract
index_ajax.php
:
Pour les m\u00e9thodes Ajax de classes :
var data = {\n template: 'LSformElement_eetelephone',\n action: 'make_call',\n telephoneNumber: tel,\n name: name,\n};\nnew Request({url: 'index_ajax.php', data: data, onSuccess: ...});\n
Devient :
var data = {\n telephoneNumber: tel,\n name: name,\n};\nnew Request({url: 'ajax/class/LSformElement_eetelephone/make_call', data: data, onSuccess: ...});\n
Pour les m\u00e9thodes Ajax d'addon :
var data = {\n addon: 'asterisk',\n action: 'LSasterisk_make_call',\n telephoneNumber: tel,\n name: name,\n nocache: new Date().getTime()\n};\nnew Request({url: 'index_ajax.php', data: data, onSuccess: ...});\n
Devient :
var data = {\n telephoneNumber: tel,\n name: name,\n nocache: new Date().getTime()\n};\nnew Request({url: 'ajax/addon/asterisk/LSasterisk_make_call', data: data, onSuccess: ...});\n
global_search.php
: global_search.php?refresh
devient search?refresh
index.php
: index.php?LSsession_recoverPassword
devient index?LSsession_recoverPassword
create.php
: create.php?LSobject=LSpeople
devient object/LSpeople/create
modify.php
: modify.php?LSobject=LSpeople&dn=$dn
devient object/LSpeople/$dn/modify
import.php
: import.php?LSobject=LSpeople
devient object/LSpeople/import
remove.php
: remove.php?LSobject=LSpeople&dn=$dn
devient object/LSpeople/$dn/remove
Avec validation : remove.php?LSobject=LSpeople&dn=$dn&valid
devient object/LSpeople/$dn/remove?valid
select.php
: select.php?LSobject=LSpeople
devient object/LSpeople/select
custom_action.php
: custom_action.php?LSobject=LSpeople&dn=$dn&customAction=$customAction
devient object/LSpeople/$dn/customAction/$customAction
Avec validation : custom_action.php?LSobject=LSpeople&dn=$dn&customAction=$customAction&valid
devient object/LSpeople/$dn/customAction/$customAction?valid
custom_search_action.php
: custom_search_action.php?LSobject=LSpeople&customAction=$customAction
devient object/LSpeople/customAction/$customAction
Avec validation : custom_search_action.php?LSobject=LSpeople&customAction=$customAction&valid
devient object/LSpeople/customAction/$customAction?valid
Pour identifier les fichiers concern\u00e9s, vous pouvez utiliser la commande suivante :
grep -Er '(index|global_search|view|select|create|modify|import|remove|index_ajax|custom_action|custom_search_action|addon_view)\\.php' /etc/ldapsaisie/local/\n
"},{"location":"upgrade/method/","title":"Proc\u00e9dure de mise \u00e0 jour","text":""},{"location":"upgrade/method/#installation-via-paquet-debian","title":"Installation via paquet Debian","text":"Lors d\u2019une installation par paquet Debian, la mise \u00e0 jour est grandement facilit\u00e9 par le packaging : Il vous suffit de mettre \u00e0 jour le paquet ldapsaisie
:
apt update\napt install ldapsaisie\n
Une fois l\u2019application mise \u00e0 jour, pr\u00eat\u00e9 attention aux nouveaut\u00e9s et point de vigilances d\u00e9crite dans la section suivante.
"},{"location":"upgrade/method/#installation-a-partir-des-sources","title":"Installation \u00e0 partir des sources","text":"Lors d\u2019une installation par \u00e0 partir des sources, le script upgradeFromGit.sh
permet d\u2019automatiser la mise \u00e0 jour, \u00e0 condition que vous ayez suivi la proc\u00e9dure d\u2019installation \u00e0 ce sujet.
Ce script s\u2019occupera alors de :
working-tree
Git des liens symboliques des fichiers locaux (et \u00e9ventuellement du th\u00e8me) mis en place lors d\u2019une pr\u00e9c\u00e9dente ex\u00e9cution ;working-tree
Git via un git pull
de la mise \u00e0 jour ;vim -d
) ;MO
(traduction) et de d\u00e9clencher dans ce cas un rechargement du serveur web pour prise en compte ;Une fois l\u2019application mise \u00e0 jour, pr\u00eat\u00e9 attention aux nouveaut\u00e9s et point de vigilances d\u00e9crite dans la section suivante.
"}]}