<!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"><?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">'MYADDON_SUPPORT_01'</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">"MYADDON Support : Unable to load %{dep}."</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">'MYADDON_SUPPORT_02'</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">"MYADDON Support : The constant %{const} is not defined."</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">'MYADDON_01'</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">"An error : %{msg}."</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">'MYADDON_02'</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">"An other error about %{about} : %{msg}"</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">'MYADDON_03'</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">"Unknown error."</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 <my.email@example.com></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">'mylib'</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">'class.mylib.php'</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">'MYADDON_SUPPORT_01'</span><span class="p">,</span> <span class="s1">'mylib'</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">'LS_MYADDON_CONF_O1'</span><span class="p">,</span> <a id="__codelineno-0-51" name="__codelineno-0-51" href="#__codelineno-0-51"></a> <span class="s1">'LS_MYADDON_CONF_O2'</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">""</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">'MYADDON_SUPPORT_02'</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">'cli'</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 <my.email@example.com></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">'MYADDON_01'</span><span class="p">,</span> <a id="__codelineno-0-87" name="__codelineno-0-87" href="#__codelineno-0-87"></a> <span class="s1">'something went wrong'</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">'MYADDON_02'</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">'about'</span> <span class="o">=></span> <span class="s1">'second step'</span><span class="p">,</span> <a id="__codelineno-0-97" name="__codelineno-0-97" href="#__codelineno-0-97"></a> <span class="s1">'msg'</span> <span class="o">=></span> <span class="s1">'something went wrong'</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">'MYADDON_03'</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">'cli'</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>