ldapsaisie/doc/dist/4.2.0-1-1-gd775b4f/contrib/addons/index.html

3568 lines
No EOL
82 KiB
HTML

<!doctype html>
<html lang="fr" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="description" content="Documentation">
<meta name="author" content="Benjamin Renard <brenard@easter-eggs.com / brenard@zionetrix.net>">
<link rel="canonical" href="https://ldapsaisie.org/doc/dev/contrib/addons/">
<link rel="prev" href="../">
<link rel="next" href="custom-views/">
<link rel="icon" href="../../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.5.3, mkdocs-material-9.4.6">
<title>Introduction - LdapSaisie</title>
<link rel="stylesheet" href="../../assets/stylesheets/main.35e1ed30.min.css">
<link rel="stylesheet" href="../../assets/stylesheets/palette.356b1318.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
<link rel="stylesheet" href="../../css/print-site.css">
<link rel="stylesheet" href="../../css/print-site-material.css">
<script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="light-blue" data-md-color-accent="blue">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#les-addons-lsaddon" class="md-skip">
Aller au contenu
</a>
</div>
<div data-md-component="announce">
</div>
<div data-md-color-scheme="default" data-md-component="outdated" hidden>
</div>
<header class="md-header md-header--shadow" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="En-tête">
<a href="https://ldapsaisie.org" title="LdapSaisie" class="md-header__button md-logo" aria-label="LdapSaisie" data-md-component="logo">
<img src="../../assets/images/logo.png" alt="logo">
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
LdapSaisie
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Introduction
</span>
</div>
</div>
</div>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Rechercher" placeholder="Rechercher" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
</label>
<nav class="md-search__options" aria-label="Recherche">
<button type="reset" class="md-search__icon md-icon" title="Effacer" aria-label="Effacer" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg>
</button>
</nav>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initialisation de la recherche
</div>
<ol class="md-search-result__list" role="presentation"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://gitlab.easter-eggs.com/ee/ldapsaisie" title="Aller au dépôt" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
ee/ldapsaisie
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="https://ldapsaisie.org" title="LdapSaisie" class="md-nav__button md-logo" aria-label="LdapSaisie" data-md-component="logo">
<img src="../../assets/images/logo.png" alt="logo">
</a>
LdapSaisie
</label>
<div class="md-nav__source">
<a href="https://gitlab.easter-eggs.com/ee/ldapsaisie" title="Aller au dépôt" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
ee/ldapsaisie
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../.." class="md-nav__link">
<span class="md-ellipsis">
Introduction
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2" >
<label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0">
<span class="md-ellipsis">
Installation
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_2">
<span class="md-nav__icon md-icon"></span>
Installation
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../install/requirements/" class="md-nav__link">
<span class="md-ellipsis">
Pré-requis
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../install/download/" class="md-nav__link">
<span class="md-ellipsis">
Téléchargement
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../install/arbo/" class="md-nav__link">
<span class="md-ellipsis">
Arborescence du projet
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../install/howto/" class="md-nav__link">
<span class="md-ellipsis">
Tutoriel d'installation
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" >
<label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
<span class="md-ellipsis">
Mise à jour
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3">
<span class="md-nav__icon md-icon"></span>
Mise à jour
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../upgrade/" class="md-nav__link">
<span class="md-ellipsis">
Instroduction
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../upgrade/method/" class="md-nav__link">
<span class="md-ellipsis">
Procédure de mise à jour
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../upgrade/2_4_1-to-3_0_0/" class="md-nav__link">
<span class="md-ellipsis">
2.4.1 -> 3.0.0
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" >
<label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
<span class="md-ellipsis">
Configuration
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4">
<span class="md-nav__icon md-icon"></span>
Configuration
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../conf/" class="md-nav__link">
<span class="md-ellipsis">
Introduction
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_2" >
<label class="md-nav__link" for="__nav_4_2" id="__nav_4_2_label" tabindex="0">
<span class="md-ellipsis">
Configuration globale
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_2">
<span class="md-nav__icon md-icon"></span>
Configuration globale
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../conf/global/" class="md-nav__link">
<span class="md-ellipsis">
Introduction
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_2_2" >
<label class="md-nav__link" for="__nav_4_2_2" id="__nav_4_2_2_label" tabindex="0">
<span class="md-ellipsis">
Connexion LDAP
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_4_2_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_2_2">
<span class="md-nav__icon md-icon"></span>
Connexion LDAP
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../conf/global/ldap/" class="md-nav__link">
<span class="md-ellipsis">
Configuration des serveurs LDAP
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/global/ldap/LSprofile/" class="md-nav__link">
<span class="md-ellipsis">
Profils d'utilisateurs (LSprofile)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/global/ldap/subDn/" class="md-nav__link">
<span class="md-ellipsis">
Sous-niveaux de connexion (subDn)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/global/ldap/recoverPassword/" class="md-nav__link">
<span class="md-ellipsis">
Récupération de mot de passe
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../conf/global/LSlog/" class="md-nav__link">
<span class="md-ellipsis">
Configuration de la journalisation (LSlog)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/global/LSformat/" class="md-nav__link">
<span class="md-ellipsis">
Format paramétrable (LSformat)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/global/LDAP_search_params/" class="md-nav__link">
<span class="md-ellipsis">
Paramètres étendus des recherches dans l'annuaire
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_3" >
<label class="md-nav__link" for="__nav_4_3" id="__nav_4_3_label" tabindex="0">
<span class="md-ellipsis">
Objets de l'annuaire
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_3">
<span class="md-nav__icon md-icon"></span>
Objets de l'annuaire
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../conf/LSobject/" class="md-nav__link">
<span class="md-ellipsis">
Configuration LSobject
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_3_2" >
<label class="md-nav__link" for="__nav_4_3_2" id="__nav_4_3_2_label" tabindex="0">
<span class="md-ellipsis">
Attributs
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_4_3_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_3_2">
<span class="md-nav__icon md-icon"></span>
Attributs
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/" class="md-nav__link">
<span class="md-ellipsis">
Configuration des attributs
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_3_2_2" >
<label class="md-nav__link" for="__nav_4_3_2_2" id="__nav_4_3_2_2_label" tabindex="0">
<span class="md-ellipsis">
Types d'attribut LDAP (LSattr_ldap)
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="4" aria-labelledby="__nav_4_3_2_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_3_2_2">
<span class="md-nav__icon md-icon"></span>
Types d'attribut LDAP (LSattr_ldap)
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/LSattr_ldap/" class="md-nav__link">
<span class="md-ellipsis">
Introduction
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/LSattr_ldap/LSattr_ldap_ascii/" class="md-nav__link">
<span class="md-ellipsis">
ascii
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/LSattr_ldap/LSattr_ldap_boolean/" class="md-nav__link">
<span class="md-ellipsis">
boolean
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/LSattr_ldap/LSattr_ldap_compositeValueToJSON/" class="md-nav__link">
<span class="md-ellipsis">
compositeValueToJson
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/LSattr_ldap/LSattr_ldap_date/" class="md-nav__link">
<span class="md-ellipsis">
date
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/LSattr_ldap/LSattr_ldap_image/" class="md-nav__link">
<span class="md-ellipsis">
image
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/LSattr_ldap/LSattr_ldap_naiveDate/" class="md-nav__link">
<span class="md-ellipsis">
naiveDate
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/LSattr_ldap/LSattr_ldap_numeric/" class="md-nav__link">
<span class="md-ellipsis">
numeric
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/LSattr_ldap/LSattr_ldap_password/" class="md-nav__link">
<span class="md-ellipsis">
password
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/LSattr_ldap/LSattr_ldap_postaladdress/" class="md-nav__link">
<span class="md-ellipsis">
postaladdress
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/LSattr_ldap/LSattr_ldap_pwdHistory/" class="md-nav__link">
<span class="md-ellipsis">
pwdHistory
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/LSattr_ldap/LSattr_ldap_sambaAcctFlags/" class="md-nav__link">
<span class="md-ellipsis">
sambaAcctFlags
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/LSattr_ldap/LSattr_ldap_shadowExpire/" class="md-nav__link">
<span class="md-ellipsis">
shadowExpire
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_3_2_3" >
<label class="md-nav__link" for="__nav_4_3_2_3" id="__nav_4_3_2_3_label" tabindex="0">
<span class="md-ellipsis">
Types d'attribut HTML (LSattr_html)
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="4" aria-labelledby="__nav_4_3_2_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_3_2_3">
<span class="md-nav__icon md-icon"></span>
Types d'attribut HTML (LSattr_html)
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/LSattr_html/" class="md-nav__link">
<span class="md-ellipsis">
Introduction
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/LSattr_html/LSattr_html_boolean/" class="md-nav__link">
<span class="md-ellipsis">
boolean
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/LSattr_html/LSattr_html_date/" class="md-nav__link">
<span class="md-ellipsis">
date
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/LSattr_html/LSattr_html_image/" class="md-nav__link">
<span class="md-ellipsis">
image
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/LSattr_html/LSattr_html_jsonCompositeAttribute/" class="md-nav__link">
<span class="md-ellipsis">
jsonCompositeAttribute
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/LSattr_html/LSattr_html_labeledValue/" class="md-nav__link">
<span class="md-ellipsis">
labeledValue
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/LSattr_html/LSattr_html_mail/" class="md-nav__link">
<span class="md-ellipsis">
mail
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/LSattr_html/LSattr_html_maildir/" class="md-nav__link">
<span class="md-ellipsis">
maildir
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/LSattr_html/LSattr_html_mailQuota/" class="md-nav__link">
<span class="md-ellipsis">
mailQuota
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/LSattr_html/LSattr_html_password/" class="md-nav__link">
<span class="md-ellipsis">
password
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/LSattr_html/LSattr_html_postaladdress/" class="md-nav__link">
<span class="md-ellipsis">
postaladdress
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/LSattr_html/LSattr_html_pre/" class="md-nav__link">
<span class="md-ellipsis">
pre
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/LSattr_html/LSattr_html_rss/" class="md-nav__link">
<span class="md-ellipsis">
rss
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/LSattr_html/LSattr_html_sambaAcctFlags/" class="md-nav__link">
<span class="md-ellipsis">
sambaAcctFlags
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/LSattr_html/LSattr_html_select_box/" class="md-nav__link">
<span class="md-ellipsis">
select_box
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/LSattr_html/LSattr_html_select_list/" class="md-nav__link">
<span class="md-ellipsis">
select_list
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/LSattr_html/LSattr_html_select_object/" class="md-nav__link">
<span class="md-ellipsis">
select_object
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/LSattr_html/LSattr_html_ssh_key/" class="md-nav__link">
<span class="md-ellipsis">
ssh_key
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/LSattr_html/LSattr_html_tel/" class="md-nav__link">
<span class="md-ellipsis">
tel
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/LSattr_html/LSattr_html_text/" class="md-nav__link">
<span class="md-ellipsis">
text
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/LSattr_html/LSattr_html_textarea/" class="md-nav__link">
<span class="md-ellipsis">
textarea
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/LSattr_html/LSattr_html_url/" class="md-nav__link">
<span class="md-ellipsis">
url
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/LSattr_html/LSattr_html_valueWithUnit/" class="md-nav__link">
<span class="md-ellipsis">
valueWithUnit
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/LSattr_html/LSattr_html_wysiwyg/" class="md-nav__link">
<span class="md-ellipsis">
wysiwyg
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/LSattr_html/LSattr_html_xmpp/" class="md-nav__link">
<span class="md-ellipsis">
xmpp
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_3_2_4" >
<label class="md-nav__link" for="__nav_4_3_2_4" id="__nav_4_3_2_4_label" tabindex="0">
<span class="md-ellipsis">
Règles de vérification syntaxique (LSformRule)
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="4" aria-labelledby="__nav_4_3_2_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_3_2_4">
<span class="md-nav__icon md-icon"></span>
Règles de vérification syntaxique (LSformRule)
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/check_data/" class="md-nav__link">
<span class="md-ellipsis">
Introduction
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/check_data/alphanumeric/" class="md-nav__link">
<span class="md-ellipsis">
alphanumeric
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/check_data/callable/" class="md-nav__link">
<span class="md-ellipsis">
callable
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/check_data/date/" class="md-nav__link">
<span class="md-ellipsis">
date
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/check_data/differentPassword/" class="md-nav__link">
<span class="md-ellipsis">
differentPassword
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/check_data/email/" class="md-nav__link">
<span class="md-ellipsis">
email
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/check_data/filesize/" class="md-nav__link">
<span class="md-ellipsis">
filesize
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/check_data/imagefile/" class="md-nav__link">
<span class="md-ellipsis">
imagefile
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/check_data/imagesize/" class="md-nav__link">
<span class="md-ellipsis">
imagesize
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/check_data/inarray/" class="md-nav__link">
<span class="md-ellipsis">
inarray
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/check_data/integer/" class="md-nav__link">
<span class="md-ellipsis">
integer
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/check_data/ldapSearchURI/" class="md-nav__link">
<span class="md-ellipsis">
ldapSearchURI
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/check_data/lettersonly/" class="md-nav__link">
<span class="md-ellipsis">
lettersonly
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/check_data/maxlength/" class="md-nav__link">
<span class="md-ellipsis">
maxlength
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/check_data/mimetype/" class="md-nav__link">
<span class="md-ellipsis">
mimetype
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/check_data/minlength/" class="md-nav__link">
<span class="md-ellipsis">
minlength
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/check_data/nonzero/" class="md-nav__link">
<span class="md-ellipsis">
nonzero
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/check_data/nopunctuation/" class="md-nav__link">
<span class="md-ellipsis">
nopunctuation
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/check_data/numberOfValues/" class="md-nav__link">
<span class="md-ellipsis">
numberOfValues
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/check_data/numeric/" class="md-nav__link">
<span class="md-ellipsis">
numeric
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/check_data/password/" class="md-nav__link">
<span class="md-ellipsis">
password
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/check_data/rangelength/" class="md-nav__link">
<span class="md-ellipsis">
rangelength
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/check_data/regex/" class="md-nav__link">
<span class="md-ellipsis">
regex
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/check_data/required/" class="md-nav__link">
<span class="md-ellipsis">
required
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/check_data/ssh_pub_key/" class="md-nav__link">
<span class="md-ellipsis">
ssh_pub_key
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/check_data/telephonenumber/" class="md-nav__link">
<span class="md-ellipsis">
telephonenumber
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/check_data/zxcvbn/" class="md-nav__link">
<span class="md-ellipsis">
zxcvbn
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/validation/" class="md-nav__link">
<span class="md-ellipsis">
Règles de vérification d'intégrité
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSattribute/triggers/" class="md-nav__link">
<span class="md-ellipsis">
Déclencheurs
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/container_auto_create/" class="md-nav__link">
<span class="md-ellipsis">
Création automatique du conteneur des LSobjets dans un subDn
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/triggers/" class="md-nav__link">
<span class="md-ellipsis">
Déclencheurs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/customActions/" class="md-nav__link">
<span class="md-ellipsis">
Actions personnalisées (customActions)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSrelation/" class="md-nav__link">
<span class="md-ellipsis">
Les relations entre les objets de l'annuire (LSrelation)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSform/" class="md-nav__link">
<span class="md-ellipsis">
Les formulaires (LSform)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/LSsearch/" class="md-nav__link">
<span class="md-ellipsis">
Recherche des objets dans l'annuaire (LSsearch)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSobject/ioFormat/" class="md-nav__link">
<span class="md-ellipsis">
Les formats d'import/export (ioFormat)
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_4" >
<label class="md-nav__link" for="__nav_4_4" id="__nav_4_4_label" tabindex="0">
<span class="md-ellipsis">
Configuration des addons (LSaddons)
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_4">
<span class="md-nav__icon md-icon"></span>
Configuration des addons (LSaddons)
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../conf/LSaddon/" class="md-nav__link">
<span class="md-ellipsis">
Introduction
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSaddon/LSaddon_accesslog/" class="md-nav__link">
<span class="md-ellipsis">
accesslog
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSaddon/LSaddon_asterisk/" class="md-nav__link">
<span class="md-ellipsis">
asterisk
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSaddon/LSaddon_exportSearchResultAsCSV/" class="md-nav__link">
<span class="md-ellipsis">
exportSearchResultAsCSV
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSaddon/LSaddon_impersonate/" class="md-nav__link">
<span class="md-ellipsis">
impersonate
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSaddon/LSaddon_LSaccessRightsMatrixView/" class="md-nav__link">
<span class="md-ellipsis">
LSaccessRightsMatrixView
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSaddon/LSaddon_mail/" class="md-nav__link">
<span class="md-ellipsis">
mail
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSaddon/LSaddon_maildir/" class="md-nav__link">
<span class="md-ellipsis">
maildir
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSaddon/LSaddon_mailquota/" class="md-nav__link">
<span class="md-ellipsis">
mailquota
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSaddon/LSaddon_phpldapadmin/" class="md-nav__link">
<span class="md-ellipsis">
phpldapadmin
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSaddon/LSaddon_ppolicy/" class="md-nav__link">
<span class="md-ellipsis">
ppolicy
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSaddon/LSaddon_showSupportInfo/" class="md-nav__link">
<span class="md-ellipsis">
showSupportInfo
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSaddon/LSaddon_showTechInfo/" class="md-nav__link">
<span class="md-ellipsis">
showTechInfo
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_5" >
<label class="md-nav__link" for="__nav_4_5" id="__nav_4_5_label" tabindex="0">
<span class="md-ellipsis">
Configuration des méthodes d'authentification (LSauthMethod)
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_5">
<span class="md-nav__icon md-icon"></span>
Configuration des méthodes d'authentification (LSauthMethod)
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../conf/LSauthMethod/" class="md-nav__link">
<span class="md-ellipsis">
Introduction
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSauthMethod/LSauthMethod_anonymous/" class="md-nav__link">
<span class="md-ellipsis">
anonymous
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSauthMethod/LSauthMethod_CAS/" class="md-nav__link">
<span class="md-ellipsis">
CAS
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../conf/LSauthMethod/LSauthMethod_HTTP/" class="md-nav__link">
<span class="md-ellipsis">
HTTP
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../api/" class="md-nav__link">
<span class="md-ellipsis">
API
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6" checked>
<label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="0">
<span class="md-ellipsis">
Contribution
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_6">
<span class="md-nav__icon md-icon"></span>
Contribution
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../" class="md-nav__link">
<span class="md-ellipsis">
Introduction
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6_2" checked>
<label class="md-nav__link" for="__nav_6_2" id="__nav_6_2_label" tabindex="0">
<span class="md-ellipsis">
Les addons (LSaddon)
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_6_2_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_6_2">
<span class="md-nav__icon md-icon"></span>
Les addons (LSaddon)
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
<span class="md-ellipsis">
Introduction
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
Introduction
</span>
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table des matières">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table des matières
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#structure-decriture" class="md-nav__link">
Structure d'écriture
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="custom-views/" class="md-nav__link">
<span class="md-ellipsis">
Les vues personnalisées
</span>
</a>
</li>
<li class="md-nav__item">
<a href="cli-commands/" class="md-nav__link">
<span class="md-ellipsis">
Les commandes CLI personnalisées
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../form-elements/" class="md-nav__link">
<span class="md-ellipsis">
Les éléments des formulaires (LSformElement)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../form-rules/" class="md-nav__link">
<span class="md-ellipsis">
Les règles de validation syntaxiques (LSformRule)
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../print_page/" class="md-nav__link">
<span class="md-ellipsis">
Documentation
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table des matières">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table des matières
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#structure-decriture" class="md-nav__link">
Structure d'écriture
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<a href="../../print_page/" title="Print Site" class="md-content__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18 3H6v4h12m1 5a1 1 0 0 1-1-1 1 1 0 0 1 1-1 1 1 0 0 1 1 1 1 1 0 0 1-1 1m-3 7H8v-5h8m3-6H5a3 3 0 0 0-3 3v6h4v4h12v-4h4v-6a3 3 0 0 0-3-3Z"/></svg>
</a>
<h1 id="les-addons-lsaddon">Les addons (LSaddon)</h1>
<p>Les <a href="../../conf/#configuration-des-lsaddons">LSaddons</a> sont utilisés pour implémenter dans LdapSaisie
des fonctionnalités spécifiques tel que :</p>
<ul>
<li>le support d'une famille d'attributs spécifiques (POSIX, Samba, SUPANN…) par le biais de méthodes
de génération de la valeur de ces attributs par exemple (paramètre <code>generate_function</code>) ;</li>
</ul>
<ul>
<li>des tâches communes et génériques (envoi de mails, connexion FTP/SSH…) ;</li>
</ul>
<ul>
<li>l'implémentation de <a href="../../conf/#declencheurs_1">déclencheurs</a> spécifiques à votre environnement :
création automatique du dossier client sur le serveur de fichiers de l'entreprise, création de la
boite mail de l'utilisateur… ;</li>
</ul>
<ul>
<li>l'implémentation de <a href="#les-vues-personnalisees">vues personnalisées</a> proposées dans l'interface</li>
</ul>
<ul>
<li>l'implémentation d'action personnalisée sur les <a href="../../conf/#customactions">objets</a> (synchronisation,
archivage…) ou sur les <a href="../../conf/LSobject/LSsearch/#customactions">résultats de recherches</a>
(export, rapport personnalisé…) ;</li>
</ul>
<h2 id="structure-decriture">Structure d'écriture</h2>
<p>L'écriture d'un <a href="../../conf/#configuration-des-lsaddons">LSaddon</a> doit respecter une structure
suffisamment souple afin de ne pas être un frein à vos contributions, tout en permettant d'assurer
la bonne intégration de votre contribution au projet. Le code que vous écrirez sera réparti dans
deux fichiers :</p>
<ul>
<li>
<p><code>conf/LSaddons/config.LSaddons.[addon name].php</code></p>
<p>Ce fichier contiendra la configuration de votre <a href="../../conf/#configuration-des-lsaddons">LSaddon</a>.
On y retrouvera la déclaration de constances et/ou variables de configuration permettant d'adapter
votre <a href="../../conf/#configuration-des-lsaddons">LSaddon</a> à une installation et à un environnement.</p>
</li>
</ul>
<ul>
<li>
<p><code>includes/addons/LSaddons.[addon name].php</code></p>
<p>Ce fichier contiendra le code à proprement dit de votre <a href="../../conf/#configuration-des-lsaddons">LSaddon</a>.</p>
<p><strong>Structure du fichier includes/addons/LSaddons.[addon name].php :</strong></p>
<div class="highlight"><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="cp">&lt;?php</span>
<a id="__codelineno-0-2" name="__codelineno-0-2" href="#__codelineno-0-2"></a>
<a id="__codelineno-0-3" name="__codelineno-0-3" href="#__codelineno-0-3"></a><span class="cm">/*</span>
<a id="__codelineno-0-4" name="__codelineno-0-4" href="#__codelineno-0-4"></a><span class="cm"> * Error messages</span>
<a id="__codelineno-0-5" name="__codelineno-0-5" href="#__codelineno-0-5"></a><span class="cm"> */</span>
<a id="__codelineno-0-6" name="__codelineno-0-6" href="#__codelineno-0-6"></a>
<a id="__codelineno-0-7" name="__codelineno-0-7" href="#__codelineno-0-7"></a><span class="c1">// Support error messages</span>
<a id="__codelineno-0-8" name="__codelineno-0-8" href="#__codelineno-0-8"></a><span class="nx">LSerror</span> <span class="o">::</span> <span class="na">defineError</span><span class="p">(</span><span class="s1">&#39;MYADDON_SUPPORT_01&#39;</span><span class="p">,</span>
<a id="__codelineno-0-9" name="__codelineno-0-9" href="#__codelineno-0-9"></a> <span class="nx">___</span><span class="p">(</span><span class="s2">&quot;MYADDON Support : Unable to load %{dep}.&quot;</span><span class="p">)</span>
<a id="__codelineno-0-10" name="__codelineno-0-10" href="#__codelineno-0-10"></a><span class="p">);</span>
<a id="__codelineno-0-11" name="__codelineno-0-11" href="#__codelineno-0-11"></a>
<a id="__codelineno-0-12" name="__codelineno-0-12" href="#__codelineno-0-12"></a><span class="nx">LSerror</span> <span class="o">::</span> <span class="na">defineError</span><span class="p">(</span><span class="s1">&#39;MYADDON_SUPPORT_02&#39;</span><span class="p">,</span>
<a id="__codelineno-0-13" name="__codelineno-0-13" href="#__codelineno-0-13"></a> <span class="nx">___</span><span class="p">(</span><span class="s2">&quot;MYADDON Support : The constant %{const} is not defined.&quot;</span><span class="p">)</span>
<a id="__codelineno-0-14" name="__codelineno-0-14" href="#__codelineno-0-14"></a><span class="p">);</span>
<a id="__codelineno-0-15" name="__codelineno-0-15" href="#__codelineno-0-15"></a>
<a id="__codelineno-0-16" name="__codelineno-0-16" href="#__codelineno-0-16"></a><span class="c1">// Other orror messages</span>
<a id="__codelineno-0-17" name="__codelineno-0-17" href="#__codelineno-0-17"></a><span class="nx">LSerror</span> <span class="o">::</span> <span class="na">defineError</span><span class="p">(</span><span class="s1">&#39;MYADDON_01&#39;</span><span class="p">,</span>
<a id="__codelineno-0-18" name="__codelineno-0-18" href="#__codelineno-0-18"></a> <span class="nx">___</span><span class="p">(</span><span class="s2">&quot;An error : %{msg}.&quot;</span><span class="p">)</span>
<a id="__codelineno-0-19" name="__codelineno-0-19" href="#__codelineno-0-19"></a><span class="p">);</span>
<a id="__codelineno-0-20" name="__codelineno-0-20" href="#__codelineno-0-20"></a>
<a id="__codelineno-0-21" name="__codelineno-0-21" href="#__codelineno-0-21"></a><span class="nx">LSerror</span> <span class="o">::</span> <span class="na">defineError</span><span class="p">(</span><span class="s1">&#39;MYADDON_02&#39;</span><span class="p">,</span>
<a id="__codelineno-0-22" name="__codelineno-0-22" href="#__codelineno-0-22"></a> <span class="nx">___</span><span class="p">(</span><span class="s2">&quot;An other error about %{about} : %{msg}&quot;</span><span class="p">)</span>
<a id="__codelineno-0-23" name="__codelineno-0-23" href="#__codelineno-0-23"></a><span class="p">);</span>
<a id="__codelineno-0-24" name="__codelineno-0-24" href="#__codelineno-0-24"></a>
<a id="__codelineno-0-25" name="__codelineno-0-25" href="#__codelineno-0-25"></a><span class="nx">LSerror</span> <span class="o">::</span> <span class="na">defineError</span><span class="p">(</span><span class="s1">&#39;MYADDON_03&#39;</span><span class="p">,</span>
<a id="__codelineno-0-26" name="__codelineno-0-26" href="#__codelineno-0-26"></a> <span class="nx">___</span><span class="p">(</span><span class="s2">&quot;Unknown error.&quot;</span><span class="p">)</span>
<a id="__codelineno-0-27" name="__codelineno-0-27" href="#__codelineno-0-27"></a><span class="p">);</span>
<a id="__codelineno-0-28" name="__codelineno-0-28" href="#__codelineno-0-28"></a>
<a id="__codelineno-0-29" name="__codelineno-0-29" href="#__codelineno-0-29"></a><span class="sd">/**</span>
<a id="__codelineno-0-30" name="__codelineno-0-30" href="#__codelineno-0-30"></a><span class="sd"> * Verify support of my addon by LdapSaisie</span>
<a id="__codelineno-0-31" name="__codelineno-0-31" href="#__codelineno-0-31"></a><span class="sd"> *</span>
<a id="__codelineno-0-32" name="__codelineno-0-32" href="#__codelineno-0-32"></a><span class="sd"> * @author My Name &lt;my.email@example.com&gt;</span>
<a id="__codelineno-0-33" name="__codelineno-0-33" href="#__codelineno-0-33"></a><span class="sd"> *</span>
<a id="__codelineno-0-34" name="__codelineno-0-34" href="#__codelineno-0-34"></a><span class="sd"> * @return boolean true if my addon is totaly supported, false in other cases</span>
<a id="__codelineno-0-35" name="__codelineno-0-35" href="#__codelineno-0-35"></a><span class="sd"> **/</span>
<a id="__codelineno-0-36" name="__codelineno-0-36" href="#__codelineno-0-36"></a><span class="k">function</span> <span class="nf">LSaddon_myaddon_support</span><span class="p">()</span> <span class="p">{</span>
<a id="__codelineno-0-37" name="__codelineno-0-37" href="#__codelineno-0-37"></a>
<a id="__codelineno-0-38" name="__codelineno-0-38" href="#__codelineno-0-38"></a> <span class="nv">$retval</span><span class="o">=</span><span class="k">true</span><span class="p">;</span>
<a id="__codelineno-0-39" name="__codelineno-0-39" href="#__codelineno-0-39"></a>
<a id="__codelineno-0-40" name="__codelineno-0-40" href="#__codelineno-0-40"></a> <span class="c1">// Check/load dependencies</span>
<a id="__codelineno-0-41" name="__codelineno-0-41" href="#__codelineno-0-41"></a> <span class="k">if</span> <span class="p">(</span> <span class="o">!</span><span class="nb">class_exists</span><span class="p">(</span><span class="s1">&#39;mylib&#39;</span><span class="p">)</span> <span class="p">)</span> <span class="p">{</span>
<a id="__codelineno-0-42" name="__codelineno-0-42" href="#__codelineno-0-42"></a> <span class="k">if</span> <span class="p">(</span> <span class="o">!</span><span class="nx">LSsession</span><span class="o">::</span><span class="na">includeFile</span><span class="p">(</span><span class="nx">LS_LIB_DIR</span> <span class="o">.</span> <span class="s1">&#39;class.mylib.php&#39;</span><span class="p">)</span> <span class="p">)</span> <span class="p">{</span>
<a id="__codelineno-0-43" name="__codelineno-0-43" href="#__codelineno-0-43"></a> <span class="nx">LSerror</span> <span class="o">::</span> <span class="na">addErrorCode</span><span class="p">(</span><span class="s1">&#39;MYADDON_SUPPORT_01&#39;</span><span class="p">,</span> <span class="s1">&#39;mylib&#39;</span><span class="p">);</span>
<a id="__codelineno-0-44" name="__codelineno-0-44" href="#__codelineno-0-44"></a> <span class="nv">$retval</span><span class="o">=</span><span class="k">false</span><span class="p">;</span>
<a id="__codelineno-0-45" name="__codelineno-0-45" href="#__codelineno-0-45"></a> <span class="p">}</span>
<a id="__codelineno-0-46" name="__codelineno-0-46" href="#__codelineno-0-46"></a> <span class="p">}</span>
<a id="__codelineno-0-47" name="__codelineno-0-47" href="#__codelineno-0-47"></a>
<a id="__codelineno-0-48" name="__codelineno-0-48" href="#__codelineno-0-48"></a>
<a id="__codelineno-0-49" name="__codelineno-0-49" href="#__codelineno-0-49"></a> <span class="nv">$MUST_DEFINE_CONST</span><span class="o">=</span> <span class="k">array</span><span class="p">(</span>
<a id="__codelineno-0-50" name="__codelineno-0-50" href="#__codelineno-0-50"></a> <span class="s1">&#39;LS_MYADDON_CONF_O1&#39;</span><span class="p">,</span>
<a id="__codelineno-0-51" name="__codelineno-0-51" href="#__codelineno-0-51"></a> <span class="s1">&#39;LS_MYADDON_CONF_O2&#39;</span><span class="p">,</span>
<a id="__codelineno-0-52" name="__codelineno-0-52" href="#__codelineno-0-52"></a> <span class="o">...</span>
<a id="__codelineno-0-53" name="__codelineno-0-53" href="#__codelineno-0-53"></a> <span class="p">);</span>
<a id="__codelineno-0-54" name="__codelineno-0-54" href="#__codelineno-0-54"></a>
<a id="__codelineno-0-55" name="__codelineno-0-55" href="#__codelineno-0-55"></a> <span class="k">foreach</span><span class="p">(</span><span class="nv">$MUST_DEFINE_CONST</span> <span class="k">as</span> <span class="nv">$const</span><span class="p">)</span> <span class="p">{</span>
<a id="__codelineno-0-56" name="__codelineno-0-56" href="#__codelineno-0-56"></a> <span class="k">if</span> <span class="p">(</span> <span class="p">(</span><span class="o">!</span><span class="nb">defined</span><span class="p">(</span><span class="nv">$const</span><span class="p">))</span> <span class="o">||</span> <span class="p">(</span><span class="nb">constant</span><span class="p">(</span><span class="nv">$const</span><span class="p">)</span> <span class="o">==</span> <span class="s2">&quot;&quot;</span><span class="p">))</span> <span class="p">{</span>
<a id="__codelineno-0-57" name="__codelineno-0-57" href="#__codelineno-0-57"></a> <span class="nx">LSerror</span> <span class="o">::</span> <span class="na">addErrorCode</span><span class="p">(</span><span class="s1">&#39;MYADDON_SUPPORT_02&#39;</span><span class="p">,</span><span class="nv">$const</span><span class="p">);</span>
<a id="__codelineno-0-58" name="__codelineno-0-58" href="#__codelineno-0-58"></a> <span class="nv">$retval</span><span class="o">=</span><span class="k">false</span><span class="p">;</span>
<a id="__codelineno-0-59" name="__codelineno-0-59" href="#__codelineno-0-59"></a> <span class="p">}</span>
<a id="__codelineno-0-60" name="__codelineno-0-60" href="#__codelineno-0-60"></a> <span class="p">}</span>
<a id="__codelineno-0-61" name="__codelineno-0-61" href="#__codelineno-0-61"></a>
<a id="__codelineno-0-62" name="__codelineno-0-62" href="#__codelineno-0-62"></a> <span class="k">if</span> <span class="p">(</span><span class="nv">$retval</span><span class="p">)</span> <span class="p">{</span>
<a id="__codelineno-0-63" name="__codelineno-0-63" href="#__codelineno-0-63"></a> <span class="c1">// Register LSaddon view using LSsession :: registerLSaddonView()</span>
<a id="__codelineno-0-64" name="__codelineno-0-64" href="#__codelineno-0-64"></a>
<a id="__codelineno-0-65" name="__codelineno-0-65" href="#__codelineno-0-65"></a> <span class="k">if</span> <span class="p">(</span><span class="nb">php_sapi_name</span><span class="p">()</span> <span class="o">==</span> <span class="s1">&#39;cli&#39;</span><span class="p">)</span> <span class="p">{</span>
<a id="__codelineno-0-66" name="__codelineno-0-66" href="#__codelineno-0-66"></a> <span class="c1">// Register LSaddon CLI command using LScli :: add_command()</span>
<a id="__codelineno-0-67" name="__codelineno-0-67" href="#__codelineno-0-67"></a> <span class="p">}</span>
<a id="__codelineno-0-68" name="__codelineno-0-68" href="#__codelineno-0-68"></a> <span class="p">}</span>
<a id="__codelineno-0-69" name="__codelineno-0-69" href="#__codelineno-0-69"></a>
<a id="__codelineno-0-70" name="__codelineno-0-70" href="#__codelineno-0-70"></a> <span class="k">return</span> <span class="nv">$retval</span><span class="p">;</span>
<a id="__codelineno-0-71" name="__codelineno-0-71" href="#__codelineno-0-71"></a><span class="p">}</span>
<a id="__codelineno-0-72" name="__codelineno-0-72" href="#__codelineno-0-72"></a>
<a id="__codelineno-0-73" name="__codelineno-0-73" href="#__codelineno-0-73"></a><span class="sd">/**</span>
<a id="__codelineno-0-74" name="__codelineno-0-74" href="#__codelineno-0-74"></a><span class="sd"> * My first function</span>
<a id="__codelineno-0-75" name="__codelineno-0-75" href="#__codelineno-0-75"></a><span class="sd"> *</span>
<a id="__codelineno-0-76" name="__codelineno-0-76" href="#__codelineno-0-76"></a><span class="sd"> * Description of this wonderfull function</span>
<a id="__codelineno-0-77" name="__codelineno-0-77" href="#__codelineno-0-77"></a><span class="sd"> *</span>
<a id="__codelineno-0-78" name="__codelineno-0-78" href="#__codelineno-0-78"></a><span class="sd"> * @author My Name &lt;my.email@example.com&gt;</span>
<a id="__codelineno-0-79" name="__codelineno-0-79" href="#__codelineno-0-79"></a><span class="sd"> *</span>
<a id="__codelineno-0-80" name="__codelineno-0-80" href="#__codelineno-0-80"></a><span class="sd"> * @return [type(s) of returned values (pipe separator)] Description of the return of this function</span>
<a id="__codelineno-0-81" name="__codelineno-0-81" href="#__codelineno-0-81"></a><span class="sd"> **/</span>
<a id="__codelineno-0-82" name="__codelineno-0-82" href="#__codelineno-0-82"></a><span class="k">function</span> <span class="nf">myaddon_first_function</span><span class="p">(</span><span class="nv">$arg1</span><span class="p">,</span> <span class="nv">$arg2</span><span class="p">)</span> <span class="p">{</span>
<a id="__codelineno-0-83" name="__codelineno-0-83" href="#__codelineno-0-83"></a> <span class="c1">// Do some stuff</span>
<a id="__codelineno-0-84" name="__codelineno-0-84" href="#__codelineno-0-84"></a> <span class="k">if</span> <span class="p">(</span><span class="nx">something</span><span class="p">)</span> <span class="p">{</span>
<a id="__codelineno-0-85" name="__codelineno-0-85" href="#__codelineno-0-85"></a> <span class="nx">LSerror</span> <span class="o">::</span> <span class="na">addErrorCode</span><span class="p">(</span>
<a id="__codelineno-0-86" name="__codelineno-0-86" href="#__codelineno-0-86"></a> <span class="s1">&#39;MYADDON_01&#39;</span><span class="p">,</span>
<a id="__codelineno-0-87" name="__codelineno-0-87" href="#__codelineno-0-87"></a> <span class="s1">&#39;something went wrong&#39;</span> <span class="c1">// Error LSformat unique argument</span>
<a id="__codelineno-0-88" name="__codelineno-0-88" href="#__codelineno-0-88"></a> <span class="p">);</span>
<a id="__codelineno-0-89" name="__codelineno-0-89" href="#__codelineno-0-89"></a> <span class="k">return</span> <span class="k">false</span><span class="p">;</span>
<a id="__codelineno-0-90" name="__codelineno-0-90" href="#__codelineno-0-90"></a> <span class="p">}</span>
<a id="__codelineno-0-91" name="__codelineno-0-91" href="#__codelineno-0-91"></a>
<a id="__codelineno-0-92" name="__codelineno-0-92" href="#__codelineno-0-92"></a> <span class="k">if</span> <span class="p">(</span><span class="nx">something</span> <span class="k">else</span><span class="p">)</span> <span class="p">{</span>
<a id="__codelineno-0-93" name="__codelineno-0-93" href="#__codelineno-0-93"></a> <span class="nx">LSerror</span> <span class="o">::</span> <span class="na">addErrorCode</span><span class="p">(</span>
<a id="__codelineno-0-94" name="__codelineno-0-94" href="#__codelineno-0-94"></a> <span class="s1">&#39;MYADDON_02&#39;</span><span class="p">,</span>
<a id="__codelineno-0-95" name="__codelineno-0-95" href="#__codelineno-0-95"></a> <span class="k">array</span><span class="p">(</span> <span class="c1">// Error LSformat arguments</span>
<a id="__codelineno-0-96" name="__codelineno-0-96" href="#__codelineno-0-96"></a> <span class="s1">&#39;about&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;second step&#39;</span><span class="p">,</span>
<a id="__codelineno-0-97" name="__codelineno-0-97" href="#__codelineno-0-97"></a> <span class="s1">&#39;msg&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;something went wrong&#39;</span>
<a id="__codelineno-0-98" name="__codelineno-0-98" href="#__codelineno-0-98"></a> <span class="p">)</span>
<a id="__codelineno-0-99" name="__codelineno-0-99" href="#__codelineno-0-99"></a> <span class="p">);</span>
<a id="__codelineno-0-100" name="__codelineno-0-100" href="#__codelineno-0-100"></a> <span class="k">return</span> <span class="k">false</span><span class="p">;</span>
<a id="__codelineno-0-101" name="__codelineno-0-101" href="#__codelineno-0-101"></a> <span class="p">}</span>
<a id="__codelineno-0-102" name="__codelineno-0-102" href="#__codelineno-0-102"></a>
<a id="__codelineno-0-103" name="__codelineno-0-103" href="#__codelineno-0-103"></a> <span class="k">if</span> <span class="p">(</span><span class="nx">still</span> <span class="nx">something</span> <span class="k">else</span><span class="p">)</span> <span class="p">{</span>
<a id="__codelineno-0-104" name="__codelineno-0-104" href="#__codelineno-0-104"></a> <span class="nx">LSerror</span> <span class="o">::</span> <span class="na">addErrorCode</span><span class="p">(</span><span class="s1">&#39;MYADDON_03&#39;</span><span class="p">);</span> <span class="c1">// Error without argument</span>
<a id="__codelineno-0-105" name="__codelineno-0-105" href="#__codelineno-0-105"></a> <span class="k">return</span> <span class="k">false</span><span class="p">;</span>
<a id="__codelineno-0-106" name="__codelineno-0-106" href="#__codelineno-0-106"></a> <span class="p">}</span>
<a id="__codelineno-0-107" name="__codelineno-0-107" href="#__codelineno-0-107"></a> <span class="k">return</span> <span class="k">true</span><span class="p">;</span>
<a id="__codelineno-0-108" name="__codelineno-0-108" href="#__codelineno-0-108"></a><span class="p">}</span>
<a id="__codelineno-0-109" name="__codelineno-0-109" href="#__codelineno-0-109"></a>
<a id="__codelineno-0-110" name="__codelineno-0-110" href="#__codelineno-0-110"></a><span class="p">[</span><span class="o">...</span><span class="p">]</span>
<a id="__codelineno-0-111" name="__codelineno-0-111" href="#__codelineno-0-111"></a>
<a id="__codelineno-0-112" name="__codelineno-0-112" href="#__codelineno-0-112"></a><span class="c1">// Defined custom CLI commands functions only on CLI context</span>
<a id="__codelineno-0-113" name="__codelineno-0-113" href="#__codelineno-0-113"></a><span class="k">if</span> <span class="p">(</span><span class="nb">php_sapi_name</span><span class="p">()</span> <span class="o">!=</span> <span class="s1">&#39;cli&#39;</span><span class="p">)</span>
<a id="__codelineno-0-114" name="__codelineno-0-114" href="#__codelineno-0-114"></a> <span class="k">return</span> <span class="k">true</span><span class="p">;</span> <span class="c1">// Always return true to avoid some warning in log</span>
<a id="__codelineno-0-115" name="__codelineno-0-115" href="#__codelineno-0-115"></a>
<a id="__codelineno-0-116" name="__codelineno-0-116" href="#__codelineno-0-116"></a><span class="c1">// Defined functions handling custom CLI commands and optionnaly</span>
<a id="__codelineno-0-117" name="__codelineno-0-117" href="#__codelineno-0-117"></a><span class="c1">// their arguments autocompleter functions.</span>
</code></pre></div>
</li>
</ul>
<p>Par convention, la structure de ce fichier est toujours à peu près la même:</p>
<ul>
<li>On déclare tout d'abord les messages d'erreurs qui seront potentiellement émis par notre
<a href="../../conf/#configuration-des-lsaddons">LSaddon</a> en commençant par les messages d'erreurs liés au
support de cet <a href="../../conf/#configuration-des-lsaddons">LSaddon</a>. On utilise pour cela la méthode
<code>LSerror :: defineError()</code> qui attends en premier argument, l'identifiant du message
d'erreur et en tant que second argument, le
<a href="../../conf/global/LSformat/#format-parametrable">LSformat</a> du message d'erreur. Par convention,
les identifiants des messages d'erreurs seront en majuscule et préfixés du nom du
<a href="../../conf/#configuration-des-lsaddons">LSaddon</a>.</li>
</ul>
<ul>
<li>
<p>On déclare ensuite une fonction <code>LSaddon_[myaddon]_support</code> qui sera exécutée lors du chargement
de l'addon et qui permettra de s'assurer du support de celui-ci. Cette fonction devra retourner
<code>True</code> si c'est le cas ou <code>False</code> dans le cas contraire.</p>
<p>Cette fonction s'assura notamment :</p>
<ul>
<li>que les librairies dont l'addon dépends sont bien chargées et fonctionnelles ;</li>
<li>que ses variables et constantes de configuration sont bien définies ;</li>
<li>de déclarer <a href="#les-vues-personnalisees">les vues personnalisées</a> fournies par cet
<a href="../../conf/#configuration-des-lsaddons">LSaddon</a> ;</li>
<li>de déclarer <a href="#les-commandes-cli-personnalisees">les commandes <em>CLI</em> personnalisées</a> fournies par
cet <a href="../../conf/#configuration-des-lsaddons">LSaddon</a> ;</li>
</ul>
</li>
</ul>
<ul>
<li>On déclare ensuite les fonctions, classes et éléments fournis et manipulés par l'addon.</li>
<li>
<p>Si notre addon offre des <a href="#les-commandes-cli-personnalisees">commandes <em>CLI</em> personnalisées</a>, les
fonctions les implémentant ne seront définies, dans un souci de performance, que dans un contexte
ou elles seraient potentiellement appelables, c'est à dire dans un contexte d'exécution <code>CLI</code>.
Pour cela, nous utilisons communément la fonction <code>php_sapi_name</code> pour déterminer le contexte
d'exécution et si celui-ci vaut <code>cli</code>, nous stoppons l'exécution du reste du code du fichier via
un <code>return true</code>.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>Il est important dans ce contexte de ne jamais retourner autre chose que <code>True</code> pour éviter
tout message d'erreur inutile dans les logs.</p>
</div>
</li>
</ul>
<ul>
<li>On déclare, pour finir, les fonctions implémentant les
<a href="#les-commandes-cli-personnalisees">commandes <em>CLI</em> personnalisées</a> et leur éventuelle fonction
gérant l'autocomplétion des arguments qu'elles acceptent.</li>
</ul>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
<div class="md-copyright__highlight">
Easter-eggs
</div>
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "../..", "features": [], "search": "../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "Copi\u00e9 dans le presse-papier", "clipboard.copy": "Copier dans le presse-papier", "search.result.more.one": "1 de plus sur cette page", "search.result.more.other": "# de plus sur cette page", "search.result.none": "Aucun document trouv\u00e9", "search.result.one": "1 document trouv\u00e9", "search.result.other": "# documents trouv\u00e9s", "search.result.placeholder": "Taper pour d\u00e9marrer la recherche", "search.result.term.missing": "Non trouv\u00e9", "select.version": "S\u00e9lectionner la version"}, "version": {"provider": "mike"}}</script>
<script src="../../assets/javascripts/bundle.aecac24b.min.js"></script>
<script src="../../js/print-site.js"></script>
</body>
</html>