# Contribution

Comme tout projet libre qui se respecte, les contributions à LdapSaisie sont les bienvenues. Ce chapitre explique les possibilités de contribution.

## LSaddons

Les &LSaddons; sont utilisés pour implémenter dans &LdapSaisie; des fonctionnalités spécifiques telque le support du famille d'attribut spécifiques (POSIX, Samba, ...) ou encore des tâches communes et génériques (envoi de mails, connexion FTP, ...). Les &LSaddons; vont permettront également d'adapter &LdapSaisie; à vos besoins en écrivrant par exemple les fonctions appelées par les déclencheurs.

### Structure d'écriture

L'écriture d'un &LSaddon; doit respecter une structure suffisament souple afin de ne pas être un frein à vos contributions, tout en permettant d'assurer la bonne intégration de votre contibution au projet. Le code que vous ecrirez sera répartis dans deux fichiers :

conf/LSaddons/config.LSaddons.[addon name].php

  Ce fichier contiendra la configuration de votre LSadons. On y retrouvera la déclaration de constances et/ou variables de configuration permettant d'adapter votre LSaddon à une installation et à un environement.

includes/addons/LSaddons.[addon name].php

  Ce fichier contiendra le code à proprement dit de votre LSaddons.

    Structure du fichier includes/addons/LSaddons.[addon name].php
    <?php

    // Messages d'erreur

    // Support
    LSerror :: defineError('MYADDON_SUPPORT_01',
      _("MYADDON Support : first support error...")
    );

    LSerror :: defineError('MYADDON_SUPPORT_02',
      _("MYADDON Support : second support error...")
    );

    // Autres erreurs
    LSerror :: defineError('MYADDON_01',
      _("MYADDON_01 : an error : %{msg}.")
    );

    LSerror :: defineError('MYADDON_02',
      _("MYADDON_02 : an other error : %{msg}")
    );

    // Constantes

    // Un constante
    define('LS_MYADDON_CONST01',XXXXXXXX);

    /**
     * Verify support of my addon by LdapSaisie
     *
     * @author My Name <my.email@example.com>
     *
     * @retval boolean true if my addon is totaly supported, false in other cases
     **/
    function LSaddon_myaddon_support() {

      $retval=true;

      // Dependance de librairie
      if ( !class_exists('mylib') ) {
        if ( !LSsession::includeFile(LS_LIB_DIR . 'class.mylib.php') ) {
          LSerror :: addErrorCode('MYADDON_SUPPORT_01');
          $retval=false;
        }
      }

      $MUST_DEFINE_CONST= array(
        'LS_MYADDON_CONF_O1',
        'LS_MYADDON_CONF_O2',
        ...
      );

      foreach($MUST_DEFINE_CONST as $const) {
        if ( (!defined($const)) || (constant($const) == "")) {
          LSerror :: addErrorCode('MYADDON_SUPPORT_02',$const);
          $retval=false;
        }
      }

      // Other check ...

      return $retval;
    }

    /**
     * Ma première fonction.
     *
     * Ce qu'elle fait.
     *
     * @author My Name <my.email@example.com>
     *
     * @retval [type valeur retournée] [Signification de la valeur retournée]
     **/
    function myaddon_first_function($arg1,$arg2) {

      ...

    }

    ?>