Compare commits

...

169 commits

Author SHA1 Message Date
Benjamin Renard 151b229c3d
LSformElement_postaladdress: update OSM nominatim search URL 2024-04-24 11:22:39 +02:00
Benjamin Renard 118b784a5d
API: allow to execute LSobject's custom actions 2024-04-04 16:11:06 +02:00
Benjamin Renard 2db4d0fbae
Add possibily to make global search using API 2024-03-28 12:44:18 +01:00
Benjamin Renard bd98a8b8ef
LSldapObject: add force_generation_if_empty parameter 2024-03-04 11:36:05 +01:00
Benjamin Renard 1a88707f87
LSldapObject: defaulty set attribute default value on creation even if is not present in form
Could be configured using the new set_default_value_on_creation_if_empty 
parameter.
2024-03-04 11:34:41 +01:00
Benjamin Renard 4ce95e54b8
LSattr_html_gpg_pub_key: improve CSS 2024-02-28 19:10:48 +01:00
Benjamin Renard 2ccf579125
LSattr_html_gpg_pub_key & LSformRule_gpg_pub_key: fix setting GnuPG home dir in PHP 7.3 2024-02-28 18:47:09 +01:00
Benjamin Renard 171161ae18
Add LSattr_html_gpg_pub_key & LSformRule_gpg_pub_key 2024-02-28 18:18:57 +01:00
Benjamin Renard d26c52400e
LSaddon::mail: fix handling CC/BCC headers if not provided as array 2024-02-22 19:13:35 +01:00
Benjamin Renard 62759330a8
LSaddon::mail: remove useless label 2024-02-22 18:52:11 +01:00
Benjamin Renard 5e9773a015
LSaddon::mail: improve CSS of templates editor view 2024-02-22 18:10:28 +01:00
Benjamin Renard 557db5d456
Fix Gitlab CI tests 2024-02-22 17:03:29 +01:00
Benjamin Renard 15f67ef00d
Improve docker image to make it smaller 2024-02-22 16:57:18 +01:00
Benjamin Renard 753f47fa97
Move mail template in LSaddon::mail and add editor view and docs 2024-02-22 16:15:00 +01:00
Benjamin Renard 89c363bd80
Fix handling mime type on serving libs's static files 2024-02-22 15:10:33 +01:00
Benjamin Renard e59ab4a94c
Add common LStabs CSS classes to handle tabs content
Based on stuff provided by LSaccessRightsMatrixView.
2024-02-22 15:09:20 +01:00
Benjamin Renard 87e58e6425
LSmail: add possibility to send email using template 2024-02-19 20:19:52 +01:00
Benjamin Renard e9c49c242f
LSaddon::phpldapadmin: fix default config to avoid PHP warning in CLI mode 2024-02-19 19:58:51 +01:00
Benjamin Renard e8781ab779
LScli::unquote_word: Fix PHP warning 2024-02-19 19:58:04 +01:00
Benjamin Renard 15e3ffe6ef
LSaddon::mail: Fix handling multiple recipients 2024-02-19 19:46:27 +01:00
Benjamin Renard 34396a5fe1
Improve test_send_mail CLI command 2024-02-19 19:46:26 +01:00
Benjamin Renard dc8e08b5d1 Fix PHP 8.2 error on sorting values 2024-02-10 18:35:54 +01:00
Benjamin Renard bf1a3affe4
Add selection boxes feature on objects list page (for LSsearch customActions) 2024-02-01 14:25:59 +01:00
Benjamin Renard 2104187b14
LSaddon::ppolicy: fix registering exportPpolicyInfo API method 2023-12-05 13:02:45 +01:00
Benjamin Renard 78af62d428
LSaddon::ppolicy: improve password expiration extra displayed column
Add LStip to show password last changed date and password max age.
2023-12-05 12:51:54 +01:00
Benjamin Renard 2d08374a53
build-deb.sh: exclude docker & build-deb.sh related commits in generated changelog 2023-10-26 18:22:21 +02:00
Benjamin Renard 129cfa537b
Docker: add build-and-push-all.sh 2023-10-26 18:19:20 +02:00
Benjamin Renard f176b626d5
Release 4.2.0-1 2023-10-26 17:52:39 +02:00
Benjamin Renard f9bf3a7597
CI: fully specified image names 2023-10-26 17:44:02 +02:00
Benjamin Renard 06654969d0
CI: publish a new release in Gitlab on new tag 2023-10-26 17:44:02 +02:00
Benjamin Renard e985f50d8a
CI: add build & publish step for debian stable package 2023-10-26 17:44:01 +02:00
Benjamin Renard 59436c9fe4
CI: add tests step on Bookworm 2023-10-26 11:44:47 +02:00
Benjamin Renard 1c42aa3a47
Remove old docbook doc related stuff 2023-10-13 19:28:14 +02:00
Benjamin Renard 96d99f5b06
Update translation 2023-10-13 19:28:13 +02:00
Benjamin Renard 5998983315
LSaddon::posix: Add deleteHomeDirectoryByFTP function 2023-10-13 19:28:13 +02:00
Benjamin Renard 5e8d625a34
debian: update build doc dependencies 2023-10-13 19:28:12 +02:00
Benjamin Renard 7a4f0fac69
LSaddon::ftp: Remove PEAR Net_FTP dependency 2023-10-13 19:28:12 +02:00
Benjamin Renard 9384d2e312
LSconfig: add escape_key, explode_keys and implode_keys helper methods
Allow escaping dot in config variable key
2023-10-12 19:00:29 +02:00
Benjamin Renard e77a96066d
CI: clean debian sid build step artifacts 2023-10-08 23:53:37 +02:00
Benjamin Renard c0e388f09b
doc: clean all-in-one HTML file 2023-10-08 23:34:13 +02:00
Benjamin Renard cfa2ff1e6d
doc: use mike to keep old released doc 2023-10-08 21:49:14 +02:00
Benjamin Renard 1639001a3c
LSaddon::accesslog: Fix infinity loop problem handling entry renaming event with the same DN 2023-10-05 12:29:02 +02:00
Benjamin Renard 2de8c720b5
CI: build debian Sid package and publish it on project APT repository 2023-09-28 16:44:54 +02:00
Benjamin Renard 0a98056be9
debian: fix building doc 2023-09-28 16:43:07 +02:00
Benjamin Renard c60730f25c
Remove useless old docbook doc scripts 2023-09-28 14:54:36 +02:00
Benjamin Renard aa197983a1
CI: handle building & deploying ldapsaisie-snapshot.tar.gz file 2023-09-28 14:28:04 +02:00
Benjamin Renard 1b672f59e7
Switch doc format to Markdown / Mkdocs 2023-09-28 14:05:35 +02:00
Benjamin Renard 11a8448b0a
Improve LSldapObject::getDisplayValue() method to match with getValue() method's parameters 2023-09-18 16:59:33 +02:00
Benjamin Renard 95f60a534a
Fix LSattribute::getDisplayValue() when called on updated attribute 2023-09-18 16:58:46 +02:00
Benjamin Renard 961740c855
Fix some french translated messages 2023-08-18 15:51:28 +02:00
Benjamin Renard 0c171789d3
LSauth add filter_function parameter 2023-08-18 15:51:27 +02:00
Benjamin Renard 05519c5432
LSattr_ldap:📅 replace unique format parameter by a list 2023-08-18 12:26:26 +02:00
Benjamin Renard fde66b2335
LSauthMethod::CAS: fix support of phpCAS >= 1.6.0 and patched Debian Buster 1.3.6-1+deb10u1 version 2023-08-18 11:46:06 +02:00
Benjamin Renard 5376435d8b
SUPANN: Add supannCMSIdEtiquette attribute support 2023-08-18 11:00:38 +02:00
Benjamin Renard fa5b5ceb6d
LSaddon::accesslog: improve displaying changes attributes values 2023-08-17 19:55:59 +02:00
Benjamin Renard 3a862ce93e Release 4.1.0-1 2023-07-22 13:41:15 +02:00
Benjamin Renard fea76e7af2
lsexample: make restore_lsexample compatible with OpenLDAP 2.5 (and Debian Bookworm) 2023-07-19 12:45:24 +02:00
Benjamin Renard 6ff53b412e
ioFormat: add update_only mode 2023-07-19 12:25:14 +02:00
Benjamin Renard a4319237f2
Fix PHP8 compatibility 2023-07-19 10:26:28 +02:00
Benjamin Renard a6d0f7d126
import: Check generated field value and stop import in case of error 2023-07-03 12:34:14 +02:00
Benjamin Renard 33e0687d1e
import: fix displaying attribute errors two times 2023-07-03 12:02:02 +02:00
Benjamin Renard b1ee3460b1
LSldapObject::validateAttrsData(): fix handling attribute generation of empty required attributes even if their new value have been provided 2023-06-28 11:29:55 +02:00
Benjamin Renard 0eb0143921
LSaddons: Code cleaning 2023-06-20 19:42:12 +02:00
Benjamin Renard 425df3da3a
Fix historical typo lenght vs length 2023-06-20 11:30:08 +02:00
Benjamin Renard 1a2fe50ba2
LSaddon::orgchart: add parameter to control access to the orchart 2023-06-15 11:26:42 +02:00
Benjamin Renard 7c48b8062b
LSio: trace errors and messages during import to map them with objects and hooks. 2023-05-26 11:31:19 +02:00
Benjamin Renard bc171e6092
generate_ldapsaisie_pot: Add -I/--internal paramater to use internal message extractor for PHP files instead of xgettext
Note: just for tests, not recommended.
2023-05-26 11:31:18 +02:00
Benjamin Renard b3cd453918
LSlang: fix handling backslash in export POT file 2023-05-26 11:31:18 +02:00
Benjamin Renard 1c900320db
LSlang: improve internal message extrators from PHP files
- add support of multiple lines messages
- detect and ignore commented code block
- improving code tracing

Note: still no support of advanced gettext functions (ngettext,
dcgettext, ...).
2023-05-26 11:31:17 +02:00
Benjamin Renard 65d1d50c3a
Templating tr function: provided message could now be formated as LSformat string using extra provided parameters
Example: {tr msg="Hello %(who)!" who="World"}
2023-05-26 10:26:56 +02:00
Benjamin Renard 087b7e3065
LSerror::getErrors(): add $reset parameter 2023-05-26 09:40:28 +02:00
Benjamin Renard c98e31b7c6
LSsearch: fix/improve handling session data
- avoid PHP warning about unset key
- make purge methods accepting more specific object type/context
- store cache in dedicated sub-array to avoid purging params when 
purging cache
- fix strange problem about not preserved params due to too large purges 
in some contexts
2023-05-24 20:13:02 +02:00
Benjamin Renard cc9942019f
light-blue.css: Fix LSobject-list links color on line hover 2023-05-24 19:07:01 +02:00
Benjamin Renard 513ed9a024
Fix default ASC & DESC images color to fit with clear themes 2023-05-24 19:05:46 +02:00
Benjamin Renard 6ca8427d5d
CI: add a test job for doc 2023-05-24 18:30:41 +02:00
Benjamin Renard 548315b248
CI: fix PHP tests jobs rules 2023-05-24 18:30:02 +02:00
Benjamin Renard 4003fdfcfc
globalSearch: defaulty display extraDisplayedColumns
The new globalSearch_extraDisplayedColumns parameter permit to control 
it for each LSobject types.
2023-05-24 18:18:23 +02:00
Benjamin Renard 341f555e0c
LSformElement::jsonCompositeAttribute: fix checking non-multiple components value 2023-05-24 13:28:32 +02:00
Benjamin Renard 27ad049ac7
LSio: improve handling time & memory limits and allow before_import hook to set them 2023-05-24 13:28:31 +02:00
Benjamin Renard 99f83f326d
LSformElement::supannCompositeAttribute: fix checking components value
LSformRule :: validate_values() expected an array of values and not a 
unique value
2023-05-24 12:00:51 +02:00
Benjamin Renard c97d47ac00
LSformElement::supannEtuInscription: fix cursusann component regex 2023-05-24 11:58:13 +02:00
Benjamin Renard 823006937a
generate_lang_file: ignore LSformat string with simple string substitution 2023-05-17 17:59:58 +02:00
Benjamin Renard 7b7ff7e629
getFData() & getFieldInFormat(): code cleaning 2023-05-17 17:11:50 +02:00
Benjamin Renard 2d108c8b08
Allow translation of LSioFormat labels 2023-05-17 16:26:35 +02:00
Benjamin Renard fa60f54b15
LSioFormat: add before/after import triggers feature 2023-05-17 11:38:01 +02:00
Benjamin Renard 89ee2f1ec3
LSioFormat: allow to generate attribute value using a custom callable 2023-05-12 11:50:11 +02:00
Benjamin Renard 069dac2afe
LSsession: fix saving context info method to keep existing other info 2023-04-20 17:45:41 +02:00
Benjamin Renard db491f51e7
LSaddon::accesslog: add show/hide LdapSaisie modifications button 2023-03-28 12:30:34 +02:00
Benjamin Renard 2b52e863e6
LScli: Fix typo 2023-03-28 12:29:44 +02:00
Benjamin Renard 3bbf770e33
LSaddon::accesslog: fix hashing SSHA512 password (in hashPasswordForLogs()) 2023-03-28 12:28:45 +02:00
Benjamin Renard 48e5d45d32
LScli / LSlang: starting CLI commands messages translation 2023-03-21 12:59:55 +01:00
Benjamin Renard e103bee065
LSlang / generate_lang_file: add possibility to translate message in a text editor 2023-03-21 11:33:42 +01:00
Benjamin Renard 13d83dbf75
LSaddon accesslog: global improvments and add self logging feature 2023-03-21 10:37:13 +01:00
Benjamin Renard 80a50f98f1
LSdefault / copyable helper: Fix translating messages 2023-03-21 10:31:52 +01:00
Benjamin Renard 140b000877
LSdefault / copyable helper: add copyable-no-btn helper class 2023-03-21 10:31:21 +01:00
Benjamin Renard d387052068
Add getRdn() and parentDn() helper functions 2023-03-20 19:46:27 +01:00
Benjamin Renard 1825ce429e
LSldap: add formatDate() method 2023-03-20 19:46:27 +01:00
Benjamin Renard 4ec5769276
Add generate_uuid() helper function 2023-03-20 19:46:26 +01:00
Benjamin Renard f3d6b10a9e
LSldap: add possibility to configure hooks 2023-03-20 19:46:25 +01:00
Benjamin Renard 58dbdcb7fe
LSldap :: getAttr(): be sure to return on array when $multiple is true 2023-03-20 15:32:25 +01:00
Benjamin Renard f3e7557421
LSaddon::orgchart: improve logging 2023-02-17 13:39:37 +01:00
Benjamin Renard 85d6a87fcf
supann: fix typo in generate_supannRessourceEtat 2023-02-10 13:35:16 +01:00
Benjamin Renard 29bfca1792
LSform / dataEntryForm: Add forceGeneration parameter 2023-02-10 11:59:55 +01:00
Benjamin Renard f8c38dd3b6
Add pre-commit xmlint hook on doc change 2023-02-10 11:59:18 +01:00
Benjamin Renard 796e3287e9
supann: rename supannCheckEduPersonPrimaryAffiliation as validate_eduPersonPrimaryAffiliation 2023-02-10 11:21:59 +01:00
Benjamin Renard 2239120912
supann: rename supannCheckEduPersonAffiliation as validate_eduPersonAffiliation 2023-02-10 11:21:32 +01:00
Benjamin Renard a529b8ce2b
supann: add validate_supannEntiteAffectationPrincipale 2023-02-10 11:20:40 +01:00
Benjamin Renard aae4751a41
supann: add generate_supannRessourceEtat 2023-02-10 11:19:45 +01:00
Benjamin Renard 1534a40c7b
supann: add generate_supannEntiteAffectationPrincipale 2023-02-10 11:19:24 +01:00
Benjamin Renard 85592f94fd Configure pre-commit to run PHPstan before commiting 2023-01-16 16:54:04 +01:00
Benjamin Renard f113c87a15 LSaddon::mail: fix catch all message suffix in HTML mode 2023-01-11 19:45:25 +01:00
Benjamin Renard 68fcb6f81a LSaddon::mail: make optional parameter of sendMail() defaulty null 2023-01-11 19:34:25 +01:00
Benjamin Renard e303706779 CI: fix local execution problems 2023-01-11 19:09:23 +01:00
Benjamin Renard cbf1ff1769 LSaddon::mail: add MAIL_CATCH_ALL parameter 2023-01-11 19:08:04 +01:00
Benjamin Renard a717f051b9 LSaddon::showSupportInfo: fix default right proposed in doc 2023-01-11 18:57:06 +01:00
Benjamin Renard 82b29e6abc LSsession::canExecuteCustomAction(): fix handling self LSprofile 2023-01-09 19:53:41 +01:00
Benjamin Renard 98a5e6c1b3 LSaddon::impersonate: fix default icon proposed in doc 2023-01-09 19:45:42 +01:00
Benjamin Renard 4f69036f2f Add LSaddon::showSupportInfo 2023-01-09 19:32:06 +01:00
Benjamin Renard 43cb6c3f93 Add LSaddon::impersonate 2023-01-09 18:07:15 +01:00
Benjamin Renard 1b38957235 LSsession::loadLSprofiles(): reset current LSprofiles on each call
Be sure to reset current LSprofiles before (re)loading it.
2023-01-09 17:38:41 +01:00
Benjamin Renard f4f39d967e CI: configure tests for all supported Debian versions 2023-01-03 15:37:19 +01:00
Benjamin Renard 89a13d86c6 Docker: Add stuff to build old Debian versions images 2023-01-03 15:35:56 +01:00
Benjamin Renard d80c15acc1 LStemplate: rollback from array class constant to class variables to restore PHP < 7 2023-01-03 15:32:03 +01:00
Benjamin Renard a3fc7bacfa LSexample: restore compatibility with Debian stretch 2023-01-03 15:24:06 +01:00
Benjamin Renard d7ba794839 Rollback class properties typing to restore PHP < 7.4 support 2023-01-03 12:51:45 +01:00
Benjamin Renard 56e17a40f6 phpstan: Be sure Mail & Mail_mime classes are loaded during analyse 2023-01-02 01:56:57 +01:00
Benjamin Renard f53d868640 Update .gitlab-ci.yml file 2023-01-02 00:45:20 +00:00
Benjamin Renard 8e1aa74e12 Update .gitlab-ci.yml file 2023-01-02 00:38:47 +00:00
Benjamin Renard ecaf2aeb13 Docker: add missing vimrc.local file 2023-01-02 01:20:19 +01:00
Benjamin Renard 20432adb14 Clean errors detected by PHPstan (level 3) 2023-01-02 01:17:46 +01:00
Benjamin Renard bbde10bbf0 Add some class properties type & coments and clean errors detected by PHPstan (level 2) 2023-01-01 19:38:03 +01:00
Benjamin Renard 8a02680114 Clean/normalize comments format about parameters & returned value of functions/methods 2022-12-31 05:52:31 +01:00
Benjamin Renard e71823b644 Clean errors detected by PHPstan (level 1) 2022-12-31 04:09:56 +01:00
Benjamin Renard 38fa02619d Clean PHP8 compatibility errors detected by PHPstan 2022-12-31 02:31:21 +01:00
Benjamin Renard 7f862c9765 Clean errors detected by PHPstan (level 0) and configure CI to run it on each commit 2022-12-31 02:02:28 +01:00
Benjamin Renard a8e0707e7a select_list/select_box: force sub-options at the end when sorting 2022-12-07 17:11:17 +01:00
Benjamin Renard a9d00cd3c1 select list/box: display values respecting possible values order 2022-12-05 11:37:17 +01:00
Benjamin Renard fd17f87a57 LSformElement::jsonCompositeAttribute: fix handling empty value & $onlyIfPresent parameter 2022-10-17 17:29:36 +02:00
Benjamin Renard a0ceb1dbdc search: handle translation of LSformat, alternativeLSformats and formaterLSformat 2022-09-30 10:37:55 +02:00
Benjamin Renard 466dec4a64 doc: fix syntax error in previous commit 2022-09-28 17:24:54 +02:00
Benjamin Renard dcf68a2330 LSprofiles by LSobject: add possibility to compute basedn using LSformat on authenticated user 2022-09-28 16:50:24 +02:00
Benjamin Renard a56b20728a LSform: fix handling default values of dataEntryForm 2022-08-01 11:27:28 +02:00
Benjamin Renard e23ee2f209 LSaddon::accesslog: show events author 2022-07-20 14:56:16 +02:00
Benjamin Renard 75258d9744 LSaddon::accesslog: Fix PHP < 7.3 compatibility 2022-07-20 14:53:28 +02:00
Benjamin Renard c0d8f9f81a LSldap::update(): fix object creation with required userPassword attribute 2022-06-23 10:17:44 +02:00
Benjamin Renard 1aa4dd8113 Improve tools in docker image 2022-06-17 12:40:08 +02:00
Benjamin Renard 913a340ed4 doc: fix programlisting opacity 2022-06-16 14:30:06 +02:00
Benjamin Renard 1da20e7dcf LSexample: remove showObjectAccessLogs custom action on LSpeople 2022-06-16 14:17:06 +02:00
Emmanuel Saracco 2adbdb62c7 Add LSaddon accesslog 2022-06-16 13:15:28 +02:00
Emmanuel Saracco 855bcc8564 LSselect : code cleaning 2022-06-16 12:59:14 +02:00
Emmanuel Saracco 3eba1e24d6 LSselect : fix ajax input 2022-06-16 11:50:42 +02:00
Benjamin Renard fd81cb496f Restore location paths in ldapsaisie.pot file but make it relative 2022-06-14 17:05:53 +02:00
Emmanuel Saracco 4ae9e304ad Translation: fix typo 2022-06-14 16:22:17 +02:00
Emmanuel Saracco c657e318dd LSlang: add "--no-location" to xgettext 2022-06-14 16:10:02 +02:00
Emmanuel Saracco 38d5fd5094 LSldap: add LDAP password policy 2022-06-14 16:06:55 +02:00
Benjamin Renard c4e9a33d2d Add docker image 2022-06-08 14:24:35 +02:00
Benjamin Renard 23d185c171 LSexample: defaulty enable LSpeople API access 2022-06-08 14:21:51 +02:00
Benjamin Renard 7eee7e32b9 restore_lsexample: fix exit code on success 2022-06-08 12:01:27 +02:00
Benjamin Renard 457995bc22 Add argon2 passwords support 2022-04-19 11:53:39 +02:00
Benjamin Renard f5d21ec93c LSaddon ppolicy: fix badges color of password_expiration extraDisplayedColumn 2022-04-11 19:09:45 +02:00
Benjamin Renard 728be381a6 LSaddon ppolicy: Improve style of password_expiration extraDisplayedColumn in doc 2022-04-11 18:44:11 +02:00
Benjamin Renard 064d0f720b Add ppolicy LSaddon 2022-04-11 18:24:41 +02:00
Benjamin Renard faad922f03 LSldap: translate comments 2022-03-07 16:06:39 +01:00
Benjamin Renard 9d3e69c86d LSldap: fix updating internal attributes
LSldap::getEntry method now list expected attributes when using
the LSldap::getLdapEntry method. This method now also accept a
new $attrs attribute to specify expected attributes list.
2022-03-07 16:02:50 +01:00
Benjamin Renard 9c53608fa2 LSformElement::pre: Fix long lines diplay 2022-03-02 20:34:30 +01:00
Benjamin Renard ad38812859 Add LSaddon orgchart
A first implementation of this addon which deserves some improvements.
2022-02-22 18:24:37 +01:00
Benjamin Renard bbf40090a9 LSformRule::inarray: add reverse parameter 2022-02-17 10:38:41 +01:00
Benjamin Renard fe1181b531 AJAX routes: ensure to enable AJAX mode even if an error occured handling request 2022-02-01 21:47:50 +01:00
Benjamin Renard 2375f95063 SUPANN: Add UAI code of ENSAD 2022-01-19 11:33:48 +01:00
512 changed files with 24162 additions and 17799 deletions

7
.gitignore vendored
View file

@ -1,3 +1,10 @@
upgrade.log
*.sav
*~
vendor
/src/local.*
tests-report*.xml
.phplint-cache
/ldapsaisie-snapshot.tar.gz
/dist
/.env

351
.gitlab-ci.yml Normal file
View file

@ -0,0 +1,351 @@
stages:
- tests
- build
- publish
- release
variables:
DOC_BRANCH: doc
DOC_REMOTE: https://gitlab-ci-token:${ACCESS_TOKEN}@${CI_SERVER_HOST}/${CI_PROJECT_PATH}.git
PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"
PACKAGE_REGISTRY_URL: "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/${CI_PROJECT_NAME}/${CI_COMMIT_TAG}"
tests:bookworm:
image:
name: docker.io/brenard/ldapsaisie:bookworm
entrypoint: [""]
stage: tests
rules:
- changes:
- src/**/*.php
script:
- rm -fr vendor
- composer install
- service slapd start
- >
if [ "$GITLAB_CI" == "true" ]; then
./vendor/bin/phpstan analyse --no-interaction --configuration=.phpstan/config.neon --error-format=junit > tests-report-bookworm.xml
else
./vendor/bin/phpstan analyse --no-interaction --configuration=.phpstan/config.neon
fi
artifacts:
when: always
paths:
- tests-report-bookworm.xml
reports:
junit: tests-report-bookworm.xml
tests:bullseye:
image:
name: docker.io/brenard/ldapsaisie:bullseye
entrypoint: [""]
stage: tests
rules:
- changes:
- src/**/*.php
script:
- rm -fr vendor
- composer install
- service slapd start
- >
if [ "$GITLAB_CI" == "true" ]; then
./vendor/bin/phpstan analyse --no-interaction --configuration=.phpstan/config.neon --error-format=junit > tests-report-bullseye.xml
else
./vendor/bin/phpstan analyse --no-interaction --configuration=.phpstan/config.neon
fi
artifacts:
when: always
paths:
- tests-report-bullseye.xml
reports:
junit: tests-report-bullseye.xml
tests:buster:
image:
name: docker.io/brenard/ldapsaisie:buster
entrypoint: [""]
stage: tests
rules:
- changes:
- src/**/*.php
script:
- rm -fr vendor
- composer install
- service slapd start
- ./vendor/bin/phpstan analyse --no-interaction --configuration=.phpstan/config.neon --error-format=junit > tests-report-buster.xml
- >
if [ "$GITLAB_CI" == "true" ]; then
./vendor/bin/phpstan analyse --no-interaction --configuration=.phpstan/config.neon --error-format=junit > tests-report-buster.xml
else
./vendor/bin/phpstan analyse --no-interaction --configuration=.phpstan/config.neon
fi
artifacts:
when: always
paths:
- tests-report-buster.xml
reports:
junit: tests-report-buster.xml
tests:stretch:
image:
name: docker.io/brenard/ldapsaisie:stretch
entrypoint: [""]
stage: tests
rules:
- changes:
- src/*
script:
- cd /tmp/
- composer require overtrue/phplint --dev
- cd -
- rm -f .phplint-cache
- /tmp/vendor/bin/phplint src
tests:jessie:
image:
name: docker.io/brenard/ldapsaisie:jessie
entrypoint: [""]
stage: tests
rules:
- changes:
- src/**/*.php
script:
- cd /tmp/
- composer require overtrue/phplint --dev
- cd -
- rm -f .phplint-cache
- /tmp/vendor/bin/phplint src
build:debian-stable:
image: docker.io/brenard/debian-python-deb:debian11
stage: build
cache:
paths:
- .cache/pip
only:
- tags
script:
- ./build-deb.sh --install-build-deps
- rm -fr dist/ldapsaisie-*
- dpkg-parsechangelog --format dpkg|awk '/ ldapsaisie /,0'|tail -n +3 > dist/release-notes.md
artifacts:
paths:
- dist/*
build:debian-sid:
image: docker.io/brenard/debian-python-deb:debian11
stage: build
cache:
paths:
- .cache/pip
only:
- master
script:
- ./build-deb.sh --install-build-deps --sid
- rm -fr dist/ldapsaisie-*
artifacts:
paths:
- dist/*
build:snapshot:
stage: build
image: docker.io/alpine
only:
- master
script:
- tar -czf ldapsaisie-snapshot.tar.gz --exclude=ldapsaisie-snapshot.tar.gz ./
artifacts:
paths:
- ldapsaisie-snapshot.tar.gz
build:doc:html:
stage: build
image: docker.io/python:alpine
cache:
paths:
- .cache/pip
- doc/venv
only:
- master
before_script:
- apk add make git
- git config user.name $GITLAB_USER_NAME
- git config user.email $GITLAB_USER_EMAIL
- VERSION=`git describe --tags`
- cd doc
- git fetch origin $DOC_BRANCH
- git rev-parse --verify $DOC_BRANCH && git branch -D $DOC_BRANCH || echo "No existing local git $DOC_BRANCH branch"
- git checkout -b $DOC_BRANCH origin/$DOC_BRANCH
- git checkout $CI_COMMIT_SHA
- make clean && make venv
script:
- make LdapSaisie.html
- test -n "$CI_COMMIT_TAG" && DOC_TAG=stable || DOC_TAG=dev
- source venv/bin/activate # We must have to activate the venv to use mike (direct call not supported)
- mike deploy --branch $DOC_BRANCH --remote $DOC_REMOTE --push --update-aliases $VERSION $DOC_TAG
- mike set-default --branch $DOC_BRANCH --remote $DOC_REMOTE --push $DOC_TAG
artifacts:
paths:
- doc/LdapSaisie.html
build:doc:pdf:
stage: build
image:
name: docker.io/pink33n/html-to-pdf
entrypoint: ["/bin/sh", "-c"]
only:
- master
needs:
- build:doc:html
script:
- rm -f doc/LdapSaisie.pdf
- /usr/local/bin/entrypoint --url file://$(pwd)/doc/LdapSaisie.html --pdf doc/LdapSaisie.pdf || test -f doc/LdapSaisie.pdf
artifacts:
paths:
- doc/LdapSaisie.pdf
build:doc:epub:
stage: build
image:
name: docker.io/pandoc/core
entrypoint: ["/bin/sh", "-c"]
only:
- master
needs:
- build:doc:html
before_script:
- apk add make
script:
- cd doc
- test ! -d venv && mkdir venv && touch public_html LdapSaisie.html
- make LdapSaisie.epub
artifacts:
paths:
- doc/LdapSaisie.epub
build:doc:append_additional_versions:
stage: build
image: docker.io/python:alpine
only:
- master
needs:
- build:doc:html
- build:doc:pdf
- build:doc:epub
before_script:
- apk add git
- git config user.name $GITLAB_USER_NAME
- git config user.email $GITLAB_USER_EMAIL
- VERSION=`git describe --tags`
- cd doc
- git fetch origin $DOC_BRANCH
- git rev-parse --verify $DOC_BRANCH && git branch -D $DOC_BRANCH || echo "No existing local git $DOC_BRANCH branch"
- git checkout -b $DOC_BRANCH origin/$DOC_BRANCH
- git pull origin $DOC_BRANCH
script:
- cp LdapSaisie.html LdapSaisie.pdf LdapSaisie.epub dist/$VERSION/
- git add dist/$VERSION/
- git commit --amend --no-edit
- git push --force $DOC_REMOTE $DOC_BRANCH
publish:doc:
stage: publish
image: docker.io/alpine:latest
only:
- master
needs:
- build:doc:append_additional_versions
before_script:
- apk update && apk add git openssh-client rsync
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | base64 -d | ssh-add -
- mkdir ~/.ssh
- echo "$SSH_HOST_KEY" | base64 -d > ~/.ssh/known_hosts
- git fetch origin $DOC_BRANCH
- git rev-parse --verify $DOC_BRANCH && git branch -D $DOC_BRANCH || echo "No existing local git $DOC_BRANCH branch"
- git checkout -b $DOC_BRANCH origin/$DOC_BRANCH
- git pull origin $DOC_BRANCH
script:
- rsync -atv --exclude '.git*' --delete --progress ./doc/dist/ $SSH_USER@$SSH_HOST:doc/
publish:snapshot:
stage: publish
image: docker.io/alpine:latest
only:
- master
needs:
- build:snapshot
before_script:
- apk update && apk add openssh-client rsync
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | base64 -d | ssh-add -
- mkdir ~/.ssh
- echo "$SSH_HOST_KEY" | base64 -d > ~/.ssh/known_hosts
script:
- rsync -atv ldapsaisie-snapshot.tar.gz $SSH_USER@$SSH_HOST:download/ldapsaisie-snapshot.tar.gz
publish:debian-stable:
stage: publish
image: docker.io/debian:stable-slim
needs:
- build:debian-stable
only:
- tags
before_script:
- apt-get update
- apt-get install -y --no-install-recommends rsync openssh-client dupload
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | base64 -d | ssh-add -
- mkdir ~/.ssh
- echo "$SSH_HOST_KEY" | base64 -d > ~/.ssh/known_hosts
- echo "$DUPLOAD_CONFIG" | base64 -d > ~/.dupload.conf
script:
- echo "Publish stable debian packages on APT repository..."
- dupload --to debian-stable dist/ldapsaisie*changes
publish:gitlab:
stage: publish
image:
name: docker.io/alpine/httpie
entrypoint: ["/bin/sh", "-c"]
needs:
- build:debian-stable
only:
- tags
script:
- ./.gitlab/publish.sh
artifacts:
paths:
- dist/release-notes.md
- dist/release-files.txt
publish:debian-sid:
stage: publish
image: docker.io/debian:stable-slim
only:
- master
needs:
- build:debian-sid
before_script:
- apt-get update
- apt-get install -y --no-install-recommends rsync openssh-client dupload
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | base64 -d | ssh-add -
- mkdir ~/.ssh
- echo "$SSH_HOST_KEY" | base64 -d > ~/.ssh/known_hosts
- echo "$DUPLOAD_CONFIG" | base64 -d > ~/.dupload.conf
script:
- echo "Publish Sid debian packages on APT repository..."
- dupload --to debian-sid dist/ldapsaisie*changes
release:
stage: release
image:
name: registry.gitlab.com/gitlab-org/release-cli:latest
entrypoint: ["/bin/sh", "-c"]
needs:
- publish:gitlab
only:
- tags
script:
- ./.gitlab/release.sh

14
.gitlab/publish.sh Executable file
View file

@ -0,0 +1,14 @@
#!/bin/sh
cd `dirname $0`/../dist
rm -f release-files.txt
touch release-files.txt
for file in *.deb
do
# The filename can contain only lowercase letters (a-z), uppercase letter (A-Z), numbers (0-9), dots (.),
# hyphens (-), or underscores (_).
filename=`echo $file|tr '~' '_'|tr '+' '_'|sed s/[^a-zA-Z0-9\.\_\-]//g`
https --ignore-stdin --check-status PUT "${PACKAGE_REGISTRY_URL}/${filename}" "JOB-TOKEN: $CI_JOB_TOKEN" "@$file"
echo $filename >> release-files.txt
done

14
.gitlab/release.sh Executable file
View file

@ -0,0 +1,14 @@
#!/bin/sh
echo "Creating a release for $CI_COMMIT_TAG"
cd `dirname $0`/../dist
CMD="release-cli create --name $CI_COMMIT_TAG --description release-notes.md --tag-name $CI_COMMIT_TAG"
for file in `cat release-files.txt`
do
CMD="$CMD --assets-link {\"name\":\"$file\",\"url\":\"${PACKAGE_REGISTRY_URL}/$file\"}"
done
$CMD

9
.phpstan/compat.php Normal file
View file

@ -0,0 +1,9 @@
<?php
$config = [];
if (PHP_VERSION_ID < 80100) {
$config['parameters']['typeAliases']['FTP\Connection'] = 'resource';
}
return $config;

18
.phpstan/config.neon Normal file
View file

@ -0,0 +1,18 @@
includes:
- compat.php
parameters:
level: 3
paths:
- ../src
excludePaths:
- ../src/local
- ../src/tmp
bootstrapFiles:
- ../src/includes/core.php
- init.php
typeAliases:
LSformat: 'string'
universalObjectCratesClasses:
- LSsearchEntry
- LSurlRequest

13
.phpstan/init.php Normal file
View file

@ -0,0 +1,13 @@
<?php
require 'Net/LDAP2.php';
require 'Console/Table.php';
require 'Zxcvbn/autoload.php';
require '/usr/share/php/phpseclib/autoload.php';
require 'CAS.php';
require 'Mail.php';
require 'Mail/mime.php';
require 'Html2Text.php';
spl_autoload_register(array('LSsession', 'loadLSclass'));
LSsession :: initialize();

9
.pre-commit-config.yaml Normal file
View file

@ -0,0 +1,9 @@
# Pre-commit hooks to run tests and ensure code is cleaned.
# See https://pre-commit.com for more information
repos:
- repo: https://github.com/digitalpulp/pre-commit-php.git
rev: 1.4.0
hooks:
- id: php-stan
files: ^src\/.*\.(php)$
args: ['--configuration=.phpstan/config.neon']

12
INSTALL
View file

@ -23,8 +23,8 @@
* La librairie File_CSV_DataSource (paquet php-file-csv-datasource dans Debian)
* La librairie Console_Table (nécessaire pour le fonctionnement de l'outil CLI, paquet php-console-table dans Debian)
* Les librairies Mail et Mail_Mime (nécessaire pour l'envoi de courriels, paquets php-mail et php-mail-mime dans Debian)
* La librairie Net_FTP (nécessaire pour le fonctionnement du LSaddon FTP, paquet php-console-table dans Debian)
* La librairie PhpSecLib (nécessaire pour le fonctionnement du LSaddon SSH, paquet php-console-table dans Debian)
* L'extension PHP ftp (nécessaire pour le fonctionnement du LSaddon FTP, paquet php-ftp dans Debian)
* La librairie PhpSecLib (nécessaire pour le fonctionnement du LSaddon SSH, paquet php-phpseclib dans Debian)
#################
# Avertissement #
@ -78,7 +78,7 @@ Toutes les nuits, un snapshot de l'arbre Git est réalisé et est téléchargeab
Racine
doc/
Les fichiers sources de la documentation (docbook).
Les fichiers sources de la documentation (Markdown).
lsexample/
Les fichiers relatifs à l'annuaire d'exemple.
src/
@ -186,17 +186,11 @@ présente dans les sources du projet dans le dossier lsexample.
Nom du fichier de log des mises à jour.
THEME
Le nom du theme à installer (facultatif et non traité dans ce tutoriel).
BUILD_DOC
Variable booléene définissant si la documentation doit être compiler en utilisant le script buildDocExports.sh.
Ceci ne sera pas expliqué dans ce tutoriel et nous partirons donc du principe que cette variable est à 0.
########
# Note #
########
#
# * D'autres variables sont présentes dans ce fichier et concerne uniquement la compilation de la documentation.
# Elle peuvent être ignorée à partir du moment ou la variable BUILD_DOC vaut 0.
#
# * Il est possible d'utiliser dans ce fichier de configuration la variable bash $ROOT_DIR correspondant au chemin
# du dossier d'installation, c'est à dire dans notre exemple /var/www/ldapsaisie.
#

133
build-deb.sh Executable file
View file

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

View file

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

View file

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

View file

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

5
composer.json Normal file
View file

@ -0,0 +1,5 @@
{
"require-dev": {
"phpstan/phpstan": "^1.9"
}
}

78
composer.lock generated Normal file
View file

@ -0,0 +1,78 @@
{
"_readme": [
"This file locks the dependencies of your project to a known state",
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "37f736b754e8e0455f279bf0da013262",
"packages": [],
"packages-dev": [
{
"name": "phpstan/phpstan",
"version": "1.9.4",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpstan.git",
"reference": "d03bccee595e2146b7c9d174486b84f4dc61b0f2"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/d03bccee595e2146b7c9d174486b84f4dc61b0f2",
"reference": "d03bccee595e2146b7c9d174486b84f4dc61b0f2",
"shasum": ""
},
"require": {
"php": "^7.2|^8.0"
},
"conflict": {
"phpstan/phpstan-shim": "*"
},
"bin": [
"phpstan",
"phpstan.phar"
],
"type": "library",
"autoload": {
"files": [
"bootstrap.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"description": "PHPStan - PHP Static Analysis Tool",
"keywords": [
"dev",
"static analysis"
],
"support": {
"issues": "https://github.com/phpstan/phpstan/issues",
"source": "https://github.com/phpstan/phpstan/tree/1.9.4"
},
"funding": [
{
"url": "https://github.com/ondrejmirtes",
"type": "github"
},
{
"url": "https://github.com/phpstan",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan",
"type": "tidelift"
}
],
"time": "2022-12-17T13:33:52+00:00"
}
],
"aliases": [],
"minimum-stability": "stable",
"stability-flags": [],
"prefer-stable": false,
"prefer-lowest": false,
"platform": [],
"platform-dev": [],
"plugin-api-version": "2.3.0"
}

View file

@ -16,39 +16,3 @@ THEME_IMG_REF="default"
# Webserver service reload command to run on gettext MO files changed
#WEBSERVER_RELOAD_CMD='sudo service apache2 force-reload'
# Do doc export ?
BUILD_DOC=1
# The export dir
# If EXPORT_DIR is a zero length string, will not export doc
EXPORT_DOC_DIR=/var/www/ldapsaisie-doc
# PDF export name file
# If PDF is a zero length string, pdf doc export will not build
PDF=LdapSaisie.pdf
# EPUB export name file
# If EPUB is a zero length string, epub doc export will not build
EPUB=LdapSaisie.epub
# ALL_IN_ONE export name
# If ALL_IN_ONE is a zero length string, all-in-one doc export will not build
ALL_IN_ONE=all-in-one
# On-line export name
# If ONLINE is a zero length string, on-line doc export will not build
ONLINE=online
# Docbook export name
# If DOCBOOK is a zero length string, docbook doc export will not buil
DOCBOOK=docbook
# The CSS file to use in export
CSS=$ROOT_DIR/doc/styles/LS.css
# The image doc directory
IMAGES=$ROOT_DIR/doc/images
# The name of last update file
LAST_UPDATE_FILE=$EXPORT_DOC_DIR/last_update.txt

109
debian/changelog vendored
View file

@ -1,3 +1,112 @@
ldapsaisie (4.2.0-1) stable; urgency=medium
* PHP 8.2 support
* LSconfig: add escape_key, explode_keys and implode_keys helper methods
* Improve LSldapObject::getDisplayValue() method to match with getValue() method's parameters
* Fix LSattribute::getDisplayValue() when called on updated attribute
* LSattr_ldap::date: replace unique format parameter by a list
* Fix some french translated messages
* Auth:
* LSauth: add filter_function parameter
* LSauthMethod::CAS: fix support of phpCAS >= 1.6.0 and patched Debian Buster 1.3.6-1+deb10u1 version
* Addons
* accesslog:
* Improve displaying changes attributes values
* Fix infinity loop problem handling entry renaming event with the same DN
* ftp: Remove PEAR Net_FTP dependency
* posix: Add deleteHomeDirectoryByFTP function
* supann: Add supannCMSIdEtiquette attribute support
* doc: switch format to Markdown & Mkdocs
-- LdapSaisie project <support+ldapsaisie@easter-eggs.com> Thu, 26 Oct 2023 11:55:52 +0200
ldapsaisie (4.1.0-1) unstable; urgency=medium
* PHP8 compatibility
* Import/export:
* Allow translation of labels
* Add before/after import triggers feature
* Allow to generate attribute value using a custom callable
* Add update_only mode
* Trace errors and messages during import to map them with objects and hooks.
* Improve handling time & memory limits and allow before_import hook to set them
* import: Check generated field value and stop import in case of error
* import: Fix displaying attribute errors two times
* Translation:
* Fix handling backslash in export POT file
* Improve internal message extrators from PHP files
* CLI commands messages translation
* generate_lang_file: add possibility to translate message in a text editor
* generate_lang_file: ignore LSformat string with simple string substitution
* Make location paths in ldapsaisie.pot file relative
* generate_ldapsaisie_pot: Add -I/--internal paramater to use internal message extractor for PHP files instead of xgettext
* Templating tr function: provided message could now be formated as LSformat string using extra provided parameters
* Search:
* handle translation of LSformat, alternativeLSformats and formaterLSformat
* Fix/improve handling data keep in session
* globalSearch: defaulty display extraDisplayedColumns
* LSsession:
* fix saving context info method to keep existing other info
* canExecuteCustomAction(): fix handling self LSprofile
* loadLSprofiles(): reset current LSprofiles on each call
* LSprofiles by LSobject: add possibility to compute basedn using LSformat on authenticated user
* LSldap:
* add formatDate() method
* add possibility to configure hooks
* getAttr(): be sure to return on array when $multiple is true
* add LDAP password policy support
* update(): fix object creation with required userPassword attribute
* translate code comments
* fix updating internal attributes
* LSform:
* fix handling default values of dataEntryForm
* dataEntryForm: Add forceGeneration parameter
* LSformElements
* inarray: add reverse parameter
* jsonCompositeAttribute:
* fix checking non-multiple components value
* fix handling empty value & $onlyIfPresent parameter
* pre: Fix long lines diplay
* select_list/select_box: display values respecting possible values order and force sub-options at the end when sorting
* Themes:
* light-blue.css: Fix LSobject-list links color on line hover
* Fix default ASC & DESC images color to fit with clear themes
* Addons:
* Some news addons: accesslog, impersonate, orgchart, ppolicy, showSupportInfo
* Code cleaning
* Mail:
* fix catch all message suffix in HTML mode
* make optional parameter of sendMail() defaulty null
* add MAIL_CATCH_ALL parameter
* SUPANN:
* Rename some functions:
* supannCheckEduPersonPrimaryAffiliation => validate_eduPersonPrimaryAffiliation
* supannCheckEduPersonAffiliation => validate_eduPersonAffiliation
* Add some new functions:
* generate_supannRessourceEtat
* generate_supannEntiteAffectationPrincipale & validate_supannEntiteAffectationPrincipale
* Add UAI code of ENSAD
* LSformElements:
* supannCompositeAttribute: fix checking components value
* supannEtuInscription: fix cursusann component regex
* LSexample:
* Make restore_lsexample compatible with OpenLDAP 2.5 (and Debian Bookworm)
* LSexample: restore compatibility with Debian stretch
* Remove showObjectAccessLogs custom action on LSpeople
* Defaulty enable LSpeople API access
* Other changes:
* LSerror::getErrors(): add $reset parameter
* LSselect: fix ajax input
* AJAX routes: ensure to enable AJAX mode even if an error occured handling request
* LSldapObject::validateAttrsData(): fix handling attribute generation of empty required attributes even if their new value have been provided
* Add argon2 passwords support
* LSdefault / copyable helper: add copyable-no-btn helper class and fix translating messages
* Add some helper functions: generate_uuid(), getRdn() and parentDn()
* Code cleaning and quality improvement using PHPstan and pre-commit & CI to maintain it
* Fix typos
-- Benjamin Renard <brenard@easter-eggs.com> Sat, 22 Jul 2023 13:38:40 +0200
ldapsaisie (4.0.0-1) unstable; urgency=medium
* Add API feature

6
debian/control vendored
View file

@ -1,13 +1,13 @@
Source: ldapsaisie
Section: admin
Priority: extra
Build-Depends: debhelper, xsltproc, docbook-xsl, bash-completion
Build-Depends: debhelper, bash-completion, python3, python3-venv, python3-pip
Maintainer: Benjamin Renard <brenard@easter-eggs.com>
Package: ldapsaisie
Architecture: all
Depends: apache2 | httpd, php-ldap | php5-ldap, php-fpm | libapache2-mod-php5 | libapache2-mod-php | php5-cli | php-cli, smarty | smarty3, php-net-ldap2, php-net-ftp, php-mail, php-mail-mime, php-console-table
Recommends: php-mbstring, php-phpseclib, php-unidecode, php-zxcvbn
Depends: apache2 | httpd, php-ldap | php5-ldap, php-fpm | libapache2-mod-php5 | libapache2-mod-php | php5-cli | php-cli, smarty | smarty3, php-net-ldap2, php-console-table
Recommends: php-mbstring, php-phpseclib, php-unidecode, php-zxcvbn, php-ftp, php-mail, php-mail-mime, php-html2text, php-gnupg
Description: web based interface for managing LDAP servers content
LdapSaisie is a Web application developed to manage LDAP directory.
It has been written in PHP / JavaScript and is published under the

View file

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

2
debian/rules vendored
View file

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

6
doc/.gitignore vendored Normal file
View file

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

View file

@ -1,45 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!ENTITY LdapSaisie "<application>LdapSaisie</application>">
<!ENTITY netldap "<application><ulink url='http://pear.php.net/package/Net_LDAP2'>Net_LDAP2</ulink></application>">
<!ENTITY smarty "<application><ulink url='http://www.smarty.net/'>Smarty</ulink></application>">
<!ENTITY php "<application><ulink url='http://www.php.net/'>PHP</ulink></application>">
<!ENTITY PEAR "<application><ulink url='http://pear.php.net/'>PEAR</ulink></application>">
<!ENTITY PEAR_Console_Table "<application><ulink url='https://pear.php.net/package/Console_Table'>Console_Table</ulink></application>">
<!ENTITY PEAR_Net_FTP "<application><ulink url='https://pear.php.net/package/Net_FTP'>Net_FTP</ulink></application>">
<!ENTITY PEAR_Mail "<application><ulink url='https://pear.php.net/package/Mail'>Mail</ulink></application>">
<!ENTITY PEAR_Mail_Mime "<application><ulink url='https://pear.php.net/package/Mail_Mime'>Mail_Mime</ulink></application>">
<!ENTITY PhpSecLib "<application><ulink url='https://github.com/phpseclib/phpseclib'>PhpSecLib</ulink></application>">
<!ENTITY openldap "<application><ulink url='http://www.openldap.org/'>OpenLDAP</ulink></application>">
<!ENTITY courier "<application><ulink url='http://www.courier-mta.org/'>Courier</ulink></application>">
<!ENTITY CAS "<application><ulink url='http://www.jasig.org/cas'>CAS</ulink></application>">
<!ENTITY phpCAS "<application><ulink url='http://www.ja-sig.org/wiki/display/CASC/phpCAS'>phpCAS</ulink></application>">
<!ENTITY PhpLdapAdmin "<application><ulink url='http://phpldapadmin.sourceforge.net'>PhpLdapAdmin</ulink></application>">
<!ENTITY TinyMCE "<application><ulink url='https://www.tinymce.com'>TinyMCE</ulink></application>">
<!ENTITY subDn "<link linkend='config-subDn'>subDn</link>">
<!ENTITY LSprofile "<link linkend='config-LSprofile'>LSprofile</link>">
<!ENTITY LSprofiles "<link linkend='config-LSprofile'>LSprofiles</link>">
<!ENTITY LSobject "<link linkend='config-LSobject'>LSobject</link>">
<!ENTITY LSobjects "<link linkend='config-LSobject'>LSobjects</link>">
<!ENTITY LSattribute "<link linkend='config-LSattribute'>LSattribute</link>">
<!ENTITY LSattributes "<link linkend='config-LSattribute'>LSattributes</link>">
<!ENTITY customActions "<link linkend='config-LSobject-customActions'>customActions</link>">
<!ENTITY customSearchActions "<link linkend='config-LSobject-customSearchActions'>customActions</link>">
<!ENTITY LSrelation "<link linkend='config-LSobject-LSrelation'>LSrelation</link>">
<!ENTITY LSrelations "<link linkend='config-LSobject-LSrelation'>LSrelations</link>">
<!ENTITY LSform "<link linkend='config-LSobject-LSform'>LSform</link>">
<!ENTITY LSforms "<link linkend='config-LSobject-LSform'>LSforms</link>">
<!ENTITY LSformat "<link linkend='config-LSformat'>LSformat</link>">
<!ENTITY LSformats "<link linkend='config-LSformat'>LSformats</link>">
<!ENTITY LSaddon "<link linkend='config-LSaddon'>LSaddon</link>">
<!ENTITY LSaddons "<link linkend='config-LSaddon'>LSaddons</link>">
<!ENTITY LSauthMethod "<link linkend='config-LSauthMethod'>LSauthMethod</link>">
<!ENTITY LSselect "<emphasis>LSselect</emphasis>">
<!ENTITY LSsearch "<link linkend='config-LSobject-LSsearch'>LSsearch</link>">
<!ENTITY LSformElement "<link linkend='contrib-LSformElements'>LSformElement</link>">
<!ENTITY LSformElements "<link linkend='contrib-LSformElements'>LSformElements</link>">
<!ENTITY LSformRule "<link linkend='contrib-LSformRules'>LSformRule</link>">
<!ENTITY LSformRules "<link linkend='contrib-LSformRules'>LSformRules</link>">
<!ENTITY GIT_RAW_ROOT_URL "https://gitlab.easter-eggs.com/ee/ldapsaisie/-/raw/master">

View file

@ -1,60 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE
book SYSTEM "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
[
<!ENTITY % LS-entities SYSTEM "LS.entities.xml">
%LS-entities;
<!ENTITY % conf-entities SYSTEM "conf/conf.entities.xml">
%conf-entities;
<!ENTITY % conf-LSattribute-LSattr_html-entities SYSTEM "conf/LSattribute/LSattr_html/LSattr_html.entities.xml">
%conf-LSattribute-LSattr_html-entities;
<!ENTITY % conf-LSattribute-LSattr_ldap-entities SYSTEM "conf/LSattribute/LSattr_ldap/LSattr_ldap.entities.xml">
%conf-LSattribute-LSattr_ldap-entities;
<!ENTITY % conf-LSattribute-check_data-entities SYSTEM "conf/LSattribute/check_data/LSattribute-check_data.entities.xml">
%conf-LSattribute-check_data-entities;
<!ENTITY % conf-LSaddon-entities SYSTEM "conf/LSaddon/LSaddon.entities.xml">
%conf-LSaddon-entities;
<!ENTITY % conf-LSauthMethod-entities SYSTEM "conf/LSauthMethod/LSauthMethod.entities.xml">
%conf-LSauthMethod-entities;
<!ENTITY intro SYSTEM "intro/intro.docbook">
<!ENTITY install SYSTEM "install/install.docbook">
<!ENTITY install-arbo SYSTEM "install/arbo.docbook">
<!ENTITY upgrade SYSTEM "upgrade/upgrade.docbook">
<!ENTITY api SYSTEM "api/api.docbook">
<!ENTITY contrib SYSTEM "contrib/contrib.docbook">
]>
<book lang="fr">
<bookinfo lang="fr">
<title>LdapSaisie</title>
<authorgroup>
<author>
<firstname>Benjamin</firstname>
<surname>Renard</surname>
<affiliation>
<address>
<email>brenard@easter-eggs.com</email>
<email>benjamin.renard@zionetrix.net</email>
</address>
</affiliation>
</author>
</authorgroup>
<productname>LdapSaisie</productname>
<releaseinfo>Version 0.3</releaseinfo>
</bookinfo>
&intro;
&install;
&upgrade;
&conf;
&api;
&contrib;
</book>

View file

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

View file

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

View file

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

View file

@ -0,0 +1,40 @@
import sys
import os.path
from bs4 import BeautifulSoup
# Check & handle arguments
if len(sys.argv) < 2:
print(f'Usage: {sys.argv[0]} [/path/to/input.html] [/path/to/output.html]')
sys.exit(1)
input_path = sys.argv[1]
if not os.path.exists(input_path):
print(f'{input_path} not found')
sys.exit(1)
output_path = sys.argv[2] if len(sys.argv) > 2 else input_path
# Open & parse HTML input file
with open(input_path, 'r') as fp:
soup = BeautifulSoup(fp, 'html.parser')
# Delete some useless elements
to_delete = [
(['div'], {'class': 'md-sidebar'}),
(['div'], {'class': 'md-search'}),
(['label'], {'for': '__search'}),
(['div'], {'id': 'print-site-banner'}),
(['div'], {'class': 'md-header__source'}),
]
for args, kwargs in to_delete:
for el in soup.find_all(*args, **kwargs):
el.decompose()
# Change LdapSaisie logo header link to JS scroll top action
soup.find('a', attrs={'class': 'md-logo'})['href'] = 'javascript:window.scrollTo(0,0)'
# Store resulting HTML document in output file
with open(output_path, 'w') as fp:
fp.write(str(soup))

View file

@ -1,57 +0,0 @@
<sect2 id='config-search-params'>
<title>Paramètres étendus des recherches dans l'annuaire</title>
<para>Les paramètres des recherches sont ceux supportés par &netldap;. Ces
paramètres sont passés sous la forme d'un tableau associatif. Les paramètres
supportés sont détaillés ci-dessous :
<informaltable>
<tgroup cols="3"> <!-- on décrit le nombre de colonnes -->
<thead> <!-- on passe au "header" du tableau -->
<row>
<entry>Nom</entry>
<entry>Description</entry>
<entry>Valeur par défaut</entry>
</row>
</thead>
<tbody> <!-- et on remplit les lignes -->
<row>
<entry><parameter>scope</parameter></entry>
<entry>
<simpara>Définition de l'étendue de la recherche :</simpara>
<itemizedlist>
<listitem><simpara><literal>base</literal> - Sur une entrée seulement</simpara></listitem>
<listitem><simpara><literal>one</literal> - Sur les entrées imédiatement contenu par le <parameter>basedn</parameter> de la recherche</simpara></listitem>
<listitem><simpara><literal>sub</literal> - Sur l'arbre entier</simpara></listitem>
</itemizedlist>
</entry>
<entry><literal>sub</literal></entry>
</row>
<row>
<entry><parameter>sizelimit</parameter></entry>
<entry>Le nombre maximum d'entrées retournées par la recherche.</entry>
<entry><literal>0</literal> (illimité)</entry>
</row>
<row>
<entry><parameter>timelimit</parameter></entry>
<entry>Le délai d'attente maximum de la réponse du serveur en secondes.</entry>
<entry><literal>0</literal> (illimité)</entry>
</row>
<row>
<entry><parameter>attrsonly</parameter></entry>
<entry>Si <emphasis>vrai</emphasis>, seuls les noms des atttributs seront
retournés.</entry>
<entry><literal>false</literal></entry>
</row>
<row>
<entry><parameter>attributes</parameter></entry>
<entry>Tableau contenant les noms des attributs que les entrées retournées
peuvent contenir et que l'on souhaite récupérer.</entry>
<entry><literal>array()</literal>(tous)</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<remark>Pour plus d'information sur le sujet, vous pouvez consulter la
documentation officiel du projet &netldap;.</remark>
</para>
</sect2>

View file

@ -1,21 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<sect1 id='config-LSaddon'>
<title>Configuration des LSaddons</title>
<para>
Cette partie décrit la manière de configurer les différents &LSaddons;
actuellement supportés par &LdapSaisie;. Ces addons peuvent avoir un
fichier de configuration et il sera alors stocké dans le dossier
<literal>conf/LSaddons/</literal> et potera le nom
<literal>config.LSaddons.[addon name].php</literal>.
</para>
&conf-LSaddon_asterisk;
&conf-LSaddon_exportSearchResultAsCSV;
&conf-LSaddon_LSaccessRightsMatrixView;
&conf-LSaddon_mail;
&conf-LSaddon_maildir;
&conf-LSaddon_mailquota;
&conf-LSaddon_phpldapadmin;
&conf-LSaddon_showTechInfo;
</sect1>

View file

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

View file

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

View file

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

View file

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

View file

@ -1,88 +0,0 @@
<sect2 id="config-LSaddon_mail">
<title>LSaddon_mail</title>
<para>Cet &LSaddon; est utilisé pour gérer l'envoie de mail. Il utilise
pour cela les librairies &PEAR; <emphasis>Mail</emphasis> et <emphasis>
Mail_Mime</emphasis> qui doivent être installés. Cet &LSaddon; doit être
configuré en éditant son fichier de configuration
<literal>config.LSaddons.mail.php</literal>.</para>
<programlisting linenumbering="unnumbered">
<citetitle>Structure du fichier</citetitle>/*
***********************************************
* Configuration du support de l'envoi de mail *
***********************************************
*/
// Pear :: Mail
define('PEAR_MAIL','/usr/share/php/Mail.php');
// Pear :: Mail_mime
define('PEAR_MAIL_MIME','/usr/share/php/Mail/mime.php');
/*
* Méthode d'envoie :
* - mail : envoie avec la méthode PHP mail()
* - sendmail : envoie la commande sendmail du système
* - smtp : envoie en utilisant un serveur SMTP
*/
define('MAIL_SEND_METHOD','smtp');
/*
* Paramètres d'envoie :
* Ces paramètres dépende de la méthode utilisé. Repporté vous à la documentation
* de PEAR :: Mail pour plus d'information.
* Lien : http://pear.php.net/manual/en/package.mail.mail.factory.php
* Infos :
* List of parameter for the backends
* mail
* o If safe mode is disabled, $params will be passed as the fifth
* argument to the PHP mail() function. If $params is an array,
* its elements will be joined as a space-delimited string.
* sendmail
* o $params["sendmail_path"] - The location of the sendmail program
* on the filesystem. Default is /usr/bin/sendmail.
* o $params["sendmail_args"] - Additional parameters to pass to the
* sendmail. Default is -i.
* smtp
* o $params["host"] - The server to connect. Default is localhost.
* o $params["port"] - The port to connect. Default is 25.
* o $params["auth"] - Whether or not to use SMTP authentication.
* Default is FALSE.
* o $params["username"] - The username to use for SMTP authentication.
* o $params["password"] - The password to use for SMTP authentication.
* o $params["localhost"] - The value to give when sending EHLO or HELO.
* Default is localhost
* o $params["timeout"] - The SMTP connection timeout.
* Default is NULL (no timeout).
* o $params["verp"] - Whether to use VERP or not. Default is FALSE.
* o $params["debug"] - Whether to enable SMTP debug mode or not.
* Default is FALSE.
* o $params["persist"] - Indicates whether or not the SMTP connection
* should persist over multiple calls to the send() method.
*/
$MAIL_SEND_PARAMS = NULL;
/*
* Headers :
*/
$MAIL_HEARDERS = array(
);
</programlisting>
<para>Cet &LSaddon; offre la possibilité d'utilisé la fonction &php;
<function>sendMail()</function>.
<funcsynopsis>
<funcprototype>
<funcdef>bool <function>sendMail</function></funcdef>
<paramdef>string <parameter>$to</parameter></paramdef>
<paramdef>string <parameter>$subject</parameter></paramdef>
<paramdef>string <parameter>$msg</parameter></paramdef>
<paramdef>array <parameter>$headers</parameter></paramdef>
<paramdef>array <parameter>$attachments</parameter></paramdef>
<paramdef>string <parameter>$eol</parameter></paramdef>
<paramdef>string <parameter>$encoding</parameter></paramdef>
<paramdef>boolean <parameter>$html</parameter></paramdef>
</funcprototype>
</funcsynopsis>
</para>
</sect2>

View file

@ -1,5 +0,0 @@
<sect2 id="config-LSaddon_maildir">
<title>LSaddon_maildir</title>
<para>Cet &LSaddon; est utilisé pour gérer la manipulation distante de maildir.
FIXME</para>
</sect2>

View file

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

View file

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

View file

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

View file

@ -1,294 +0,0 @@
<sect2 id="config-LSattribute">
<title>Configuration des attributs</title>
<para>Cette section décrit les options de configuration des attributs des
&LSobjects;. Les attributs sont définis dans le tableau associatif
<varname>attrs</varname> de la configuration des &LSobjects;. Dans ce tableau,
les clé les noms des attributs et les valeurs liés sont la configuration des
attributs.</para>
<warning><simpara>Contrairement à ce qui existe dans le standard LDAP, les
noms des attributs sont sensibles à la casse. Il faut que le nom des attributs
dans &LdapSaisie; soient scrupuleusement les mêmes que ceux retourné par
&netldap;</simpara></warning>
<programlisting linenumbering="unnumbered">
<citetitle>Structure</citetitle>...
<![CDATA['attrs' => array (
/* ----------- start -----------*/
'attr1' => array (
'label' => '[label de l'attr1',
'displayAttrName' => '[booleen]',
'help_info' => '[Message d'aide sur l'attribut attr1]',
'help_info_in_view' => '[booleen]',
'ldap_type' => 'ldaptype1',
'ldap_options' => array(
// Options LDAP liées au type LDAP de l'attribut
),
'html_type' => 'htmltype1',
'html_options' => array(
// Options HTML liées au type HTML de l'attribut
),
'no_value_label' => '[No set value label]',
'multiple' => 0,
'required' => 1,
'generate_function' => 'fonction1',
'generate_value_format' => '[LSformat]',
'default_value' => 'valeur1',
'check_data' => array (
// Régle de vérification syntaxique des données saisies
),
'validation' => array (
// Règle de vérification d'intégrité des données saisies
),
'rights' => array(
'LSprofile1' => 'droit1',
'LSprofile2' => 'droit2',
...
),
'view' => 1,
'form' => array (
'create' => 1,
'modify' => 0,
...
),
'dependAttrs' => array(
// Attributs en dépendance
),
'onDisplay' => 'fonction2'
'before_modify' => 'function1',
'after_modify' => 'function2'
),
/* ----------- end -----------*/
...
);]]>
...
</programlisting>
<!-- Début Paramètres Configuration -->
<variablelist>
<title>Paramètres de configuration</title>
<varlistentry>
<term>label</term>
<listitem>
<simpara>Le label de l'attribut.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>displayAttrName</term>
<listitem>
<simpara>Booléen définissant si le nom de l'attribut doit être affiché en
préfixe du message d'aide (paramètre <parameter>help_info</parameter>).</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>help_info</term>
<listitem>
<simpara>Message d'aide qui sera affiché dans une bulle d'aide à côté du
nom de l'attribut dans les formulaires.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>help_info_in_view</term>
<listitem>
<simpara>Booléen définissant si le message d'aide doit être affiché sur la vue
de visualisation de l'objet.</simpara>
<simpara>Valeurs possibles : <emphasis>0</emphasis> ou <emphasis>1</emphasis></simpara>
<simpara>Valeur par défaut : <emphasis>0</emphasis></simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>ldap_type</term>
<listitem>
<simpara>Le type LDAP de l'attribut (facultatif, par défaut: &LSattr_ldap_ascii;).
<link linkend='config-LSattr_ldap'>Voir la section concernée.</link></simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>ldap_options</term>
<listitem>
<simpara>Tableau associatif contenant les paramètres de configuration du
type LDAP de l'attribut.
<link linkend='config-LSattr_ldap'>Voir la section concernée.</link></simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>html_type</term>
<listitem>
<simpara>Le type HTML de l'attribut (facultatif, par défaut: &LSattr_html_text;).
<link linkend='config-LSattr_html'>Voir la section concernée.</link></simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>html_options</term>
<listitem>
<simpara>Tableau associatif contenant les paramètres de configuration du
type HTML de l'attribut.
<link linkend='config-LSattr_html'>Voir la section concernée.</link></simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>no_value_label</term>
<listitem>
<simpara>Label affiché lorsque l'attribut n'a pas de valeur (facultatif).</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>multiple</term>
<listitem>
<simpara>Booléen définissant si cet attribut peut stocker plusieurs valeurs.</simpara>
<simpara>Valeurs possibles : <emphasis>0</emphasis> ou <emphasis>1</emphasis></simpara>
<simpara>Valeur par défaut : <emphasis>0</emphasis></simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>required</term>
<listitem>
<simpara>Booléen définissant si cet attribut doit obligatoirement être
défini.</simpara>
<simpara>Valeurs possibles : <emphasis>0</emphasis> ou <emphasis>1</emphasis></simpara>
<simpara>Valeur par défaut : <emphasis>0</emphasis></simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>generate_function</term>
<listitem>
<simpara>Nom de la fonction permettant de générer la valeur de l'attribut.
Cette fonction sera éxecutée, en passant en premier paramètre, l'objet
&LSobject; courant.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>generate_value_format</term>
<listitem>
<simpara>&LSformat; permettant la génération de l'attribut.</simpara>
<note><simpara>Cette méthode de génération est utilisée uniquement si aucune fonction de génération
de la valeur n'est définie (paramètre <parameter>generate_function</parameter>).</simpara></note>
</listitem>
</varlistentry>
<varlistentry>
<term>default_value</term>
<listitem>
<simpara>Valeur par défaut de l'attribut.</simpara>
<warning><simpara>Il doit s'agir de la valeur telque retournée par le formulaire web.
Ainsi, par exemple dans le cas d'un attribut booléen, les valeurs possibles sont <literal>yes</literal> ou
<literal>no</literal>.</simpara></warning>
<note><simpara>Cette valeur est également utilisée dans le cadre de la génération automatique
de la valeur de l'attribut si aucune autre méthode n'est disponible (via une fonction ou un &LSformat;).</simpara></note>
</listitem>
</varlistentry>
<varlistentry>
<term>check_data</term>
<listitem>
<simpara>Tableau associatif contenant les règles de vérification syntaxique
des données de l'attribut.<link linkend='config-LSattribute-check-data'>Voir
la section concernée.</link></simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>validation</term>
<listitem>
<simpara>Tableau associatif contenant les règles de vérification d'intégrité
des données de l'attribut.<link linkend='config-LSattribute-validation'>Voir
la section concernée.</link></simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>rights</term>
<listitem>
<simpara>Tableau associatif dont les clés sont les noms des &LSprofiles; ayant
des droits sur cet attribut et les valeurs associées sont les droits
correspondants. La valeur des droits d'un &LSprofile; peut être
<literal>r</literal> pour le droit de lecture ou <literal>w</literal> pour
le droit de lecture-écriture. Par défaut, un &LSprofile; n'a aucun droit.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>view</term>
<listitem>
<simpara>Booléen définissant si l'attribut est, ou non, affiché lors de la
visualisation des objets du type courant.</simpara>
<simpara>Valeurs possibles : <emphasis>0</emphasis> ou <emphasis>1</emphasis></simpara>
<simpara>Valeur par défaut : <emphasis>0</emphasis></simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>form</term>
<listitem>
<simpara>Tableau associatif dont les clés sont les noms des &LSforms; et les
valeurs associées la définition de l'affichage dans ce &LSform;. Si cette
valeur vaut <emphasis>0</emphasis>, alors l'attribut sera lecture-seule et si
cette valeur vaut <emphasis>1</emphasis>, cet attribut sera affiché en
lecture-écriture.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>dependAttrs</term>
<listitem>
<simpara>Tableau associatif listant les attributs dépendants de celui-ci.
Les attributs listés ici seront regénérés lors de chaque modification
de l'attribut courant. Cette génération sera effectuée avec la fonction
définie dans le paramètre <varname>generate_function</varname> de
l'attribut.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>onDisplay</term>
<listitem>
<simpara>Nom ou liste de nom des fonctions retournant les valeurs d'affichages
de l'attribut. Si c'est une liste, chacune des fonctions seront executée les
unes après les autres. Ces fonctions seront éxecutées, en passant en premier
paramètre, le tableau des valeurs de l'objet.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>before_modify</term>
<listitem>
<simpara>Chaîne de caractères (ou tableau de chaine de caractères) correspondant
au nom d'une ou plusieurs fonctions qui seront exécutées avant toutes modifications de
la valeur de l'attribut.<link linkend="config-LSattribute-triggers">Voir la
section concernée</link></simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>after_modify</term>
<listitem>
<simpara>Chaîne de caractères (ou tableau de chaine de caractères) correspondant
au nom d'une ou plusieurs fonctions qui seront exécutées après toutes modifications de
la valeur de l'attribut.<link linkend="config-LSattribute-triggers">Voir la
section concernée</link></simpara>
</listitem>
</varlistentry>
</variablelist>
&conf-LSattribute-LSattr_ldap;
&conf-LSattribute-LSattr_html;
&conf-LSattribute-check-data;
&conf-LSattribute-validation;
&conf-LSattribute-triggers;
</sect2>

View file

@ -1,31 +0,0 @@
<sect3 id="config-LSattr_html">
<title>Configuration des attributs HTML</title>
<para>Cette section décrit les options propres à chacun des types d'attributs HTML
supportés par &LdapSaisie;.</para>
&conf-LSattr_html_boolean;
&conf-LSattr_html_date;
&conf-LSattr_html_image;
&conf-LSattr_html_jsonCompositeAttribute;
&conf-LSattr_html_labeledValue;
&conf-LSattr_html_mail;
&conf-LSattr_html_maildir;
&conf-LSattr_html_mailQuota;
&conf-LSattr_html_password;
&conf-LSattr_html_postaladdress;
&conf-LSattr_html_pre;
&conf-LSattr_html_rss;
&conf-LSattr_html_sambaAcctFlags;
&conf-LSattr_html_select_box;
&conf-LSattr_html_select_list;
&conf-LSattr_html_select_object;
&conf-LSattr_html_ssh_key;
&conf-LSattr_html_tel;
&conf-LSattr_html_text;
&conf-LSattr_html_textarea;
&conf-LSattr_html_url;
&conf-LSattr_html_valueWithUnit;
&conf-LSattr_html_wywiwyg;
&conf-LSattr_html_xmpp;
</sect3>

View file

@ -1,32 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!ENTITY conf-LSattr_html_boolean SYSTEM "LSattr_html_boolean.docbook">
<!ENTITY conf-LSattr_html_date SYSTEM "LSattr_html_date.docbook">
<!ENTITY conf-LSattr_html_image SYSTEM "LSattr_html_image.docbook">
<!ENTITY conf-LSattr_html_jsonCompositeAttribute SYSTEM "LSattr_html_jsonCompositeAttribute.docbook">
<!ENTITY conf-LSattr_html_labeledValue SYSTEM "LSattr_html_labeledValue.docbook">
<!ENTITY conf-LSattr_html_mail SYSTEM "LSattr_html_mail.docbook">
<!ENTITY conf-LSattr_html_maildir SYSTEM "LSattr_html_maildir.docbook">
<!ENTITY conf-LSattr_html_mailQuota SYSTEM "LSattr_html_mailQuota.docbook">
<!ENTITY conf-LSattr_html_password SYSTEM "LSattr_html_password.docbook">
<!ENTITY conf-LSattr_html_postaladdress SYSTEM "LSattr_html_postaladdress.docbook">
<!ENTITY conf-LSattr_html_pre SYSTEM "LSattr_html_pre.docbook">
<!ENTITY conf-LSattr_html_rss SYSTEM "LSattr_html_rss.docbook">
<!ENTITY conf-LSattr_html_sambaAcctFlags SYSTEM "LSattr_html_sambaAcctFlags.docbook">
<!ENTITY conf-LSattr_html_select_box SYSTEM "LSattr_html_select_box.docbook">
<!ENTITY conf-LSattr_html_select_list SYSTEM "LSattr_html_select_list.docbook">
<!ENTITY conf-LSattr_html_select_object SYSTEM "LSattr_html_select_object.docbook">
<!ENTITY conf-LSattr_html_ssh_key SYSTEM "LSattr_html_ssh_key.docbook">
<!ENTITY conf-LSattr_html_tel SYSTEM "LSattr_html_tel.docbook">
<!ENTITY conf-LSattr_html_text SYSTEM "LSattr_html_text.docbook">
<!ENTITY conf-LSattr_html_textarea SYSTEM "LSattr_html_textarea.docbook">
<!ENTITY conf-LSattr_html_url SYSTEM "LSattr_html_url.docbook">
<!ENTITY conf-LSattr_html_valueWithUnit SYSTEM "LSattr_html_valueWithUnit.docbook">
<!ENTITY conf-LSattr_html_wywiwyg SYSTEM "LSattr_html_wywiwyg.docbook">
<!ENTITY conf-LSattr_html_xmpp SYSTEM "LSattr_html_xmpp.docbook">
<!ENTITY LSattr_html_date "<link linkend='config-LSattr_html_jsonCompositeAttribute'>LSattr_html_date</link>">
<!ENTITY LSattr_html_jsonCompositeAttribute "<link linkend='config-LSattr_html_jsonCompositeAttribute'>LSattr_html_jsonCompositeAttribute</link>">
<!ENTITY LSattr_html_sambaAcctFlags "<link linkend='config-LSattr_html_sambaAcctFlags'>LSattr_html_sambaAcctFlags</link>">
<!ENTITY LSattr_html_select_list "<link linkend='config-LSattr_html_select_list'>LSattr_html_select_list</link>">
<!ENTITY LSattr_html_text "<link linkend='config-LSattr_html_text'>LSattr_html_text</link>">
<!ENTITY LSattr_html_textarea "<link linkend='config-LSattr_html_textarea'>LSattr_html_textarea</link>">

View file

@ -1,53 +0,0 @@
<sect4 id="config-LSattr_html_boolean">
<title>LSattr_html_boolean</title>
<para>Ce type est utilisé pour la gestion des attributs dont la valeur est
un booléen.</para>
<para>La valeur retournée est l'une des chaînes de caractères suivantes :
<itemizedlist>
<listitem><simpara><literal>yes</literal> pour <emphasis>Vrai</emphasis></simpara></listitem>
<listitem><simpara><literal>no</literal> pour <emphasis>Faux</emphasis></simpara></listitem>
</itemizedlist>
</para>
<programlisting linenumbering="unnumbered">
<citetitle>Structure</citetitle>...
<![CDATA['html_options' => array (
'true_label' => '[label]',
'false_label' => '[label]',
),]]>
...
</programlisting>
<variablelist>
<title>Paramètres de configuration</title>
<varlistentry>
<term>true_label</term>
<listitem>
<simpara>Label affiché pour désigner la valeur <literal>Vrai</literal>.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>false_label</term>
<listitem>
<simpara>Label affiché pour désigner la valeur <literal>Faux</literal>.</simpara>
</listitem>
</varlistentry>
</variablelist>
<note><simpara>Pour le moment, les attributs à valeurs multiples ne sont pas gérés.
</simpara></note>
<note><simpara>Pour maîtriser les valeurs stockées dans l'annuaire, il faut
coupler ce type d'attribut HTML avec le type d'attribut LDAP
<link linkend='config-LSattr_ldap_boolean'>boolean</link></simpara></note>
<important><simpara>La définition de la valeur par défaut d'un attribut utilisant
ce type HTML (paramètre <literal>default_value</literal>), doit se faire à l'aide
des valeurs <literal>yes</literal> ou <literal>no</literal>.</simpara></important>
</sect4>

View file

@ -1,235 +0,0 @@
<sect4 id="config-LSattr_html_date">
<title>LSattr_html_date</title>
<para>Ce type est utilisé pour la gestion des attributs dont la valeur est
une date. L'outil de sélection de date <application>
<ulink url='http://mootools.net/forge/p/mootools_datepicker'>
MooTools-DatePicker</ulink></application> est utilisé pour la sélection
graphique de la date et de l'heure.</para>
<programlisting linenumbering="unnumbered">
<citetitle>Structure</citetitle>...
<![CDATA['html_options' => array (
'format' => '[Format d'affichage de la date]',
'time' => '[Booleen pour le choix ou non de l heure]',
'manual' => '[Booleen pour l edition manuelle ou non]',
'showNowButton' => '[Booleen]',
'showTodayButton' => '[Booleen]',
'style' => '[Nom du style utilise]',
'special_values' => array (
'[value]' => '[label]',
[...]
),
),]]>
...
</programlisting>
<variablelist>
<title>Paramètres de configuration</title>
<varlistentry>
<term>format</term>
<listitem>
<para>Format d'affichage de la date dans le champ de saisie. Ce format
est composé à partir des motifs clés suivants :
<informaltable>
<tgroup cols="2">
<thead>
<row>
<entry>Mot clé</entry>
<entry>Valeur de substitution</entry>
<entry>Exemple de valeur</entry>
</row>
</thead>
<tbody>
<row>
<entry><literal>%a</literal></entry>
<entry><simpara>Nom abrégé du jour de la semaine</simpara></entry>
<entry><simpara>De Sun à Sat</simpara></entry>
</row>
<row>
<entry><literal>%A</literal></entry>
<entry><simpara>Nom complet du jour de la semaine</simpara></entry>
<entry><simpara>De Sunday à Saturday</simpara></entry>
</row>
<row>
<entry><literal>%b</literal></entry>
<entry><simpara>Nom du mois, abrégé, suivant la locale</simpara></entry>
<entry><simpara>De Jan à Dec</simpara></entry>
</row>
<row>
<entry><literal>%B</literal></entry>
<entry><simpara>Nom complet du mois, suivant la locale</simpara></entry>
<entry><simpara>De January à December</simpara></entry>
</row>
<row>
<entry><literal>%c</literal></entry>
<entry><simpara>Date et heure préférées, basées sur la locale</simpara></entry>
<entry><simpara>Exemple : Tue Feb 5 00:45:10 2009 pour le 5 Février 2009 à 12:45:10 AM</simpara></entry>
</row>
<row>
<entry><literal>%d</literal></entry>
<entry><simpara>Jour du mois en numérique, sur 2 chiffres (avec le zéro initial)</simpara></entry>
<entry><simpara>De 01 à 31</simpara></entry>
</row>
<row>
<entry><literal>%e</literal></entry>
<entry><simpara>Jour du mois, avec un espace précédant le premier chiffre. L'implémentation Windows est différente, voyez après pour plus d'informations.</simpara></entry>
<entry><simpara>De 1 à 31</simpara></entry>
</row>
<row>
<entry><literal>%H</literal></entry>
<entry><simpara>L'heure, sur 2 chiffres, au format 24 heures</simpara></entry>
<entry><simpara>De 00 à 23</simpara></entry>
</row>
<row>
<entry><literal>%I</literal></entry>
<entry><simpara>Heure, sur 2 chiffres, au format 12 heures</simpara></entry>
<entry><simpara>De 01 à 12</simpara></entry>
</row>
<row>
<entry><literal>%j</literal></entry>
<entry><simpara>Jour de l'année, sur 3 chiffres avec un zéro initial</simpara></entry>
<entry><simpara>001 à 366</simpara></entry>
</row>
<row>
<entry><literal>%m</literal></entry>
<entry><simpara>Mois, sur 2 chiffres</simpara></entry>
<entry><simpara>De 01 (pour Janvier) à 12 (pour Décembre)</simpara></entry>
</row>
<row>
<entry><literal>%M</literal></entry>
<entry><simpara>Minute, sur 2 chiffres</simpara></entry>
<entry><simpara>De 00 à 59</simpara></entry>
</row>
<row>
<entry><literal>%p</literal></entry>
<entry><simpara>'AM' ou 'PM', en majuscule, basé sur l'heure fournie</simpara></entry>
<entry><simpara>Exemple : AM pour 00:31, PM pour 22:23</simpara></entry>
</row>
<row>
<entry><literal>%s</literal></entry>
<entry><simpara>Timestamp de l'époque Unix (identique à la fonction time())</simpara></entry>
<entry><simpara>Exemple : 305815200 pour le 10 Septembre 1979 08:40:00 AM</simpara></entry>
</row>
<row>
<entry><literal>%S</literal></entry>
<entry><simpara>Seconde, sur 2 chiffres</simpara></entry>
<entry><simpara>De 00 à 59</simpara></entry>
</row>
<row>
<entry><literal>%T</literal></entry>
<entry><simpara>Identique à "%H:%M:%S" Exemple : 21:34:17 pour 09:34:17 PM</simpara></entry>
<entry><simpara></simpara></entry>
</row>
<row>
<entry><literal>%U</literal></entry>
<entry><simpara>Numéro de la semaine de l'année donnée, en commençant par le premier Lundi comme première semaine</simpara></entry>
<entry><simpara>13 (pour la 13ème semaine pleine de l'année)</simpara></entry>
</row>
<row>
<entry><literal>%w</literal></entry>
<entry><simpara>Représentation numérique du jour de la semaine</simpara></entry>
<entry><simpara>De 0 (pour Dimanche) à 6 (pour Samedi)</simpara></entry>
</row>
<row>
<entry><literal>%y</literal></entry>
<entry><simpara>L'année, sur 2 chiffres</simpara></entry>
<entry><simpara>Exemple : 09 pour 2009, 79 pour 1979</simpara></entry>
</row>
<row>
<entry><literal>%Y</literal></entry>
<entry><simpara>L'année, sur 4 chiffres</simpara></entry>
<entry><simpara>Exemple : 2038</simpara></entry>
</row>
<row>
<entry><literal>%z</literal></entry>
<entry><simpara> Soit le décalage horaire depuis UTC, ou son abréviation (suivant le système d'exploitation)</simpara></entry>
<entry><simpara> Exemple : -0500 ou EST pour l'heure de l'Est</simpara></entry>
</row>
<row>
<entry><literal>%Z</literal></entry>
<entry><simpara> Le décalage horaire ou son abréviation NON fournie par %z (suivant le système d'exploitation)</simpara></entry>
<entry><simpara> Exemple : -0500 ou EST pour l'heure de l'Est</simpara></entry>
</row>
<row>
<entry><literal>%%</literal></entry>
<entry><simpara>Le caractère de pourcentage ("%")</simpara></entry>
<entry><simpara>---</simpara></entry>
</row>
</tbody>
</tgroup>
</informaltable>
</para>
<note><simpara>La valeur par défaut est <emphasis>%d/%m/%Y, %T</emphasis>.
Exemple : <emphasis>23/04/2009, 23:03:04</emphasis></simpara></note>
</listitem>
</varlistentry>
<varlistentry>
<term>time</term>
<listitem>
<simpara>Booléen définissant si l'outil de sélection permetra ou non le choix
de l'heure en plus de la date</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>manual</term>
<listitem>
<simpara>Booléen autorisant ou non l'édition manuelle du champs. Si ce paramètre
vaut <literal>False</literal>, la sélection se fera uniquement à l'aide de l'outil
graphique</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>showNowButton</term>
<listitem>
<simpara>Booléen définissant si le bouton <emphasis>Maintenant</emphasis> est
affiché ou non. Par défaut, il est affiché.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>showTodayButton</term>
<listitem>
<simpara>Booléen définissant si le bouton <emphasis>Aujourd'hui</emphasis> est
affiché ou non. Par défaut, il est affiché.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>style</term>
<listitem>
<para>Nom du style d'affichage de l'outil de sélection. Les valeurs possibles
sont par défaut :
<itemizedlist>
<listitem><simpara>default</simpara></listitem>
<listitem><simpara>dashboard</simpara></listitem>
<listitem><simpara>vista</simpara></listitem>
<listitem><simpara>jqui</simpara></listitem>
</itemizedlist>
<note><simpara>La création de nouveau thème est possible. Pour plus d'information,
consulter <ulink url='http://mootools.net/forge/p/mootools_datepicker'>l'aide de
l'outil de sélection de date</ulink>.</simpara></note>
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>special_values</term>
<listitem>
<para>Tableau listant les valeurs spéciales que peut prendre l'attribut. Dans ce tableau
associatif, la clé doit correspondre à la valeur de l'attribut (telle que fournie par
<link linkend='config-LSattr_ldap_date'>l'attribut LDAP</link>) et la valeur associée au
label associé.</para>
<para>Ces valeurs spéciales seront proposées à l'utilisateur sous la forme de cases à cocher
dans le formulaire. Elles peuvent permettre par exemple de données une signification
particulière au zéro pour un attribut LDAP stockant un <emphasis>timestamp</emphasis>.</para>
</listitem>
</varlistentry>
</variablelist>
</sect4>

View file

@ -1,6 +0,0 @@
<sect4 id="config-LSattr_html_image">
<title>LSattr_html_image</title>
<para>Ce type est utilisé pour la gestion des attributs dont la valeur est
une image. Pour le moment, les attributs à valeurs multiples ne sont pas gérés.
</para>
</sect4>

View file

@ -1,131 +0,0 @@
<sect4 id="config-LSattr_html_jsonCompositeAttribute">
<title>LSattr_html_jsonCompositeAttribute</title>
<para>Ce type est utilisé pour la gestion des attributs dont les valeurs sont
des dictionnaires de valeurs encodées aux formats <emphasis>JSON</emphasis>.</para>
<programlisting linenumbering="unnumbered">
<citetitle>Exemple de valeur gérée</citetitle>
<![CDATA[{"component1": "value1", "component2": "value2", "component3": "value3"}]]>
</programlisting>
<para>Le principe est que ces dictionnaires contienent plusieurs composants référencés
par leur clé et stockant une valeur dont le type peut être un texte libre ou
bien être issue d'une liste déroulante configurable selon le même principe que
le type d'attribut &LSattr_html_select_list;.</para>
<programlisting linenumbering="unnumbered">
<citetitle>Structure</citetitle>...
<![CDATA['html_options' => array (
'components' => array (
'[clé composant 1]' => array (
'label' => '[Label du composant]',
'help_info' => '[Message d'aide sur le composant]',
'type' => '[Type de la valeur stocké]',
'required' => [Booléen],
'multiple' => [Booléen],
'check_data' => => array (
// Régle de vérification syntaxique des données saisies
),
),
'[clé composant 2]' => array (
'label' => '[Label du composant 2]',
'type' => 'select_list',
'required' => [Booléen],
'options' => array (
[Configuration équivalente à un attribut LSattr_html_select_list]
)
),
[...]
),
'fullWidth' => [booléen],
),]]>
...
</programlisting>
<variablelist>
<title>Paramètres de configuration</title>
<varlistentry>
<term>components</term>
<listitem>
<para>Tableau associatif obligatoire contenant en valeur clé, l'identifiant des
composants, correspondant à la clé dans le dictionnaire <emphasis>JSON</emphasis>,
et en valeurs associés, la configuration du composant.</para>
<variablelist>
<varlistentry>
<term>label</term>
<listitem>
<simpara>Le label du composant.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>help_info</term>
<listitem>
<simpara>Message d'aide sur le composant (affiché uniquement en mode édition).
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>type</term>
<listitem>
<simpara>Le type de valeur du composant. Les types possibles sont
<literal>text</literal> ou <literal>select_list</literal> pour respectivement
soit une valeur saisie librement, soit une valeur sélectionnée parmis une liste
déroulante.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>options</term>
<listitem>
<simpara>Dans le cadre d'un composant de type <literal>select_list</literal>, cela
correspond à la configuration de la liste déroulante. Cette configuration utilise la
même syntaxe de configuration que celle du type d'attribut &LSattr_html_select_list;
et son paramètre <literal>html_options</literal>.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>multiple</term>
<listitem>
<simpara>Booléen définissant si ce composant peut stocker plusieurs valeurs (Défaut :
<emphasis>Faux</emphasis>).</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>required</term>
<listitem>
<simpara>Booléen définissant si ce composant doit obligatoirement être défini (Défaut :
<emphasis>Faux</emphasis>).</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>check_data</term>
<listitem>
<simpara>Tableau associatif contenant les règles de vérification syntaxique
des données du composant. Ces règles sont configurables de la même manière
que les celles des valeurs attributs.
<link linkend='config-LSattribute-check-data'>Voir la section concernée.</link>
</simpara>
</listitem>
</varlistentry>
</variablelist>
</listitem>
</varlistentry>
<varlistentry>
<term>fullWidth</term>
<listitem>
<simpara>Booléen permettant de définir si l'affichage dans le formulaire doit se faire
sur toute la largeur disponible de la page (Défaut : <emphasis>Faux</emphasis>).</simpara>
</listitem>
</varlistentry>
</variablelist>
</sect4>

View file

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

View file

@ -1,34 +0,0 @@
<sect4 id="config-LSattr_html_mail">
<title>LSattr_html_mail</title>
<para>Ce type est utilisé pour la gestion des attributs dont la valeur est
une adresse e-mail. En plus d'un affichage adapté, il offre la possibilité
d'envoyer des mails directement depuis l'interface de l'application.</para>
<programlisting linenumbering="unnumbered">
<citetitle>Structure</citetitle>...
<![CDATA['html_options' => array(
'disableMailSending' => [booléen],
),]]>
...
</programlisting>
<variablelist>
<title>Paramètres de configuration</title>
<varlistentry>
<term>disableMailSending</term>
<listitem>
<simpara>Désactive l'envoi de mail depuis l'interface pour cet attribut.</simpara>
<note><simpara>Ceci ne désactive pas pour autant le lien HTML de type
<emphasis>mailto:</emphasis>. Pour cela, utilisez plutôt le type d'attribut HTML
<link linkend='config-LSattr_html_text'>text</link>.</simpara></note>
</listitem>
</varlistentry>
</variablelist>
<important><simpara>Ce type d'attribut HTML est dérivé du type
<link linkend='config-LSattr_html_text'>text</link>. Il profite donc de toutes
les fonctionnalités d'un champ de ce type (autogénération, ...).</simpara>
</important>
</sect4>

View file

@ -1,29 +0,0 @@
<sect4 id="config-LSattr_html_mailQuota">
<title>LSattr_html_mailQuota</title>
<para>Ce type est utilisé pour la gestion des attributs dont la valeur est
le quota d'une boite mail. Le format de la valeur générée correspondant au format
attendu par le serveur de mail &courier; par défaut. Exemple : <emphasis>50000000S</emphasis>
correspond à un quota de 50Mio.</para>
<programlisting linenumbering="unnumbered">
<citetitle>Structure</citetitle>...
<![CDATA['html_options' => array(
'suffix' => '[suffix]',
)
),]]>
...
</programlisting>
<variablelist>
<title>Paramètres de configuration</title>
<varlistentry>
<term>suffix</term>
<listitem>
<simpara>Chaine de caractères suffixant la valeur du quota (Par défaut : <literal>S</literal>).</simpara>
</listitem>
</varlistentry>
</variablelist>
</sect4>

View file

@ -1,82 +0,0 @@
<sect4 id="config-LSattr_html_maildir">
<title>LSattr_html_maildir</title>
<para>Ce type est utilisé pour la gestion des attributs dont la valeur est
le chemin d'une maildir. Typiquement, ce type attribut HTML est utile dans
le cas de l'attribut <emphasis>mailbox</emphasis> utilisé par maildrop pour
stocker le chemin des boites mails. Ce type d'attribut offre la possibilité de
gérér un niveau de l'attribut et à travers les déclencheurs gérés par &LdapSaisie;
la création, la modification et ou la suppression de la boite mails. Le &LSaddon;
<link linkend='config-LSaddon_maildir'>boolean</link> est utilisé pour manipuler
la boite mail à distance.
</para>
<note><simpara>Actuellement, cet &LSaddon; ne gérant que l'accès via FTP au
serveur distant, l'API d'accès via FTP est attaquée directement.</simpara></note>
<programlisting linenumbering="unnumbered">
<citetitle>Structure</citetitle>...
<![CDATA['html_options' => array (
'LSform' => array (
'[LSform1]' => [booléen],
'[LSform2]' => [booléen],
...
),
'remoteRootPathRegex' => "[Expression régulière pour matcher le dossier à créer]",
'archiveNameFormat' => "[LSformat du chemin/nom du fichier une fois archiver]"
),]]>
...
</programlisting>
<variablelist>
<title>Paramètres de configuration</title>
<varlistentry>
<term>LSform</term>
<listitem>
<simpara>Tableau associatif obligatoire contenant en valeur clé le nom des
&LSforms; dans lesquels la fonctionnalité de modification de la boite mail
sera présente. Les valeurs attachées sont des booléens définissant si la
modification est active par défaut.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>remoteRootPathRegex</term>
<listitem>
<simpara>Expression régulière (compatible Perl) facultative dont le but est de
<emphasis>matcher</emphasis> dans la valeur complète du chemin distant de la
<emphasis>maildir</emphasis>, le chemin de la <emphasis>maildir</emphasis>
à créer une fois connecté sur le serveur.</simpara>
<para>Exemple : Si le chemin complet de la <emphasis>maildir</emphasis> est
<emphasis>/home/vmail/user</emphasis>, mais que l'utilisateur FTP lorsqu'il
se connecte arrive directement dans <emphasis>/home/vmail</emphasis>, et faut
définir le paramètre <parameter>remoteRootPathRegex</parameter> de la manière
suivante :
<programlisting linenumbering="unnumbered">/^\/home\/vmail\/([^\/]*)\/+$/</programlisting>
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>archiveNameFormat</term>
<listitem>
<simpara>&LSformat; du nom du dossier de la <emphasis>maildir</emphasis> une
fois archivée. Si ce format est défini, le dossier ne sera pas supprimé mais
déplacé ou rénommé. Le format sera construit avec pour seul mot clé, le nom
de l'ancien dossier. Exemple : Si le dossier de la maildir est
<emphasis>/home/vmail/user</emphasis> et le paramètre
<parameter>archiveNameFormat</parameter> vaut <emphasis>%{old}.bckp</emphasis>,
le dossier sera renommé en <emphasis>/home/vmail/user.bckp</emphasis>.</simpara>
<important><simpara>Ce format est interprété après application de la routine
liée au paramètre <parameter>remoteRootPathRegex</parameter>. Ainsi, dans
l'exemple précédent, si le paramètre <parameter>remoteRootPathRegex</parameter>
tronquait uniquement le nom du dossier final, c'est à dire <emphasis>user</emphasis>,
le format une fois interprété donnerai <emphasis>user.bckp</emphasis>.
</simpara></important>
</listitem>
</varlistentry>
</variablelist>
</sect4>

View file

@ -1,315 +0,0 @@
<sect4 id="config-LSattr_html_password">
<title>LSattr_html_password</title>
<para>Ce type est utilisé pour la gestion des attributs dont la valeur est
un mot de passe.</para>
<programlisting linenumbering="unnumbered">
<citetitle>Structure</citetitle>...
<![CDATA['html_options' => array(
'isLoginPassword' => [booleen],
'generationTool' => [booleen],
'autoGenerate' => [booleen],
'lenght' => [nombre de caractères],
'chars' => array ( // Caractères que peut contenir le mot de passe
array( // Liste caractère avec un nombre mininum d'apparition supérieur à 1
'nb' => [nb caractères],
'chars' => '[liste de caractères possibles]'
),
'[autre liste de caractères possibles]', // Liste caractère avec un nombre
// d'apparitions égal à 1
...
),
'use_pwgen' => [booléen], // Utiliser pwgen pour la génération du mot de passe
'pwgen_path' => "/path/to/pwgen",
'pwgen_opts' => "[options à passer à pwgen]",
'verify' => [booléen], // Activation de l'outil de vérification du mot de passe
'viewHash' => [booléen], // Activation de l'outil de visualisation du mot de passe haché
'confirmChange' => [booléen], // Activation de la confirmation en cas de changement du mot de passe
'confirmChangeQuestion' => "[LSformat]", // LSformat de la question de confirmation du changement du mot de passe
'mail' => array( // Configuration de l'envoi du mot de passe par mail
'subject' => "[LSformat du sujet du mail]",
'msg' => "[LSformat du message du mail]",
'mail_attr' => 'mail', // Attribut mail de l'objet
'get_mail_attr_function' => '[function]', // Fonction retournant l'attribut mail de l'objet
'send' => 1, // Activation par défaut de l'envoi du mot de passe
'ask' => 1, // Laisser le choix à l'utilisateur
'canEdit' => 1, // Activation de l'édition du LSformat du message par l'utilisateur
'checkDomain' => false, // Désactivation de la vérification du domaine de l'adresse email
'domain' => '[nom de domaine]', // Nom de domaine obligatoire lors de la validation de l'adresse email
)
),]]>
...
</programlisting>
<variablelist>
<title>Paramètres de configuration</title>
<varlistentry>
<term>isLoginPassword</term>
<listitem>
<simpara>Booléen définissant si le mot de passe est celui utilisé par l'utilisateur
pour se logguer à l'annuaire LDAP. Si c'est le cas, pour vérifier si le mot de passe
correspond avec un autre, une tentative de connexion de l'utilisateur à l'annuaire
sera faite. (Par défaut : <literal>Faux</literal>)</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>generationTool</term>
<listitem>
<simpara>Booléen définissant si l'outil de génération de mot de passe est
activé.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>autoGenerate</term>
<listitem>
<simpara>Active la génération automatique du mot de passe lorsque l'attribut
n'a encore aucune valeur de définie. Il faut également que l'outil de
génération soit activé (<parameter>generationTool</parameter>).</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>lenght</term>
<listitem>
<simpara>Nombre de caractères que devront contenir les mots de passe générés.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>chars</term>
<listitem>
<para>Tableau contenant une liste de listes de caractères possibles pour
composer le mot de passe. Dans chacune de ces listes, au moins un caractère
sera utilisé dans le nouveau mot de passe. Il est possible de définir un
nombre supérieur de caractères d'une liste devant apparaître dans les mots de
passe générés en spécifiant un tableau associatif dont la clé <emphasis>nb
</emphasis> associra le nombre entier de caractères et la clé <emphasis>chars
</emphasis> la liste de caractères. Une liste de caractères est un chaîne.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>use_pwgen</term>
<listitem>
<para>Booléen définissant si la commande <literal>pwgen</literal> doit être
utilisé pour générer le mot de passe.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>pwgen_path</term>
<listitem>
<para>Chemin d'accès au binaire <literal>pwgen</literal>.
(Par défaut : <literal>pwgen</literal>).</para>
</listitem>
</varlistentry>
<varlistentry>
<term>pwgen_opts</term>
<listitem>
<para>Options à passer à la commande <literal>pwgen</literal>.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>verify</term>
<listitem>
<simpara>Booléen définissant si l'outil de vérification du mot de passe est
activé. Si celui-ci est activé, l'utilisateur pourra entrer un mot de passe
dans le champ et cliquer sur un bouton qui lancera une procédure de
vérification du mot de passe via un test de connexion à l'annuaire.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>viewHash</term>
<listitem>
<simpara>Booléen définissant si l'utilisateur aura accès à la fonctionnalité
de visualisation du mot de passe haché.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>confirmInput</term>
<listitem>
<simpara>Booléen définissant si un second champ mot de passe sera affiché dans
le formulaire pour que l'utilisateur confirme la saisie du nouveau mot de passe.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>confirmInputError</term>
<listitem>
<simpara>&LSformat; du message d'erreur affiché à l'utilisateur si le mot de
passe saisie dans le champs de confirmation ne correspond pas au nouveau mot
de passe. <emphasis>Paramètre facultatif.</emphasis></simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>confirmChange</term>
<listitem>
<simpara>Booléen définissant si l'utilisateur devra confirmer le changement de
ce mot de passe. Lorsque cette fonctionnalité est activée, l'utilisateur verra
apparaître une popup de confirmation à la validation du formulaire s'il a saisi
un nouveau mot de passe.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>confirmChangeQuestion</term>
<listitem>
<simpara>&LSformat; de la question posée à l'utilisateur en cas de changement
du mot de passe et si la fonctionnalité est activée. Il sera composé à l'aide
du <emphasis>label</emphasis> de l'attribut. <emphasis>Paramètre facultatif.
</emphasis></simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>clearView</term>
<listitem>
<simpara>Booléen définissant si l'utilisateur pourra voir le mot de passe en
clair par défaut (y comris en mode visualisation uniquement).</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>clearEdit</term>
<listitem>
<simpara>Booléen définissant si l'utilisateur éditera le mot de passe au travers
un champs HTML de type <emphasis>text</emphasis> et donc lisible ou au travers un
champs HTML de type <emphasis>password</emphasis>.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>mail</term>
<listitem>
<para>Paramètres de configuration de l'envoi par mail du mot de passe à
l'utilisateur. Lorsque cet outil est activé, lors de la modification/création
du mot de passe, l'utilisateur pourra recevoir un mail lui spécifiant son
nouveau mot de passe.
<variablelist>
<title>Paramêtres de configuration</title>
<varlistentry>
<term>send</term>
<listitem>
<simpara>Booléen définissant si l'envoi du mot de passe est activé par
défaut.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>ask</term>
<listitem>
<simpara>Booléen définissant si on laisse le choix à l'utilisateur
d'activer ou non l'envoi du mot de passe par mail.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>canEdit</term>
<listitem>
<simpara>Booléen définissant si on laisse la possibilité à l'utilisateur
d'éditer le &LSformat; du message et du sujet.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>subject</term>
<listitem>
<simpara>&LSformat; du sujet du mail. Ce format sera composé avec la
valeur du nouveau mot de passe de l'utilisateur.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>msg</term>
<listitem>
<simpara>&LSformat; du message du mail. Ce format sera composé avec les
informations de l'object LDAP, y compris le mot clé <emphasis>%{password}</emphasis>
correspondant à la valeur du nouveau mot de passe de l'utilisateur.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>mail_attr</term>
<listitem>
<simpara>Le nom de l'attribut listant les mails possibles de
l'utilisateur. Par défaut, la première valeur de l'attribut sera
utilisée comme adresse mail destinatrice. Cet attribut peut également
être un tableau de plusieurs noms d'attributs. Dans ce cas, la première
valeur correcte sera retenue.
Si <parameter>canEdit</parameter> est activé, l'utilisateur pourra
choisir l'adresse mail destinatrice parmi la liste des valeurs de
l'attribut.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>get_mail_attr_function</term>
<listitem>
<simpara>Nom de la fonction (ou <literal>callable</literal> au sens PHP)
qui sera utilisé pour récupérer le nom de l'attribut listant les mails
possibles de l'utilisateur. Cette fonction prendra en paramètre, l'objet
<literal>LSformElement</literal> courant et devra retourner une valeur
équivalente au paramètre de configuration <literal>mail_attr</literal>.
Si ce paramètre est défini, il prévalera toujours sur le paramètre
<literal>mail_attr</literal>.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>bcc</term>
<listitem>
<simpara>Mettre en <emphasis>BCC</emphasis> un mail systématiquement
(ou plusieurs en les séparant par des virgules).</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>headers</term>
<listitem>
<simpara>Un tableau de type clé/valeur ou la clé est le nom d'un header
à ajouter au mail et la valeur est la valeur de l'header en question.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>checkDomain</term>
<listitem>
<simpara>Booléen définissant si le domaine de l'adresse mail doit être
validée. <emphasis>Paramètre facultatif, par défaut: <literal>TRUE</literal>
</emphasis></simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>domain</term>
<listitem>
<simpara>Nom de domaine obligatoire lors de la validation de l'adresse mail.
Ce paramètre peut être une simple chaine correspondant au domaine ou un
tableau listant plusieurs domaines valides. <emphasis>Paramètre facultatif,
par défaut tous les domaines sont acceptés.</emphasis></simpara>
</listitem>
</varlistentry>
</variablelist>
</para>
</listitem>
</varlistentry>
</variablelist>
</sect4>

View file

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

View file

@ -1,8 +0,0 @@
<sect4 id="config-LSattr_html_pre">
<title>LSattr_html_pre</title>
<para>Ce type est dérivé du type &LSattr_html_textarea; et permet
simplement que lors de l'affichage de la valeur, celle-ci soit
affichée en respectant les retours à la ligne et en utilisant une
police de caractères <literal>monospace</literal>. Cela reproduit
l'affichage d'une balise HTML <literal>pre</literal>.</para>
</sect4>

View file

@ -1,10 +0,0 @@
<sect4 id="config-LSattr_html_rss">
<title>LSattr_html_rss</title>
<para>Ce type est utilisé pour la gestion des attributs dont la valeur est
l'URL d'un flux RSS. Il propose directement dans l'interface, la possibilité
d'accèder au flux RSS.</para>
<important><simpara>Ce type d'attribut HTML est dérivé du type
<link linkend='config-LSattr_html_text'>text</link>. Il profite donc de toutes
les fonctionnalités d'un champ de ce type (autogénération, ...).</simpara>
</important>
</sect4>

View file

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

View file

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

View file

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

View file

@ -1,120 +0,0 @@
<sect4 id="config-LSattr_html_select_object">
<title>LSattr_html_select_object</title>
<para>Ce type est utilisé pour la gestion des attributs dont les valeurs sont
des références à d'autres &LSobjects;. Chaque référence à un objet correspond
à une valeur prise par l'attribut. Les valeurs clés référant à un &LSobject;
sont soit la valeur d'un de leurs attributs, soit leur <emphasis>DN</emphasis>.</para>
<programlisting linenumbering="unnumbered">
<citetitle>Structure</citetitle>...
<![CDATA['html_options' => array (
selectable_object => array (
array (
'object_type' => '[Type d'LSobject selectionnable]',
'display_name_format' => '[LSformat du nom d'affichage des LSobjects]',
'value_attribute' => '[Nom de l'attribut clé des LSobjects]',
'filter' => '[Filtre de recherche]',
'onlyAccessible' => '[Booléen]'
),
[...]
),
'ordered' => [Booléen],
'sort' => [Booléen],
'sortDirection' => '[ASC|DESC]'
),]]>
...
</programlisting>
<variablelist>
<title>Paramètres de configuration</title>
<varlistentry>
<term>selectable_object</term>
<listitem>
<simpara>Tableau dont chaque valeur correspond à un tableau associatif spécifiant
un type d'&LSobject; sélectionnable. Pour chaque type d'objet sélectionnable, les
paramètres suivants doivent être renseignés :</simpara>
<variablelist>
<varlistentry>
<term>object_type</term>
<listitem>
<simpara>Nom du type d'&LSobject; en référence
<emphasis>(Paramètre obligatoire)</emphasis>.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>display_name_format</term>
<listitem>
<simpara>&LSformat; du nom d'affichage des objets lors de leur sélection
<emphasis>(Paramètre facultatif)</emphasis>.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>value_attribute</term>
<listitem>
<simpara>Nom de l'attribut des &LSobjects; en référence servant de valeur
clé et permettant de les identifier <emphasis>(Paramètre obligatoire,
exemples : <literal>dn</literal> ou <literal>uid</literal>)</emphasis>.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>filter</term>
<listitem>
<simpara>Filtre de recherche qui sera ajouter au filtre par défaut lors de la
sélection des objets <emphasis>(Paramètre facultatif)</emphasis>.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>onlyAccessible</term>
<listitem>
<simpara>Booléen définissant si seul les LSobjets auxquels l'utilisateur connecté
à accès doivent être considérés comme sélectionnables <emphasis>(Paramètre facultatif,
par défaut: <literal>False</literal>)</emphasis>.</simpara>
</listitem>
</varlistentry>
</variablelist>
</listitem>
</varlistentry>
<varlistentry>
<term>ordered</term>
<listitem>
<simpara>Booléen définissant si la liste des objets choisis doit être ordonnable ou
non <emphasis>(Paramètre facultatif, par défaut: <literal>False</literal>)</emphasis>.
Cela aura pour effet d'activer une fonctionnalité dynamique de l'interface permettant
de remonter ou descendre dans la liste les objets choisis.</simpara>
<note><simpara>Cette fonctionnalité désactive automatiquement le trie des
objets à l'affichage.</simpara></note>
</listitem>
</varlistentry>
<varlistentry>
<term>sort</term>
<listitem>
<simpara>Booléen définissant si la liste des objets choisis doit être
triée ou non <emphasis>(Paramètre facultatif, par défaut:
<literal>True</literal>)</emphasis>. Le trie est effectué sur les libellés
des objets choisis.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>sortDirection</term>
<listitem>
<simpara>Mot clé déterminant le sens du trie des objets choisis.</simpara>
<simpara>Valeurs possibles : <literal>ASC</literal> ou <literal>DESC</literal> (<literal>ASC</literal> par défaut).</simpara>
</listitem>
</varlistentry>
</variablelist>
</sect4>

View file

@ -1,6 +0,0 @@
<sect4 id="config-LSattr_html_ssh_key">
<title>LSattr_html_ssh_key</title>
<para>Ce type est utilisé pour la gestion des attributs dont la valeur est
une clef publique SSH. Il permet dans l'interface, d'avoir un affichage adapté
à ce type de donnée.</para>
</sect4>

View file

@ -1,10 +0,0 @@
<sect4 id="config-LSattr_html_tel">
<title>LSattr_html_tel</title>
<para>Ce type est utilisé pour la gestion des attributs dont la valeur est
un numéro de téléphone. Lors de l'affichage, un lien hypertexte avec une URI
de type <literal>tel:~~</literal> est affiché.</para>
<important><simpara>Ce type d'attribut HTML est dérivé du type
<link linkend='config-LSattr_html_text'>text</link>. Il profite donc de toutes
les fonctionnalités d'un champ de ce type (autogénération, ...).</simpara>
</important>
</sect4>

View file

@ -1,203 +0,0 @@
<sect4 id="config-LSattr_html_text">
<title>LSattr_html_text</title>
<para>Ce type est utilisé pour la gestion des attributs dont la valeur est
une chaîne de caractères devant être affichée dans un champ
<emphasis>input</emphasis> HTML de type <emphasis>text</emphasis>.
</para>
<programlisting linenumbering="unnumbered">
<citetitle>Structure</citetitle>...
<![CDATA['html_options' => array(
'generate_value_format' => '[LSformat pour la génération de la valeur]',
'autoGenerateOnCreate' => [booléen],
'autoGenerateOnModify' => [booléen],
'withoutAccent' => [booleen],
'replaceSpaces' => "[chaîne de remplacement]",
'upperCase' => [booleen],
'lowerCase' => [booleen],
// Autocomplétion
'autocomplete' => array (
'object_type' => '[Type d'LSobject]', // facultatif (voir ci-dessous)
'value_attributes' => array (
'[attr1]',
'[attr2]',
[...]
),
'filter' => '[filtre LDAP]',
'basedn' => '[base DN spécifique]',
'scope' => '[scope de recherche]',
'displayFormat' => '[LSformat]',
'onlyAccessible' => [booléen],
),
),]]>
...
</programlisting>
<variablelist>
<title>Paramètres de configuration</title>
<varlistentry>
<term>generate_value_format</term>
<listitem>
<simpara>&LSformat; de la valeur utilisée pour la génération automatique de
celle-ci à partir des informations saisies dans le formulaire. Les valeurs
clefs du format sont les noms des attributs de l'objet. Seuls les attributs
affichés au moins en lecture seule dans le formulaire peuvent être utilisés
dans le format. Une seule valeur par attribut sera utilisée pour la
génération : celle du premier champ (dans l'ordre d'apparition dans le
formulaire).</simpara>
<important><simpara>Seuls les éléments du formulaire de type HTML
<emphasis>input</emphasis>, <emphasis>select</emphasis> ou
<emphasis>textarea</emphasis> peuvent être utilisés.</simpara></important>
</listitem>
</varlistentry>
<varlistentry>
<term>autoGenerateOnCreate</term>
<listitem>
<simpara>Activation de la génération automatique lorsque celui-ci est
vide au moment du chargement du formulaire.</simpara>
<note><simpara>La valeur par défaut est <emphasis>False</emphasis>.</simpara></note>
</listitem>
</varlistentry>
<varlistentry>
<term>autoGenerateOnModify</term>
<listitem>
<simpara>Activation de la génération automatique lors de chaque
modification de la valeur des champs du formulaire lié.</simpara>
<note><simpara>La valeur par défaut est <emphasis>False</emphasis>.</simpara></note>
</listitem>
</varlistentry>
<varlistentry>
<term>withoutAccent</term>
<listitem>
<simpara>Activation de la suppression des accents dans la chaîne de
caractères générée automatiquement.</simpara>
<note><simpara>La valeur par défaut est <emphasis>False</emphasis>.</simpara></note>
</listitem>
</varlistentry>
<varlistentry>
<term>withoutAccent</term>
<listitem>
<simpara>Activation du remplacement des accents dans la chaîne de
caractères générée automatiquement. La valeur de remplacement est celle du
paramètre.</simpara>
<note><simpara>La valeur par défaut est <emphasis>False</emphasis>.</simpara></note>
</listitem>
</varlistentry>
<varlistentry>
<term>upperCase</term>
<listitem>
<simpara>Activation de la mise en majuscule de la valeur générée
automatiquement.</simpara>
<note><simpara>La valeur par défaut est <emphasis>False</emphasis>.</simpara></note>
</listitem>
</varlistentry>
<varlistentry>
<term>lowerCase</term>
<listitem>
<simpara>Activation de la mise en minuscule de la valeur générée
automatiquement.</simpara>
<note><simpara>La valeur par défaut est <emphasis>False</emphasis>.</simpara></note>
</listitem>
</varlistentry>
<varlistentry>
<term>autocomplete</term>
<listitem>
<para>Paramètrage de l'autocomplétion des valeurs saisies : on paramètre ici la
recherche des valeurs possibles de l'attribut dans l'annuaire qui peut se faire :
<itemizedlist>
<listitem><simpara>Sur la base d'un type d'&LSobject; donné : l'autocomplétion se fera
alors comme n'importe quelle recherche d'un type d'objet donné.</simpara></listitem>
<listitem><simpara>Sur la base d'une recherche brute dans l'annuaire : l'autocomplétion se
fera alors au travers une recherche brute dans l'annuaire sur n'importe quels objets ayant
un des attributs spécifiés dans le paramètre <literal>value_attributes</literal>
correspondant.</simpara></listitem>
</itemizedlist>
</para>
<para>Les paramètres associés à ces deux cas de figure sont décrits ci-dessous :
<variablelist>
<varlistentry>
<term>object_type</term>
<listitem>
<simpara>Le type d'&LSobject; recherché.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>value_attributes</term>
<listitem>
<simpara>Le(s) nom de l'attribut stockant les valeurs possibles recherchées. Il peut s'agir
d'une chaîne de caractères ou d'un tableau s'il y a plusieurs attributs.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>pattern_filter</term>
<listitem>
<simpara>Le &LSformat; du filtre de recherche à partir du mot clé recherché. Ce paramètre est
facultatif et utile que dans le cas d'une recherche sans type d'&LSobject; précis. S'il est
défini, ce &LSformat; sera composé à l'aide du mot clé recherché. À défaut, le filtre de
recherche sera composé à l'aide des différents <literal>value_attributes</literal> configurés.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>filter</term>
<listitem>
<simpara>Un filtre de recherche facultatif venant en plus de celui calculé automatiquement à partir
du mot clé de recherche.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>basedn</term>
<listitem>
<simpara>Le <emphasis>basedn</emphasis> de la recherche. <emphasis>Paramètre
facultatif.</emphasis></simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>scope</term>
<listitem>
<simpara>Le <emphasis>scope</emphasis> de la recherche. <emphasis>Paramètre
facultatif, par défaut : <literal>sub</literal>.</emphasis></simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>display_name_format</term>
<listitem>
<simpara>Le &LSformat; d'affichage des objets trouvés. Ce paramètre est facultatif et par défaut,
il s'agira du format d'affichage propre au type d'&LSobject; (si défini) et à défaut, la valeur
possible trouvée sera affichée. Si est configuré, ce &LSformat; sera composé à l'aide des valeurs
brutes des attributs des objets correspondants avec en plus la valeur possible trouvée dans le mot
clé <literal>value</literal>.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>only_accessible</term>
<listitem>
<simpara>Booléen falcultatif définissant si seul les &LSobjects; auxquels l'utilisateur connecté à accès
doivent être considérés comme sélectionnables (Faux par défaut). Ce paramètre n'est appliqué que dans
le cas d'une recherche pour un type d'&LSobject; donné.</simpara>
</listitem>
</varlistentry>
</variablelist>
</para>
</listitem>
</varlistentry>
</variablelist>
</sect4>

View file

@ -1,7 +0,0 @@
<sect4 id="config-LSattr_html_textarea">
<title>LSattr_html_textarea</title>
<para>Ce type est utilisé pour la gestion des attributs dont la valeur est une
chaine de caractères trop longue pour être saisie dans un champs HTML
<emphasis>imput</emphasis> de type <emphasis>text</emphasis> et est plus adapté
à un champ HTML <emphasis>textarea</emphasis>.</para>
</sect4>

View file

@ -1,11 +0,0 @@
<sect4 id="config-LSattr_html_url">
<title>LSattr_html_url</title>
<para>Ce type est utilisé pour la gestion des attributs dont la valeur est
une URL. Il propose directement dans l'interface, la possibilité d'accèder au
site ou encore de l'ajouter dans ses favoris (lorsque le navigateur le
supporte).</para>
<important><simpara>Ce type d'attribut HTML est dérivé du type
<link linkend='config-LSattr_html_text'>text</link>. Il profite donc de toutes
les fonctionnalités d'un champ de ce type (autogénération, ...).</simpara>
</important>
</sect4>

View file

@ -1,81 +0,0 @@
<sect4 id="config-LSattr_html_valueWithUnit">
<title>LSattr_html_valueWithUnit</title>
<para>Ce type est utilisé pour la gestion des attributs dont la valeur est un entier
auxquel un facteur peut s'appliquer (par exemple : <literal>Kilo, Méga, ...</literal>).</para>
<programlisting linenumbering="unnumbered">
<citetitle>Structure</citetitle>...
<![CDATA['html_options' => array(
'units' => array (
'[facteur1]' => '[label unit1]',
'[facteur2]' => '[label unit2]',
[...]
),
'translate_labels' => [booléen],
'nb_decimals' => [number of decimals],
'dec_point' => '[decimals point]',
'thousands_sep' => '[thousands separator]',
'store_integer' => [booléen],
'round_down' => [booléen],
)
),]]>
...
</programlisting>
<variablelist>
<title>Paramètres de configuration</title>
<varlistentry>
<term>units</term>
<listitem>
<simpara>Tableau associatif dont la clé est un entier correspondant au facteur et la valeur est le label de l'unité. (Par exemple : <literal>1 => Octet, 1024 => Kilo-octet, ...</literal>).</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>translate_labels</term>
<listitem>
<simpara>Booléen permettant d'activer/désactiver la traduction des labels (Par defaut : <literal>Vrai</literal>).</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>nb_decimals</term>
<listitem>
<simpara>Le nombre de décimals à afficher en cas de nombre non-entier (Par defaut : <literal>2</literal>).</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>dec_point</term>
<listitem>
<simpara>Le caractère à utiliser comme séparateur de décimal (Par defaut, une virgule).</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>thousands_sep</term>
<listitem>
<simpara>Le caractère à utiliser comme séparateur de milliers (Par defaut, un espace).</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>store_integer</term>
<listitem>
<simpara>Booléen permettant d'activer/désactiver le stockage de valeurs entières (Par defaut :
<literal>Vrai</literal>).</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>round_down</term>
<listitem>
<simpara>Booléen permettant d'arrondir à l'entier inférieur (et non à l'entier supérieur
par défaut) en cas de stockage de valeurs entières.</simpara>
</listitem>
</varlistentry>
</variablelist>
</sect4>

View file

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

View file

@ -1,14 +0,0 @@
<sect4 id="config-LSattr_html_xmpp">
<title>LSattr_html_xmpp</title>
<para>Ce type est utilisé pour la gestion des attributs dont la valeur est
une adresse XMPP. Il propose directement dans l'interface, la possibilité
de lancer une fenêtre de dialogue avec l'interlocuteur de son client XMPP
préféré .</para>
<note><simpara>Cette fonctionnalité n'est supporté uniquement par les
navigateurs web supportant les URI de type <emphasis>xmpp://~~</emphasis>.
</simpara></note>
<important><simpara>Ce type d'attribut HTML est dérivé du type
<link linkend='config-LSattr_html_text'>text</link>. Il profite donc de toutes
les fonctionnalités d'un champ de ce type (autogénération, ...).</simpara>
</important>
</sect4>

View file

@ -1,18 +0,0 @@
<sect3 id="config-LSattr_ldap">
<title>Configuration des attributs LDAP</title>
<para>Cette section décrit les options propres à chacun des types d'attributs LDAP
supportés par &LdapSaisie;.</para>
&conf-LSattr_ldap_ascii;
&conf-LSattr_ldap_boolean;
&conf-LSattr_ldap_compositeValueToJSON;
&conf-LSattr_ldap_date;
&conf-LSattr_ldap_image;
&conf-LSattr_ldap_naiveDate;
&conf-LSattr_ldap_numeric;
&conf-LSattr_ldap_password;
&conf-LSattr_ldap_postaladdress;
&conf-LSattr_ldap_pwdHistory;
&conf-LSattr_ldap_sambaAcctFlags;
&conf-LSattr_ldap_shadowExpire;
</sect3>

View file

@ -1,17 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!ENTITY conf-LSattr_ldap_ascii SYSTEM "LSattr_ldap_ascii.docbook">
<!ENTITY conf-LSattr_ldap_boolean SYSTEM "LSattr_ldap_boolean.docbook">
<!ENTITY conf-LSattr_ldap_compositeValueToJSON SYSTEM "LSattr_ldap_compositeValueToJSON.docbook">
<!ENTITY conf-LSattr_ldap_date SYSTEM "LSattr_ldap_date.docbook">
<!ENTITY conf-LSattr_ldap_image SYSTEM "LSattr_ldap_image.docbook">
<!ENTITY conf-LSattr_ldap_naiveDate SYSTEM "LSattr_ldap_naiveDate.docbook">
<!ENTITY conf-LSattr_ldap_numeric SYSTEM "LSattr_ldap_numeric.docbook">
<!ENTITY conf-LSattr_ldap_password SYSTEM "LSattr_ldap_password.docbook">
<!ENTITY conf-LSattr_ldap_postaladdress SYSTEM "LSattr_ldap_postaladdress.docbook">
<!ENTITY conf-LSattr_ldap_pwdHistory SYSTEM "LSattr_ldap_pwdHistory.docbook">
<!ENTITY conf-LSattr_ldap_sambaAcctFlags SYSTEM "LSattr_ldap_sambaAcctFlags.docbook">
<!ENTITY conf-LSattr_ldap_shadowExpire SYSTEM "LSattr_ldap_shadowExpire.docbook">
<!ENTITY LSattr_ldap_ascii "<link linkend='config-LSattr_ldap_ascii'>LSattr_ldap_ascii</link>">
<!ENTITY LSattr_ldap_date "<link linkend='config-LSattr_ldap_date'>LSattr_ldap_date</link>">
<!ENTITY LSattr_ldap_sambaAcctFlags "<link linkend='config-LSattr_ldap_sambaAcctFlags'>LSattr_ldap_sambaAcctFlags</link>">

View file

@ -1,6 +0,0 @@
<sect4 id="config-LSattr_ldap_ascii">
<title>LSattr_ldap_ascii</title>
<para>Ce type est utilisé pour la gestion des attributs dont la valeur est
une chaine de caractère. Ce type est le type par défaut.</para>
</sect4>

View file

@ -1,42 +0,0 @@
<sect4 id="config-LSattr_ldap_boolean">
<title>LSattr_ldap_boolean</title>
<para>Ce type est utilisé pour la gestion des attributs dont la valeur est
une booléen. On attend ici par booléen, tout attribut ne pouvant prendre que deux
valeurs pré-définies correspond pour l'un à <emphasis>Oui</emphasis> et l'autre
à <emphasis>Non</emphasis></para>
<programlisting linenumbering="unnumbered">
<citetitle>Structure</citetitle>...
<![CDATA['ldap_options' => array (
'true_value' => '[valeur correspondant à Vrai]',
'false_value' => '[valeur correspondant à Faux]'
),]]>
...
</programlisting>
<variablelist>
<title>Paramètres de configuration</title>
<varlistentry>
<term>true_value</term>
<listitem>
<simpara>La valeur de l'attribut correspondant à <emphasis>Vrai</emphasis>­.
(Par défaut : <literal>TRUE</literal>)</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>false_value</term>
<listitem>
<simpara>La valeur de l'attribut correspondant à <emphasis>Faux</emphasis>­.
(Par défaut : <literal>FALSE</literal>)</simpara>
</listitem>
</varlistentry>
</variablelist>
<important><simpara>Les valeurs possibles pour le paramètre <parameter>default_value</parameter>
sont <literal>yes</literal> et <literal>no</literal>.</simpara></important>
</sect4>

View file

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

View file

@ -1,81 +0,0 @@
<sect4 id="config-LSattr_ldap_date">
<title>LSattr_ldap_date</title>
<para>Ce type est utilisé pour la gestion des attributs dont la valeur est
une date.</para>
<note>
<para>Au sein d'LdapSaisie, les dates manipulées au travers ce type
d'attribut LDAP, sont au format <emphasis>timestamp</emphasis>. Il s'agit
donc de nombres entiers correpondants au nombre de secondes depuis le 1 janvier
1970.</para>
<para>Le type d'attribut HTML utilisé conjointement avec ce type d'attribut LDAP
devra être prévu pour recevoir et fournir des dates au format <emphasis>timestamp
</emphasis>, comme c'est le cas pour le <link linkend='config-LSattr_html_date'>
type d'attribut HTML <emphasis>date</emphasis></link>.</para>
</note>
<programlisting linenumbering="unnumbered">
<citetitle>Structure</citetitle>...
<![CDATA['ldap_options' => array (
'timestamp' => [Booléen], // Si la date est stockée au format timestamp
'format' => '[Format de stockage]', // Default : "YmdHisO"
'timezone' => '[Fuseau horaire]', // Default : "UTC"
),]]>
...
</programlisting>
<variablelist>
<title>Paramètres de configuration</title>
<varlistentry>
<term>timestamp</term>
<listitem>
<simpara>Booléen définissant si la date est stockée sous la forme d'un
timestamp Unix (nombre de secondes depuis le 1er janvier 1970 à 00:00:00
UTC)­.</simpara>
<remark>Si <parameter>timestamp</parameter> est vrai, &LdapSaisie; ne tient
pas compte du paramètre <parameter>format</parameter>.</remark>
</listitem>
</varlistentry>
<varlistentry>
<term>format</term>
<listitem>
<para>Format de stockage de la date dans l'annuaire. Ce format est composé à
partir des motifs clés gérés par la fonction <function>date()</function>
de &php;. Pour plus d'information, consulter
<ulink url='http://www.php.net/date'>la documentation officielle</ulink>.
<note><simpara>La valeur par défaut est <emphasis>YmdHisO</emphasis>,
correspondant à la syntaxe <literal>Generalized Time</literal> (sans les
micro-secondes) telle que définie dans la
<ulink url='https://tools.ietf.org/html/rfc4517'>RFC4517</ulink>. Exemples :
<literal>20091206230506Z</literal>
<emphasis>(=2009/12/06 23:05:66 UTC)</emphasis> ou
<literal>20190613143537+0200</literal>
<emphasis>(=2019/06/13 14:35:37 UTC+0200)</emphasis>.</simpara></note>
<warning><simpara>Si vous exploitez un attribut stockant une date incluant les
micro-secondes, ce type d'attribut LDAP sera capable de gérer l'interpratation des
valeurs stockées en configurant le format <literal>YmdHis.uO</literal>. En outre,
le type d'attribut &LSattr_html_date;, s'appuyant sur les méthodes standards
<literal>strftime()</literal> et <literal>strptime()</literal>, ne permettra pas
aujourd'hui la saisie et l'affichage des millisecondes.</simpara></warning>
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>timezone</term>
<listitem>
<para>Fuseau horaire de stockage des dates dans l'annuaire LDAP. Les valeurs
possibles sont documentées dans <ulink url='https://www.php.net/timezones'>la
documentation officielle de PHP</ulink>. (Par défaut : <literal>UTC</literal>)
</para>
</listitem>
</varlistentry>
</variablelist>
</sect4>

View file

@ -1,7 +0,0 @@
<sect4 id="config-LSattr_ldap_image">
<title>LSattr_ldap_image</title>
<para>Ce type est utilisé pour la gestion des attributs dont la valeur est
une image. Pour le moment, aucun traitement particulier n'est appliqué pour le
stockage.</para>
</sect4>

View file

@ -1,40 +0,0 @@
<sect4 id="config-LSattr_ldap_naiveDate">
<title>LSattr_ldap_naiveDate</title>
<para>Ce type est utilisé pour la gestion des attributs dont la valeur est
une date dont la <emphasis>timezone</emphasis> doit être ignorée. Côté LDAP,
les dates seront stockées au format UTC étant donnée que la syntaxe LDAP exige
une <emphasis>timezone</emphasis>, cependant celle-ci sera complètement ignorée.
Ce type peut-être utilisé à la place du type &LSattr_ldap_date;.</para>
<programlisting linenumbering="unnumbered">
<citetitle>Structure</citetitle><![CDATA[...
'ldap_options' => array (
'format' => '[Format de stockage]', // Default : "%Y%m%d%H%M%SZ"
),
...]]>
</programlisting>
<variablelist>
<title>Paramètres de configuration</title>
<varlistentry>
<term>format</term>
<listitem>
<para>Format de stockage de la date dans l'annuaire. Ce format est composé à
partir des motifs clés gérés par la fonction <function>strftime()</function>
de &php;. Pour plus d'information, consulter
<ulink url='http://www.php.net/strftime'>la documentation officielle</ulink>.
<note><simpara>La valeur par défaut est <emphasis>%Y%m%d%H%M%SZ</emphasis>,
correspondant à la syntaxe <literal>Generalized Time</literal> (sans les
micro-secondes) telle que définie dans la
<ulink url='https://tools.ietf.org/html/rfc4517'>RFC4517</ulink>. Exemples :
<literal>20091206230506Z</literal>
<emphasis>(=2009/12/06 23:05:66 UTC)</emphasis>.</simpara></note>
</para>
</listitem>
</varlistentry>
</variablelist>
</sect4>

View file

@ -1,7 +0,0 @@
<sect4 id="config-LSattr_ldap_numeric">
<title>LSattr_ldap_numeric</title>
<para>Ce type est utilisé pour la gestion des attributs dont la valeur est
un nombre. Pour le moment, aucun traitement particulier est n'appliqué pour le
stockage.</para>
</sect4>

View file

@ -1,106 +0,0 @@
<sect4 id="config-LSattr_ldap_password">
<title>LSattr_ldap_password</title>
<para>Ce type est utilisé pour la gestion des attributs dont la valeur est
un mot de passe.</para>
<programlisting linenumbering="unnumbered">
<citetitle>Structure</citetitle>...
<![CDATA['ldap_options' => array (
'encode' => '[Type d'encodage du mot de passe]',
'encode_function' => '[Nom de la fonction d'encodage]',
'verify_function' => '[Nom de la fonction de vérification]',
'no_random_crypt_salt' => '[Booléen]', // Désactivation de l'utilisation d'une salt aléatoire
'wildcardPassword' => '[mot de passe(s) en clair]',
'encodedWildcardPassword' => '[mot de passe(s) encodé(s)]'
),]]>
...
</programlisting>
<variablelist>
<title>Paramètres de configuration</title>
<varlistentry>
<term>encode</term>
<listitem>
<para>Nom du type d'encodage du mot de passe utilisé. Les types d'encodages
supportés sont les suivants :
<itemizedlist>
<listitem><simpara><literal>md5crypt</literal></simpara></listitem>
<listitem><simpara><literal>crypt</literal></simpara></listitem>
<listitem><simpara><literal>ext_des</literal></simpara></listitem>
<listitem><simpara><literal>blowfish</literal></simpara></listitem>
<listitem><simpara><literal>sha</literal></simpara></listitem>
<listitem><simpara><literal>sha256</literal></simpara></listitem>
<listitem><simpara><literal>sha512</literal></simpara></listitem>
<listitem><simpara><literal>ssha</literal></simpara></listitem>
<listitem><simpara><literal>ssha256</literal></simpara></listitem>
<listitem><simpara><literal>ssha512</literal></simpara></listitem>
<listitem><simpara><literal>smd5</literal></simpara></listitem>
<listitem><simpara><literal>md5</literal></simpara></listitem>
<listitem><simpara><literal>clear</literal></simpara></listitem>
</itemizedlist>
<note><simpara>Valeur par défaut : <literal>md5crypt</literal></simpara></note>
<important><simpara>Si le type d'encodage est inconnu, ou qu'il n'est pas
supporté par le serveur web, un message d'erreur alertera l'utilisateur et le
mot de passe sera stocké en clair.</simpara></important>
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>encode_function</term>
<listitem>
<para>Nom d'une function qui sera utilisée afin d'encoder le mot de passe.
Cette fonction recevra deux paramètres : le <literal>LSldapObject</literal>
et le mot de passe en clair.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>verify_function</term>
<listitem>
<para>Nom d'une function qui sera utilisée afin de valider un mot de passe
soumis par l'utilisateur par rapport à celui stocké dans l'annuaire. Cette
fonction recevra trois paramètres : le <literal>LSldapObject</literal>,le
mot de passe en clair et le mot de passe hashé. Si ce paramètre est omis
et que le paramètre <literal>encode_function</literal> est défini, le mot
de passe à tester sera encodé à nouveau à l'aide de la fonction
<literal>encode_function</literal> et le résultat sera comparé avec le mot
de passe stocké dans l'annuaire.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>no_random_crypt_salt</term>
<listitem>
<simpara>Désactivation de l'utilisation d'une salt générée aléatoirement au
profit de l'utilisation des deux premiers caractères du mot de passe.
Ce paramètre impacte uniquement le type de cryptage <literal>crypt</literal>.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>wildcardPassword</term>
<listitem>
<simpara>Mot de passe (ou tableau de mot de passe) qui sera ajouté systématiquement,
en plus du mot de passe choisi. Il sera encodé de la même manière que pour le mot de
passe choisi avant enregistrement.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>encodedWildcardPassword</term>
<listitem>
<simpara>Mot de passe (ou tableau de mot de passe) qui sera ajouté systématiquement,
en plus du mot de passe choisi. Contrairement à la directive
<parameter>wildcardPassword</parameter>, le mot de passe ne sera pas encodé avant
enregistrement.</simpara>
<note><simpara>Cette directive peut cohabiter avec sa cousine <parameter>wildcardPassword</parameter>. Les mot de passes contenus dans les deux directives seront alors ajoutés.</simpara></note>
</listitem>
</varlistentry>
</variablelist>
</sect4>

View file

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

View file

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

View file

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

View file

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

View file

@ -1,74 +0,0 @@
<sect3 id="config-LSattribute-check-data">
<title>Configuration des règles de vérification syntaxique</title>
<para>Cette section décrit la manière de configuer des règles de vérification
syntaxique sur les données des attributs. Ces règles seront utilisées pour vérifier
que les valeurs saisies par un utilisateur dans un formulaire sont correctes.</para>
<programlisting linenumbering="unnumbered">
<citetitle>Structure</citetitle>...
<![CDATA['check_data' => array (
'[regle1]' => array(
'msg' => "[Message d'erreur]",
'params' => array(
// Paramètres de la règle
)
),
...
),]]>
...
</programlisting>
<para>Le paramètre <parameter>check_data</parameter> est un tableau associatif
dont les clés sont les noms des règles de vérification syntaxique actives et les
valeurs associées sont des tableaux associatifs contenant les paramètres des
règles.</para>
<variablelist>
<title>Paramètres de configuration</title>
<varlistentry>
<term>msg</term>
<listitem>
<simpara>Le message d'erreur à afficher lors que la règle n'est pas respectée (optionnel).</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>params</term>
<listitem>
<simpara>Tableau associatif contenant les paramètres de la règle. Les
paramètres possibles sont propres à chaque type de règle. Les clès sont les
noms des paramètres et les valeurs associés, les valeurs des paramètres.</simpara>
</listitem>
</varlistentry>
</variablelist>
&conf-LSattribute-check-data-alphanumeric;
&conf-LSattribute-check-data-callable;
&conf-LSattribute-check-data-date;
&conf-LSattribute-check-data-differentPassword;
&conf-LSattribute-check-data-email;
&conf-LSattribute-check-data-filesize;
&conf-LSattribute-check-data-imagefile;
&conf-LSattribute-check-data-imagesize;
&conf-LSattribute-check-data-inarray;
&conf-LSattribute-check-data-integer;
&conf-LSattribute-check-data-ldapSearchURI;
&conf-LSattribute-check-data-lettersonly;
&conf-LSattribute-check-data-maxlength;
&conf-LSattribute-check-data-minlength;
&conf-LSattribute-check-data-mimetype;
&conf-LSattribute-check-data-nonzero;
&conf-LSattribute-check-data-nopunctuation;
&conf-LSattribute-check-data-numberOfValues;
&conf-LSattribute-check-data-numeric;
&conf-LSattribute-check-data-password;
&conf-LSattribute-check-data-rangelength;
&conf-LSattribute-check-data-regex;
&conf-LSattribute-check-data-required;
&conf-LSattribute-check-data-ssh_pub_key;
&conf-LSattribute-check-data-telephonenumber;
&conf-LSattribute-check-data-zxcvbn;
</sect3>

View file

@ -1,27 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!ENTITY conf-LSattribute-check-data-alphanumeric SYSTEM "alphanumeric.docbook">
<!ENTITY conf-LSattribute-check-data-callable SYSTEM "callable.docbook">
<!ENTITY conf-LSattribute-check-data-date SYSTEM "date.docbook">
<!ENTITY conf-LSattribute-check-data-differentPassword SYSTEM "differentPassword.docbook">
<!ENTITY conf-LSattribute-check-data-email SYSTEM "email.docbook">
<!ENTITY conf-LSattribute-check-data-filesize SYSTEM "filesize.docbook">
<!ENTITY conf-LSattribute-check-data-imagefile SYSTEM "imagefile.docbook">
<!ENTITY conf-LSattribute-check-data-imagesize SYSTEM "imagesize.docbook">
<!ENTITY conf-LSattribute-check-data-inarray SYSTEM "inarray.docbook">
<!ENTITY conf-LSattribute-check-data-integer SYSTEM "integer.docbook">
<!ENTITY conf-LSattribute-check-data-ldapSearchURI SYSTEM "ldapSearchURI.docbook">
<!ENTITY conf-LSattribute-check-data-lettersonly SYSTEM "lettersonly.docbook">
<!ENTITY conf-LSattribute-check-data-maxlength SYSTEM "maxlength.docbook">
<!ENTITY conf-LSattribute-check-data-mimetype SYSTEM "mimetype.docbook">
<!ENTITY conf-LSattribute-check-data-minlength SYSTEM "minlength.docbook">
<!ENTITY conf-LSattribute-check-data-nonzero SYSTEM "nonzero.docbook">
<!ENTITY conf-LSattribute-check-data-nopunctuation SYSTEM "nopunctuation.docbook">
<!ENTITY conf-LSattribute-check-data-numberOfValues SYSTEM "numberOfValues.docbook">
<!ENTITY conf-LSattribute-check-data-numeric SYSTEM "numeric.docbook">
<!ENTITY conf-LSattribute-check-data-password SYSTEM "password.docbook">
<!ENTITY conf-LSattribute-check-data-rangelength SYSTEM "rangelength.docbook">
<!ENTITY conf-LSattribute-check-data-regex SYSTEM "regex.docbook">
<!ENTITY conf-LSattribute-check-data-required SYSTEM "required.docbook">
<!ENTITY conf-LSattribute-check-data-ssh_pub_key SYSTEM "ssh_pub_key.docbook">
<!ENTITY conf-LSattribute-check-data-telephonenumber SYSTEM "telephonenumber.docbook">
<!ENTITY conf-LSattribute-check-data-zxcvbn SYSTEM "zxcvbn.docbook">

View file

@ -1,20 +0,0 @@
<sect4 id="config-LSattribute-check-data-alphanumeric">
<title>alphanumeric</title>
<para>Cette règle vérifie que la valeur est une chaîne de caractères composée
uniquement de lettres non-accuentées, en minuscule ou en majuscule et/ou de
chiffres.</para>
<variablelist>
<title>Paramètres de configuration</title>
<varlistentry>
<term>withAccents</term>
<listitem>
<simpara>Si le paramètre est à <emphasis>true</emphasis>, les lettres accentuées seront acceptées.</simpara>
</listitem>
</varlistentry>
</variablelist>
</sect4>

View file

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

View file

@ -1,30 +0,0 @@
<sect4 id="config-LSattribute-check-data-date">
<title>date</title>
<para>Cette règle vérifie que la valeur saisie est bien une date et qu'elle
respecte un format précis.</para>
<variablelist>
<title>Paramètres de configuration</title>
<varlistentry>
<term>format</term>
<listitem>
<simpara>Format de la date à respecter. Ce format doit être compatible avec la
fonction <function>strftime()</function> de &php;.
<ulink url='http://www.php.net/strftime'>Voir la documentation de la
fonction</ulink></simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>special_values</term>
<listitem>
<para>Tableau listant les valeurs spéciales que peut prendre l'attribut. Dans ce tableau,
seules les valeurs sont utilisées et les clés n'ont pas d'importance. Ces valeurs spéciales
n'auront pas forcément besoin de respecter le format attendu.</para>
</listitem>
</varlistentry>
</variablelist>
</sect4>

View file

@ -1,24 +0,0 @@
<sect4 id="config-LSattribute-check-data-differentPassword">
<title>differentPassword</title>
<para>Cette règle vérifie que la valeur saisie ne correspond pas à
un des mots de passe stockés dans d'autres attributs du même objet.
</para>
<important><simpara>Les autres attributs doivent utiliser le type
d'attribut <emphasis>LDAP</emphasis>
<link linkend='config-LSattr_ldap_password'>LSattr_ldap_password
</link>.</simpara></important>
<variablelist>
<title>Paramètres de configuration</title>
<varlistentry>
<term>otherPasswordAttributes</term>
<listitem>
<simpara>La liste des autres attributs dont les mots de passe doivent être différent.</simpara>
</listitem>
</varlistentry>
</variablelist>
</sect4>

View file

@ -1,29 +0,0 @@
<sect4 id="config-LSattribute-check-data-email">
<title>email</title>
<para>Cette règle vérifie que la valeur saisie est bien une adresse e-mail. Il
est possible de vérifier si elle appartient bien à un domaine en particulier ou
encore de vérifier si le domaine existe et qu'il possède un serveur de mail(MX).</para>
<variablelist>
<title>Paramètres de configuration</title>
<varlistentry>
<term>domain</term>
<listitem>
<simpara>Nom de domaine obligatoire. Ce paramètre peut être une simple chaine
correspondant au domaine ou un tableau listant plusieurs domaines
possibles.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>checkDomain</term>
<listitem>
<simpara>Booléen définissant si le domaine de l'adresse mail doit être
validée.</simpara>
</listitem>
</varlistentry>
</variablelist>
</sect4>

View file

@ -1,25 +0,0 @@
<sect4 id="config-LSattribute-check-data-filesize">
<title>filesize</title>
<para>Cette règle vérifie que la valeur est un fichier dont la taille en octets
respecte les limites passées en paramètre.</para>
<variablelist>
<title>Paramètres de configuration</title>
<varlistentry>
<term>minSize</term>
<listitem>
<simpara>Taille minimum.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>maxSize</term>
<listitem>
<simpara>Taille maximum.</simpara>
</listitem>
</varlistentry>
</variablelist>
</sect4>

View file

@ -1,12 +0,0 @@
<sect4 id="config-LSattribute-check-data-imagefile">
<title>imagefile</title>
<para>Cette règle vérifie que la valeur est bien un fichier et que le type mime
de celui-ci est bien une image. Cette règle utilise la règle mimetype en spécifiant
si l'utilisateur ne le fait pas que le type mime doit respecter la regex suivante :
<literal>/image\/.*/</literal></para>
<important><simpara>Cette règle est une simple interface à la règle mimetype,
il est donc possible de passer d'autres paramètres propres à ce type.</simpara>
</important>
</sect4>

View file

@ -1,39 +0,0 @@
<sect4 id="config-LSattribute-check-data-imagesize">
<title>imagesize</title>
<para>Cette règle vérifie que la valeur est une image dont la taille en pixels
respecte les limites passées en paramètre.</para>
<variablelist>
<title>Paramètres de configuration</title>
<varlistentry>
<term>minWidth</term>
<listitem>
<simpara>Largeur minimum.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>maxWitdh</term>
<listitem>
<simpara>Largeur maximum.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>minHeight</term>
<listitem>
<simpara>Hauteur minimum.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>maxHeight</term>
<listitem>
<simpara>Hauteur maximum.</simpara>
</listitem>
</varlistentry>
</variablelist>
</sect4>

View file

@ -1,18 +0,0 @@
<sect4 id="config-LSattribute-check-data-inarray">
<title>inarray</title>
<para>Cette règle vérifie que la valeur saisie fait partie d'une liste de valeurs
autorisées.</para>
<variablelist>
<title>Paramêtres de configuration</title>
<varlistentry>
<term>possible_values</term>
<listitem>
<simpara>Tableau listant les valeurs autorisées.</simpara>
</listitem>
</varlistentry>
</variablelist>
</sect4>

View file

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

View file

@ -1,92 +0,0 @@
<sect4 id="config-LSattribute-check-data-ldapSearchURI">
<title>ldapSearchURI</title>
<para>Cette règle vérifie que la valeur est une URI de recherche LDAP valide, c'est
à dire, par exemple,
<literal>ldaps://ldap.example.com:636/o=example?attr1,attr2?one?(gidNumber=100)</literal>
</para>
<para>Cette vérification commence par découper la valeur à l'aide du sépérateur
<literal>?</literal> et elle s'assure ensuite :
<itemizedlist>
<listitem><simpara>Que la première partie est bien une URI LDAP valide. Si l'hôte
LDAP est spécifié, elle s'assure qu'il soit une adresse IP ou un nom de domaine valide.
Si le port LDAP est spécifié, elle s'assure également qu'il soit correct et que l'hôte
est également bien spécifié.</simpara></listitem>
<listitem><simpara>Si la base de recherche est spécifiée, elle s'assure qu'elle soit
compatible avec la racine de l'annuaire connecté.</simpara></listitem>
<listitem><simpara>Si un ou plusieurs attributs sont spécifiés, elle les vérifie un à un
afin de vérifier qu'il s'agit de nom d'attribut valide.</simpara></listitem>
<listitem><simpara>Que le scope de recherche soit bien spécifié et valide.</simpara>
</listitem>
<listitem><simpara>Si le filtre de recherche est spécifié, elle vérifie qu'il soit valide.
</simpara></listitem>
</itemizedlist>
</para>
<variablelist>
<title>Paramêtres de configuration</title>
<varlistentry>
<term>check_resolving_ldap_host</term>
<listitem>
<simpara>Si l'hôte du serveur LDAP est spécifié et qu'il s'agit d'un nom de domaine valide,
un tentative de résolution DNS sera également faite (optionnel, par défaut :
<literal>Vrai</literal>).</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>host_required</term>
<listitem>
<simpara>Booléen détermintant si une erreur est relevée en cas d'absence de l'hôte
LDAP. (optionnel, par défaut : <literal>Faux</literal>)</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>basedn_required</term>
<listitem>
<simpara>Booléen détermintant si une erreur est relevée en cas d'absence de base de
recherche. (optionnel, par défaut : <literal>Faux</literal>)</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>scope_required</term>
<listitem>
<simpara>Booléen détermintant si une erreur est relevée en cas d'absence de portée de
recherche. (optionnel, par défaut : <literal>Vrai</literal>)</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>attr_required</term>
<listitem>
<simpara>Booléen détermintant si une erreur est relevée en cas d'absence d'attribut
recherché. (optionnel, par défaut : <literal>Faux</literal>)</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>max_attrs_count</term>
<listitem>
<simpara>Nombre maximum d'attribut recherchés. (optionnel, par défaut : pas de limite)
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>filter_required</term>
<listitem>
<simpara>Booléen détermintant si une erreur est relevée en cas d'absence de filtre de
recherche. (optionnel, par défaut : <literal>Faux</literal>)</simpara>
</listitem>
</varlistentry>
</variablelist>
</sect4>

View file

@ -1,5 +0,0 @@
<sect4 id="config-LSattribute-check-data-lettersonly">
<title>lettersonly</title>
<para>Cette règle vérifie que la valeur est une chaîne de caractères composée
uniquement de lettres non-accuentées, en minuscule ou en majuscule.</para>
</sect4>

View file

@ -1,18 +0,0 @@
<sect4 id="config-LSattribute-check-data-maxlength">
<title>maxlength</title>
<para>Cette règle vérifie que la valeur saisie est une chaine de caractères
dont la longueur est inférieur ou égale à la valeur passées en paramètre.</para>
<variablelist>
<title>Paramêtres de configuration</title>
<varlistentry>
<term>limit</term>
<listitem>
<simpara>Limite supérieur (ou égale) de la longueur de la chaîne de caratères.</simpara>
</listitem>
</varlistentry>
</variablelist>
</sect4>

View file

@ -1,27 +0,0 @@
<sect4 id="config-LSattribute-check-data-mimetype">
<title>mimetype</title>
<para>Cette règle vérifie que la valeur est bien un fichier et que le type mime
de celui-ci est correct. Il est possible de vérifier si le type mime fait partie
d'une liste ou encore s'il valide une expression régulière.</para>
<variablelist>
<title>Paramètres de configuration</title>
<varlistentry>
<term>mimeType</term>
<listitem>
<simpara>Type mime obligatoire. Ce paramètre peut être une simple chaine
correspondant au type mime ou un tableau listant plusieurs possibilités.</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>mimeTypeRegEx</term>
<listitem>
<simpara>Expression régulière que doit respecter le type mime.</simpara>
</listitem>
</varlistentry>
</variablelist>
</sect4>

View file

@ -1,18 +0,0 @@
<sect4 id="config-LSattribute-check-data-minlength">
<title>minlength</title>
<para>Cette règle vérifie que la valeur saisie est une chaine de caractères
dont la longueur est supérieur ou égale à la valeur passée en paramètre.</para>
<variablelist>
<title>Paramètres de configuration</title>
<varlistentry>
<term>limit</term>
<listitem>
<simpara>Limite inférieure (ou égale) de la longueur de la chaîne de caratères.</simpara>
</listitem>
</varlistentry>
</variablelist>
</sect4>

View file

@ -1,4 +0,0 @@
<sect4 id="config-LSattribute-check-data-nonzero">
<title>nonzero</title>
<para>Cette régle vérifie que la valeur est une valeur numérique non nulle.</para>
</sect4>

View file

@ -1,6 +0,0 @@
<sect4 id="config-LSattribute-check-data-nopunctuation">
<title>nopunctuation</title>
<para>Cette régle vérifie que la valeur est une chaîne de caractères ne contenant
pas de signe de ponctuation. Les caractères suivants sont actuellement exclus :
<literal><![CDATA[( ) . \ / \ * \ ^ \ ? # ! @ $ % + = , " ' > < ~ [ ] { }]]></literal></para>
</sect4>

View file

@ -1,25 +0,0 @@
<sect4 id="config-LSattribute-check-data-numberOfValues">
<title>numberOfValues</title>
<para>Cette règle vérifie que le nombre de valeurs de l'attribut est comprise entre les limites
passées en paramètre.</para>
<variablelist>
<title>Paramètres de configuration</title>
<varlistentry>
<term>min</term>
<listitem>
<simpara>Nombre minimum de valeurs (paramètre optionnel).</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>max</term>
<listitem>
<simpara>Nombre maximum de valeurs (paramètre optionnel).</simpara>
</listitem>
</varlistentry>
</variablelist>
</sect4>

View file

@ -1,4 +0,0 @@
<sect4 id="config-LSattribute-check-data-numeric">
<title>numeric</title>
<para>Cette régle vérifie que la valeur est une valeur numérique.</para>
</sect4>

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