From fa60f54b150ead6440c53dbd174621f22a5cb55d Mon Sep 17 00:00:00 2001 From: Benjamin Renard Date: Wed, 17 May 2023 11:38:01 +0200 Subject: [PATCH] LSioFormat: add before/after import triggers feature --- doc/conf/LSobject/ioFormat.docbook | 143 +++++++++++++++++- .../LSobjects/config.LSobjects.LSpeople.php | 10 ++ src/includes/class/class.LSio.php | 39 +++++ src/includes/class/class.LSioFormat.php | 53 +++++++ src/lang/fr_FR.UTF8/LC_MESSAGES/ldapsaisie.mo | Bin 90469 -> 90812 bytes src/lang/fr_FR.UTF8/LC_MESSAGES/ldapsaisie.po | 118 ++++++++------- src/lang/ldapsaisie.pot | 112 +++++++------- 7 files changed, 369 insertions(+), 106 deletions(-) diff --git a/doc/conf/LSobject/ioFormat.docbook b/doc/conf/LSobject/ioFormat.docbook index 6482b7a5..f85a0bf6 100644 --- a/doc/conf/LSobject/ioFormat.docbook +++ b/doc/conf/LSobject/ioFormat.docbook @@ -43,7 +43,9 @@ création du type d'&LSobject;. En conséquence : return array([...]); }, [...] - ) + ), + 'before_import' => array('function1', 'function2'), + 'after_import' => 'function3', ), [...] );]]> @@ -100,6 +102,24 @@ création du type d'&LSobject;. En conséquence : + + before_import + + Chaîne de caractères (ou tableau de chaîne de caractères) correspondant + au nom d'une ou plusieurs fonctions qui seront exécutées avant chaque import. + Voir la section concernée + + + + + after_import + + Chaîne de caractères (ou tableau de chaîne de caractères) correspondant + au nom d'une ou plusieurs fonctions qui seront exécutées après chaque import. + Voir la section concernée + + + @@ -187,4 +207,125 @@ création du type d'&LSobject;. En conséquence : + + Déclencheurs + Cette section décrit la manière de paramétrer des déclencheurs afin que + &LdapSaisie; exécute durant ses processus, et à des moments bien précis des + traitements d'un &ioFormat;, des fonctions que vous pourrez développer vous + même. De plus, le résultat de l'exécution de vos fonctions pourra influer + sur le déroulement des processus. + + Actuellement, les évenements suivant sont gérés : + + + + + + Nom + Description + Bloquant + + + + + before_import + Avant l'import. + Oui + + + after_import + Après l'import'. + Non + + + + +Si un événement est dit bloquant, lors de +l'exécution des actions liées, si une des fonctions retourne false +, le processus s'arrêtera. + + + Configuration + La configuration des déclencheurs se fait dans la définition des types + d'&ioFormat;. Par exemple, pour définir les fonctions à exécuter après + l'import des LSobjects de type LSpeople avec son LSioFormat + mycsv, c'est à dire lors de leur évènement after_import, il faut + définir la variable suivante : + + Cette variable peut contenir soit une chaine de caractères correspondant au + nom de la fonction à exécuter, soit un tableau de chaînes de caractères + correspondant aux noms des fonctions à exécuter. Il est également possible de mettre ici directement + des fonctions anonymes. + + + + Ecriture d'une fonction + Une fonction exécutée par un déclencheur d'un ioFormat se déclare de la + manière suivante : + +Cette fonction doit accepter deux paramètres, le LSioFormat sur lequel l'évènement survient et un +tableau des données contextuelles de l'évènement. Elle doit par ailleurs retourner +True si tout s'est bien passé ou False en cas de problème. +Dans le cas d'un événement bloquant, si la fonction retourne False, le processus +est arrêté. + +Les données contextuelles de l'évènement, passées en paramètre, pourront dépendre du contexte +et de l'évènement déclencheur, mais pour les moments, il s'agit toujours d'un tableau telque décrit +ci-dessous : + "[/path/of/import.file]", + 'updateIfExists' => [boolean], + 'justTry' => [boolean], + 'objectsData' => array( + [Données des objets chargés depuis le fichier d'import] + ), + 'return' => array( + 'success' => [boolean], + 'LSobject' => "[nom du type d'LSobject]", + 'ioFormat' => "[nom du type d'ioFormat]", + 'updateIfExists' => [boolean], + 'justTry' => [boolean], + 'imported' => array([objets importés]), + 'updated' => array([objets mis à jour]), + 'errors' => array( + array( + 'data' => [données de l'objet importé ayant déclenché l'erreur], + 'errors' => array ( + 'globals' => array("Erreur 1", [...]), + 'attrs' => array( + 'attr1' => array("Erreur 1", [...]), + [...] + ), + ), + ), + [...] + ), + ), +)]]> +Les clés objectsData et return sont des références. +En cas de modification, cela influencera respectivement sur les données utilisées pour l'import et +sur le résultat de l'import tel qu'affiché dans l'interface. + + + + + diff --git a/src/conf/LSobjects/config.LSobjects.LSpeople.php b/src/conf/LSobjects/config.LSobjects.LSpeople.php index b1f2e085..ee734333 100644 --- a/src/conf/LSobjects/config.LSobjects.LSpeople.php +++ b/src/conf/LSobjects/config.LSobjects.LSpeople.php @@ -85,6 +85,16 @@ $GLOBALS['LSobjects']['LSpeople'] = array ( return array(strval(LS_SAMBA_INFINITY_TIME)); }, ), + 'before_import' => function(&$ioFormat, &$data) { + LSsession::addInfo(htmlentities("$ioFormat: Before import test")); + return true; + }, + 'after_import' => array( + function(&$ioFormat, &$data) { + LSsession::addInfo(htmlentities("$ioFormat: After import test")); + return true; + }, + ), ), 'myfullcsv' => array ( 'label' => 'Complete CSV', diff --git a/src/includes/class/class.LSio.php b/src/includes/class/class.LSio.php index 8b6f48ef..645cd3d6 100644 --- a/src/includes/class/class.LSio.php +++ b/src/includes/class/class.LSio.php @@ -231,6 +231,23 @@ class LSio extends LSlog_staticLoggerClass { // with a minimum of 30 seconds set_time_limit((count($objectsData)>30?count($objectsData):30)); + // Trigger before_import event + if ( + !$ioFormat -> fireEvent( + 'before_import', + array( + 'input_file' => $input_file, + 'updateIfExists' => $updateIfExists, + 'justTry' => $justTry, + 'objectsData' => &$objectsData, + 'return' => &$return, + ) + ) + ) { + LSerror :: addErrorCode('LSio_08'); + return $return; + } + // Browse inputed objects foreach($objectsData as $objData) { $globalErrors = array(); @@ -332,6 +349,22 @@ class LSio extends LSlog_staticLoggerClass { } $return['errors'] = $objectsInError; $return['success'] = empty($objectsInError); + + // Trigger after_import event + if ( + !$ioFormat -> fireEvent( + 'after_import', + array( + 'input_file' => $input_file, + 'updateIfExists' => $updateIfExists, + 'justTry' => $justTry, + 'objectsData' => &$objectsData, + 'return' => &$return, + ) + ) + ) + LSerror :: addErrorCode('LSio_09'); + return $return; } @@ -708,6 +741,12 @@ ___("LSio: Fail to load objects's data to export from LDAP directory.") LSerror :: defineError('LSio_07', ___("LSio: Fail to export objects's data.") ); +LSerror :: defineError('LSio_08', +___("LSio: An error occured running before import hooks. Stop the import.") +); +LSerror :: defineError('LSio_09', +___("LSio: An error occured running after import hooks.") +); // Defined CLI commands functions only on CLI context if (php_sapi_name() != 'cli') diff --git a/src/includes/class/class.LSioFormat.php b/src/includes/class/class.LSioFormat.php index 8fd0baaa..b64200a9 100644 --- a/src/includes/class/class.LSioFormat.php +++ b/src/includes/class/class.LSioFormat.php @@ -29,6 +29,18 @@ LSsession :: loadLSclass('LSlog_staticLoggerClass'); */ class LSioFormat extends LSlog_staticLoggerClass { + /** + * LSobject type name + * @var string + */ + var $LSobject; + + /** + * ioFormat name + * @var string + */ + var $name; + /** * Configuration of the IOformat * (LSobjects..ioFormat.) @@ -56,6 +68,8 @@ class LSioFormat extends LSlog_staticLoggerClass { * @return void **/ public function __construct($LSobject, $ioFormat) { + $this -> LSobject = $LSobject; + $this -> name = $ioFormat; $conf = LSconfig::get('LSobjects.'.$LSobject.".ioFormat.".$ioFormat); if(is_array($conf)) { $this -> config = $conf; @@ -165,6 +179,45 @@ class LSioFormat extends LSlog_staticLoggerClass { return $this -> driver -> exportObjectsData($objects_data, $stream); } + /** + * Trigger action to run to specified event + * + * @param string $event The event name + * @param string $evenData The event context data (optional, default: null) + * + * @return boolean True on success, False otherwise + */ + public function fireEvent($event, $evenData=null) { + self :: log_debug(strval($this)." -> fireEvent($event)"); + $return = true; + if(isset($this -> config[$event])) { + foreach(ensureIsArray($this -> config[$event]) as $func) { + if(is_callable($func)) { + self :: log_debug(strval($this)." -> fireEvent($event): run ".format_callable($func)); + if(!call_user_func_array($func, array(&$this, &$evenData))) { + $return = false; + } + } + else { + self :: log_warning(strval($this)." -> fireEvent($event): function '".format_callable($func)."' doesn't exists."); + $return = false; + } + } + } + else + self :: log_trace(strval($this)." -> fireEvent($event): no configured trigger for this event."); + return $return; + } + + /** + * Allow conversion of LSioFormat to string + * + * @return string The string representation of the LSioFormat + */ + public function __toString() { + return " name." on ".$this -> LSobject.">"; + } + } LSerror :: defineError('LSioFormat_01', diff --git a/src/lang/fr_FR.UTF8/LC_MESSAGES/ldapsaisie.mo b/src/lang/fr_FR.UTF8/LC_MESSAGES/ldapsaisie.mo index f7b2fe16eb1cb403439175aaa152fa8427c39626..bbea337b1b7b7a3c9b0e720538a000a8d9ab8d81 100644 GIT binary patch delta 14484 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 delta 14260 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 diff --git a/src/lang/fr_FR.UTF8/LC_MESSAGES/ldapsaisie.po b/src/lang/fr_FR.UTF8/LC_MESSAGES/ldapsaisie.po index 19d2e02c..1a7c1eff 100644 --- a/src/lang/fr_FR.UTF8/LC_MESSAGES/ldapsaisie.po +++ b/src/lang/fr_FR.UTF8/LC_MESSAGES/ldapsaisie.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: LdapSaisie\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2023-03-28 12:20+0200\n" +"PO-Revision-Date: 2023-05-17 11:36+0200\n" "Last-Translator: Benjamin Renard \n" "Language-Team: LdapSaisie \n" @@ -435,7 +435,7 @@ msgid "Show LdapSaisie modifications" msgstr "Voir les modifications d'LdapSaisie" #: includes/addons/LSaddons.accesslog.php:244 -#: includes/class/class.LSsession.php:1855 includes/routes.php:157 +#: includes/class/class.LSsession.php:1870 includes/routes.php:157 #: includes/routes.php:470 templates/default/select.tpl:29 msgid "Refresh" msgstr "Rafraîchir" @@ -752,82 +752,94 @@ msgstr "Valeur invalide" msgid "LSformRule_%{type}: Parameter %{param} is not found." msgstr "LSformRule_%{type} : Le paramètre %{param} n'est pas défini." -#: includes/class/class.LSio.php:244 +#: includes/class/class.LSio.php:261 msgid "Failed to set post data on creation form." msgstr "Impossible de définir les données dans le formulaire de création." -#: includes/class/class.LSio.php:250 +#: includes/class/class.LSio.php:267 msgid "Error validating creation form." msgstr "Une erreur est survenue en validant le formulaire de création." -#: includes/class/class.LSio.php:255 +#: includes/class/class.LSio.php:272 msgid "Failed to validate object data." msgstr "Impossible de valider les données de l'objet." -#: includes/class/class.LSio.php:262 +#: includes/class/class.LSio.php:279 msgid "Failed to generate DN for this object." msgstr "Impossible de générer le DN de cet objet." -#: includes/class/class.LSio.php:276 +#: includes/class/class.LSio.php:293 msgid "Error creating object on LDAP server." msgstr "Une erreur est survenue en création cet objet dans l'annuaire LDAP." -#: includes/class/class.LSio.php:282 +#: includes/class/class.LSio.php:299 msgid "An object already exist on LDAP server with DN %{dn}." msgstr "Un objet existe déjà dans l'annuaire LDAP avec le DN %{dn}." -#: includes/class/class.LSio.php:294 +#: includes/class/class.LSio.php:311 msgid "" "Failed to load existing object %{dn} from LDAP server. Can't update object." msgstr "" "Impossible de charger l'objet existant %{dn} depuis l'annuaire LDAP. " "Impossible de mettre à jour cet objet." -#: includes/class/class.LSio.php:303 +#: includes/class/class.LSio.php:320 msgid "Failed to set post data on update form." msgstr "Impossible de définir les données dans le formulaire de mise à jour." -#: includes/class/class.LSio.php:309 +#: includes/class/class.LSio.php:326 msgid "Error validating update form." msgstr "Une erreur est survenue en validant le formulaire de mise à jour." -#: includes/class/class.LSio.php:319 +#: includes/class/class.LSio.php:336 msgid "Error updating object on LDAP server." msgstr "" "Une erreur est survenue en mettant à jour cet objet dans l'annuaire LDAP." -#: includes/class/class.LSio.php:691 +#: includes/class/class.LSio.php:724 msgid "LSio: Post data not found or not completed." msgstr "LSio : les données transmises sont introuvables ou incomplètes." -#: includes/class/class.LSio.php:694 +#: includes/class/class.LSio.php:727 msgid "LSio: object type invalid." msgstr "LSio : type d'objet invalide." -#: includes/class/class.LSio.php:697 +#: includes/class/class.LSio.php:730 msgid "LSio: input/output format %{format} invalid." msgstr "LSio : Le format d'entrée/sortie %{format} est invalide." -#: includes/class/class.LSio.php:700 +#: includes/class/class.LSio.php:733 msgid "LSio: Fail to initialize input/output driver." msgstr "LSio : Impossible d'initialiser le pilote d'entrée/sortie." -#: includes/class/class.LSio.php:703 +#: includes/class/class.LSio.php:736 msgid "LSio: Fail to load objects's data from input file." msgstr "" "LSio: Impossible de charger les données des objets depuis le fichier " "d'import." -#: includes/class/class.LSio.php:706 +#: includes/class/class.LSio.php:739 msgid "LSio: Fail to load objects's data to export from LDAP directory." msgstr "" "LSio: Impossible de charger les données des objets à exporter depuis " "l'annuaire LDAP." -#: includes/class/class.LSio.php:709 +#: includes/class/class.LSio.php:742 msgid "LSio: Fail to export objects's data." msgstr "LSio: Impossible d'exporter les données des objets." +#: includes/class/class.LSio.php:745 +msgid "LSio: An error occured running before import hooks. Stop the import." +msgstr "" +"LSio : Une erreur est survenue durant l'exécution des déclencheurs d'avant " +"import. Arrêt de l'import." + +#: includes/class/class.LSio.php:748 +msgid "LSio: An error occured running after import hooks." +msgstr "" +"LSio : Une erreur est survenue durant l'exécution des déclencheurs d'après " +"import." + #: includes/class/class.LSformElement_supannRessourceEtatDate.php:61 msgid "Start date" msgstr "Date de début" @@ -1499,40 +1511,40 @@ msgstr "" msgid "Clear" msgstr "Nettoyer" -#: includes/class/class.LSsession.php:1640 +#: includes/class/class.LSsession.php:1655 msgid "Connection" msgstr "Connexion" -#: includes/class/class.LSsession.php:1660 +#: includes/class/class.LSsession.php:1675 msgid "Recovery of your credentials" msgstr "Récupération de votre mot de passe" -#: includes/class/class.LSsession.php:1669 +#: includes/class/class.LSsession.php:1684 msgid "Please fill the identifier field to proceed recovery procedure" msgstr "" "Merci d'entrer votre identifiant pour poursuivre la procédure de récupération" -#: includes/class/class.LSsession.php:1674 +#: includes/class/class.LSsession.php:1689 msgid "" "An email has been sent to %{mail}. Please follow the instructions on it." msgstr "" "Un e-mail vient de vous être envoyé à l'adresse %{mail}. Merci de suivre les " "indications qu'il contient." -#: includes/class/class.LSsession.php:1683 +#: includes/class/class.LSsession.php:1698 msgid "Your new password has been sent to %{mail}." msgstr "Votre nouveau mot de passe vous a été envoyé à l'adresse %{mail}." -#: includes/class/class.LSsession.php:2945 templates/default/select.tpl:20 +#: includes/class/class.LSsession.php:2960 templates/default/select.tpl:20 #: templates/default/recoverpassword.tpl:17 templates/default/login.tpl:16 msgid "Level" msgstr "Niveau" -#: includes/class/class.LSsession.php:3113 +#: includes/class/class.LSsession.php:3128 msgid "LSsession : The constant '%{const}' is not defined." msgstr "LSsession : La constante '%{const}' n'est pas définie." -#: includes/class/class.LSsession.php:3116 +#: includes/class/class.LSsession.php:3131 msgid "" "LSsession : The addon '%{addon}' support is uncertain. Verify system " "compatibility and the add-on configuration." @@ -1540,53 +1552,53 @@ msgstr "" "LSsession : Le support de l'addon '%{addon}' est incertain. Vérifiez la " "compatibilité du système et la configuration de l'add-on." -#: includes/class/class.LSsession.php:3119 +#: includes/class/class.LSsession.php:3134 msgid "" "LSsession : LDAP server's configuration data are invalid. Can't connect." msgstr "" "LSsession : Les données de configuration du serveur LDAP sont invalide. " "Impossible de s'y connecter." -#: includes/class/class.LSsession.php:3122 +#: includes/class/class.LSsession.php:3137 msgid "LSsession : Failed to load LSobject type '%{type}' : unknon type." msgstr "" "LSsession : Impossible de charger le type d'LSobject '%{type}' : type " "inconnu." -#: includes/class/class.LSsession.php:3125 +#: includes/class/class.LSsession.php:3140 msgid "LSsession : Failed to load LSclass '%{class}'." msgstr "LSsession : Impossible de charger la LSclass '%{class}'." -#: includes/class/class.LSsession.php:3128 +#: includes/class/class.LSsession.php:3143 msgid "LSsession : Login or password incorrect." msgstr "LSsession : Identifiant ou mot de passe incorrects." -#: includes/class/class.LSsession.php:3131 +#: includes/class/class.LSsession.php:3146 msgid "LSsession : Impossible to identify you : Duplication of identities." msgstr "LSsession : Impossible de vous identifier : Duplication d'identité." -#: includes/class/class.LSsession.php:3134 +#: includes/class/class.LSsession.php:3149 msgid "LSsession : Can't load class of authentification (%{class})." msgstr "" "LSsession : Impossible de charger la classe d'authentification (%{class})." -#: includes/class/class.LSsession.php:3137 +#: includes/class/class.LSsession.php:3152 msgid "LSsession : Can't connect to LDAP server." msgstr "LSsession : Impossible de se connecter au serveur LDAP." -#: includes/class/class.LSsession.php:3140 +#: includes/class/class.LSsession.php:3155 msgid "LSsession : Impossible to authenticate you." msgstr "LSsession : Impossible de vous identifier." -#: includes/class/class.LSsession.php:3143 +#: includes/class/class.LSsession.php:3158 msgid "LSsession : Your are not authorized to do this action." msgstr "LSsession : Vous n'êtes pas autorisé à faire cette action." -#: includes/class/class.LSsession.php:3146 +#: includes/class/class.LSsession.php:3161 msgid "LSsession : Some informations are missing to display this page." msgstr "LSsession : Des informations sont manquantes pour afficher cette page." -#: includes/class/class.LSsession.php:3149 +#: includes/class/class.LSsession.php:3164 msgid "" "LSsession : The function '%{function}' of the custom action " "'%{customAction}' does not exists or is not configured." @@ -1594,24 +1606,24 @@ msgstr "" "LSsession : La fonction '%{function}' de l'action personnalisée " "'%{customAction}' n'existe pas ou n'est pas configurée." -#: includes/class/class.LSsession.php:3152 +#: includes/class/class.LSsession.php:3167 msgid "LSsession : Fail to retrieve user's LDAP credentials from LSauth." msgstr "" "LSsession : Erreur en récupérant les identifiants LDAP de l'utilisateur " "depuis LSauth." -#: includes/class/class.LSsession.php:3155 +#: includes/class/class.LSsession.php:3170 msgid "" "LSsession : Fail to reconnect to LDAP server with user's LDAP credentials." msgstr "" "LSsession : Impossible de se reconnecter au serveur LDAP avec les " "identifiants de l'utilisateur." -#: includes/class/class.LSsession.php:3158 +#: includes/class/class.LSsession.php:3173 msgid "LSsession : No import/export format define for this object type." msgstr "LSsession : Aucun format d'entrée/sortie défini pour ce type d'objet." -#: includes/class/class.LSsession.php:3161 +#: includes/class/class.LSsession.php:3176 msgid "" "LSsession : Error during creation of list of levels. Contact administrators. " "(Code : %{code})" @@ -1619,13 +1631,13 @@ msgstr "" "LSsession : Erreur durant la création de la liste des niveaux. Contacter les " "administrateurs. (Code : %{type})" -#: includes/class/class.LSsession.php:3164 +#: includes/class/class.LSsession.php:3179 msgid "LSsession : The password recovery is disabled for this LDAP server." msgstr "" "LSsession : La récupération de mot de passe est désactivée pour ce serveur " "LDAP." -#: includes/class/class.LSsession.php:3167 +#: includes/class/class.LSsession.php:3182 msgid "" "LSsession : Some informations are missing to recover your password. Contact " "administrators." @@ -1633,7 +1645,7 @@ msgstr "" "LSsession : Des informations sont manques pour pouvoir récupérer votre mot " "de passe. Contacter les administrateurs." -#: includes/class/class.LSsession.php:3170 +#: includes/class/class.LSsession.php:3185 msgid "" "LSsession : Error during password recovery. Contact administrators.(Step : " "%{step})" @@ -1641,7 +1653,7 @@ msgstr "" "LSsession : Erreur durant la récupération de votre mot de passe. Contacter " "les administrateurs. (Etape : %{step})" -#: includes/class/class.LSsession.php:3173 +#: includes/class/class.LSsession.php:3188 msgid "" "LSsession : The function '%{func}' configured for the view '%{view}' of the " "LSaddon '%{addon}' is not declared in the LSaddon file." @@ -1649,11 +1661,11 @@ msgstr "" "LSsession : la fonction '%{func}' configurée pour la vue '%{view}' du " "LSaddon '%{addon}' n'est pas déclaré dans le fichier du LSaddon." -#: includes/class/class.LSsession.php:3176 +#: includes/class/class.LSsession.php:3191 msgid "LSsession : Failed to load resource file '%{file}'." msgstr "LSsession : Impossible de charger le fichier de ressource '%{file}'." -#: includes/class/class.LSsession.php:3179 +#: includes/class/class.LSsession.php:3194 msgid "" "LSsession : The function '%{func}' configured for the view '%{view}' of the " "LSaddon '%{addon}' doesn't exist." @@ -1661,11 +1673,11 @@ msgstr "" "LSsession : la fonction '%{func}' configurée pour la vue '%{view}' du " "LSaddon '%{addon}' n'existe pas." -#: includes/class/class.LSsession.php:3182 +#: includes/class/class.LSsession.php:3197 msgid "LSsession : invalid related object's DN pass in parameter." msgstr "LSsession : DN d'objet en relation incorrect dans les paramètres." -#: includes/class/class.LSsession.php:3185 +#: includes/class/class.LSsession.php:3200 msgid "" "LSsession : the LSaddon %{addon} keep using old-style addon view URL. Please " "upgrade it." @@ -1673,7 +1685,7 @@ msgstr "" "LSsession : le LSaddon %{addon} utilise toujours l'ancien type d'URL de " "vues. Merci de le mettre à jour." -#: includes/class/class.LSsession.php:3188 +#: includes/class/class.LSsession.php:3203 msgid "" "LSsession : You have been redirect from an old-style URL %{url}. Please " "upgrade this link." @@ -1681,7 +1693,7 @@ msgstr "" "LSsession : Vous avez été redirigé depuis une ancienne URL %{url}. Merci de " "le mettre à jour ce lien." -#: includes/class/class.LSsession.php:3191 +#: includes/class/class.LSsession.php:3206 msgid "" "LSsession : You always seem to use %{old} in your custom code: Please " "upgrade it and use %{new}.
\n"
@@ -3163,7 +3175,7 @@ msgstr ""
 "LSsearchEntry : formaterFunction %{func} invalide utilisé pour "
 "l'extraDisplayedColumns %{column}."
 
-#: includes/class/class.LSioFormat.php:171
+#: includes/class/class.LSioFormat.php:224
 msgid "LSioFormat : IOformat driver %{driver} invalid or unavailable."
 msgstr ""
 "LSioFormat : Le pilote d'IOformat %{driver} est invalide ou n'est pas "
diff --git a/src/lang/ldapsaisie.pot b/src/lang/ldapsaisie.pot
index 7280a119..696af66c 100644
--- a/src/lang/ldapsaisie.pot
+++ b/src/lang/ldapsaisie.pot
@@ -359,7 +359,7 @@ msgid "Show LdapSaisie modifications"
 msgstr ""
 
 #: includes/addons/LSaddons.accesslog.php:244
-#: includes/class/class.LSsession.php:1855 includes/routes.php:157
+#: includes/class/class.LSsession.php:1870 includes/routes.php:157
 #: includes/routes.php:470 templates/default/select.tpl:29
 msgid "Refresh"
 msgstr ""
@@ -638,75 +638,83 @@ msgstr ""
 msgid "LSformRule_%{type}: Parameter %{param} is not found."
 msgstr ""
 
-#: includes/class/class.LSio.php:244
+#: includes/class/class.LSio.php:261
 msgid "Failed to set post data on creation form."
 msgstr ""
 
-#: includes/class/class.LSio.php:250
+#: includes/class/class.LSio.php:267
 msgid "Error validating creation form."
 msgstr ""
 
-#: includes/class/class.LSio.php:255
+#: includes/class/class.LSio.php:272
 msgid "Failed to validate object data."
 msgstr ""
 
-#: includes/class/class.LSio.php:262
+#: includes/class/class.LSio.php:279
 msgid "Failed to generate DN for this object."
 msgstr ""
 
-#: includes/class/class.LSio.php:276
+#: includes/class/class.LSio.php:293
 msgid "Error creating object on LDAP server."
 msgstr ""
 
-#: includes/class/class.LSio.php:282
+#: includes/class/class.LSio.php:299
 msgid "An object already exist on LDAP server with DN %{dn}."
 msgstr ""
 
-#: includes/class/class.LSio.php:294
+#: includes/class/class.LSio.php:311
 msgid ""
 "Failed to load existing object %{dn} from LDAP server. Can't update object."
 msgstr ""
 
-#: includes/class/class.LSio.php:303
+#: includes/class/class.LSio.php:320
 msgid "Failed to set post data on update form."
 msgstr ""
 
-#: includes/class/class.LSio.php:309
+#: includes/class/class.LSio.php:326
 msgid "Error validating update form."
 msgstr ""
 
-#: includes/class/class.LSio.php:319
+#: includes/class/class.LSio.php:336
 msgid "Error updating object on LDAP server."
 msgstr ""
 
-#: includes/class/class.LSio.php:691
+#: includes/class/class.LSio.php:724
 msgid "LSio: Post data not found or not completed."
 msgstr ""
 
-#: includes/class/class.LSio.php:694
+#: includes/class/class.LSio.php:727
 msgid "LSio: object type invalid."
 msgstr ""
 
-#: includes/class/class.LSio.php:697
+#: includes/class/class.LSio.php:730
 msgid "LSio: input/output format %{format} invalid."
 msgstr ""
 
-#: includes/class/class.LSio.php:700
+#: includes/class/class.LSio.php:733
 msgid "LSio: Fail to initialize input/output driver."
 msgstr ""
 
-#: includes/class/class.LSio.php:703
+#: includes/class/class.LSio.php:736
 msgid "LSio: Fail to load objects's data from input file."
 msgstr ""
 
-#: includes/class/class.LSio.php:706
+#: includes/class/class.LSio.php:739
 msgid "LSio: Fail to load objects's data to export from LDAP directory."
 msgstr ""
 
-#: includes/class/class.LSio.php:709
+#: includes/class/class.LSio.php:742
 msgid "LSio: Fail to export objects's data."
 msgstr ""
 
+#: includes/class/class.LSio.php:745
+msgid "LSio: An error occured running before import hooks. Stop the import."
+msgstr ""
+
+#: includes/class/class.LSio.php:748
+msgid "LSio: An error occured running after import hooks."
+msgstr ""
+
 #: includes/class/class.LSformElement_supannRessourceEtatDate.php:61
 msgid "Start date"
 msgstr ""
@@ -1282,157 +1290,157 @@ msgstr ""
 msgid "Clear"
 msgstr ""
 
-#: includes/class/class.LSsession.php:1640
+#: includes/class/class.LSsession.php:1655
 msgid "Connection"
 msgstr ""
 
-#: includes/class/class.LSsession.php:1660
+#: includes/class/class.LSsession.php:1675
 msgid "Recovery of your credentials"
 msgstr ""
 
-#: includes/class/class.LSsession.php:1669
+#: includes/class/class.LSsession.php:1684
 msgid "Please fill the identifier field to proceed recovery procedure"
 msgstr ""
 
-#: includes/class/class.LSsession.php:1674
+#: includes/class/class.LSsession.php:1689
 msgid ""
 "An email has been sent to  %{mail}. Please follow the instructions on it."
 msgstr ""
 
-#: includes/class/class.LSsession.php:1683
+#: includes/class/class.LSsession.php:1698
 msgid "Your new password has been sent to %{mail}."
 msgstr ""
 
-#: includes/class/class.LSsession.php:2945 templates/default/select.tpl:20
+#: includes/class/class.LSsession.php:2960 templates/default/select.tpl:20
 #: templates/default/recoverpassword.tpl:17 templates/default/login.tpl:16
 msgid "Level"
 msgstr ""
 
-#: includes/class/class.LSsession.php:3113
+#: includes/class/class.LSsession.php:3128
 msgid "LSsession : The constant '%{const}' is not defined."
 msgstr ""
 
-#: includes/class/class.LSsession.php:3116
+#: includes/class/class.LSsession.php:3131
 msgid ""
 "LSsession : The addon '%{addon}' support is uncertain. Verify system "
 "compatibility and the add-on configuration."
 msgstr ""
 
-#: includes/class/class.LSsession.php:3119
+#: includes/class/class.LSsession.php:3134
 msgid ""
 "LSsession : LDAP server's configuration data are invalid. Can't connect."
 msgstr ""
 
-#: includes/class/class.LSsession.php:3122
+#: includes/class/class.LSsession.php:3137
 msgid "LSsession : Failed to load LSobject type '%{type}' : unknon type."
 msgstr ""
 
-#: includes/class/class.LSsession.php:3125
+#: includes/class/class.LSsession.php:3140
 msgid "LSsession : Failed to load LSclass '%{class}'."
 msgstr ""
 
-#: includes/class/class.LSsession.php:3128
+#: includes/class/class.LSsession.php:3143
 msgid "LSsession : Login or password incorrect."
 msgstr ""
 
-#: includes/class/class.LSsession.php:3131
+#: includes/class/class.LSsession.php:3146
 msgid "LSsession : Impossible to identify you : Duplication of identities."
 msgstr ""
 
-#: includes/class/class.LSsession.php:3134
+#: includes/class/class.LSsession.php:3149
 msgid "LSsession : Can't load class of authentification (%{class})."
 msgstr ""
 
-#: includes/class/class.LSsession.php:3137
+#: includes/class/class.LSsession.php:3152
 msgid "LSsession : Can't connect to LDAP server."
 msgstr ""
 
-#: includes/class/class.LSsession.php:3140
+#: includes/class/class.LSsession.php:3155
 msgid "LSsession : Impossible to authenticate you."
 msgstr ""
 
-#: includes/class/class.LSsession.php:3143
+#: includes/class/class.LSsession.php:3158
 msgid "LSsession : Your are not authorized to do this action."
 msgstr ""
 
-#: includes/class/class.LSsession.php:3146
+#: includes/class/class.LSsession.php:3161
 msgid "LSsession : Some informations are missing to display this page."
 msgstr ""
 
-#: includes/class/class.LSsession.php:3149
+#: includes/class/class.LSsession.php:3164
 msgid ""
 "LSsession : The function '%{function}' of the custom action "
 "'%{customAction}' does not exists or is not configured."
 msgstr ""
 
-#: includes/class/class.LSsession.php:3152
+#: includes/class/class.LSsession.php:3167
 msgid "LSsession : Fail to retrieve user's LDAP credentials from LSauth."
 msgstr ""
 
-#: includes/class/class.LSsession.php:3155
+#: includes/class/class.LSsession.php:3170
 msgid ""
 "LSsession : Fail to reconnect to LDAP server with user's LDAP credentials."
 msgstr ""
 
-#: includes/class/class.LSsession.php:3158
+#: includes/class/class.LSsession.php:3173
 msgid "LSsession : No import/export format define for this object type."
 msgstr ""
 
-#: includes/class/class.LSsession.php:3161
+#: includes/class/class.LSsession.php:3176
 msgid ""
 "LSsession : Error during creation of list of levels. Contact administrators. "
 "(Code : %{code})"
 msgstr ""
 
-#: includes/class/class.LSsession.php:3164
+#: includes/class/class.LSsession.php:3179
 msgid "LSsession : The password recovery is disabled for this LDAP server."
 msgstr ""
 
-#: includes/class/class.LSsession.php:3167
+#: includes/class/class.LSsession.php:3182
 msgid ""
 "LSsession : Some informations are missing to recover your password. Contact "
 "administrators."
 msgstr ""
 
-#: includes/class/class.LSsession.php:3170
+#: includes/class/class.LSsession.php:3185
 msgid ""
 "LSsession : Error during password recovery. Contact administrators.(Step : "
 "%{step})"
 msgstr ""
 
-#: includes/class/class.LSsession.php:3173
+#: includes/class/class.LSsession.php:3188
 msgid ""
 "LSsession : The function '%{func}' configured for the view '%{view}' of the "
 "LSaddon '%{addon}' is not declared in the LSaddon file."
 msgstr ""
 
-#: includes/class/class.LSsession.php:3176
+#: includes/class/class.LSsession.php:3191
 msgid "LSsession : Failed to load resource file '%{file}'."
 msgstr ""
 
-#: includes/class/class.LSsession.php:3179
+#: includes/class/class.LSsession.php:3194
 msgid ""
 "LSsession : The function '%{func}' configured for the view '%{view}' of the "
 "LSaddon '%{addon}' doesn't exist."
 msgstr ""
 
-#: includes/class/class.LSsession.php:3182
+#: includes/class/class.LSsession.php:3197
 msgid "LSsession : invalid related object's DN pass in parameter."
 msgstr ""
 
-#: includes/class/class.LSsession.php:3185
+#: includes/class/class.LSsession.php:3200
 msgid ""
 "LSsession : the LSaddon %{addon} keep using old-style addon view URL. Please "
 "upgrade it."
 msgstr ""
 
-#: includes/class/class.LSsession.php:3188
+#: includes/class/class.LSsession.php:3203
 msgid ""
 "LSsession : You have been redirect from an old-style URL %{url}. Please "
 "upgrade this link."
 msgstr ""
 
-#: includes/class/class.LSsession.php:3191
+#: includes/class/class.LSsession.php:3206
 msgid ""
 "LSsession : You always seem to use %{old} in your custom code: Please "
 "upgrade it and use %{new}.
\n"
@@ -2695,7 +2703,7 @@ msgid ""
 "%{column}."
 msgstr ""
 
-#: includes/class/class.LSioFormat.php:171
+#: includes/class/class.LSioFormat.php:224
 msgid "LSioFormat : IOformat driver %{driver} invalid or unavailable."
 msgstr ""