LSioFormat: add before/after import triggers feature

This commit is contained in:
Benjamin Renard 2023-05-17 11:38:01 +02:00
parent 89ee2f1ec3
commit fa60f54b15
Signed by: bn8
GPG key ID: 3E2E1CE1907115BC
7 changed files with 369 additions and 106 deletions

View file

@ -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 :
</listitem>
</varlistentry>
<varlistentry>
<term>before_import</term>
<listitem>
<simpara>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.
<link linkend="config-LSobject-ioFormat-triggers">Voir la section concernée</link></simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>after_import</term>
<listitem>
<simpara>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.
<link linkend="config-LSobject-ioFormat-triggers">Voir la section concernée</link></simpara>
</listitem>
</varlistentry>
</variablelist>
</para>
@ -187,4 +207,125 @@ création du type d'&LSobject;. En conséquence :
</sect3>
<sect3 id="config-LSobject-ioFormat-triggers">
<title>Déclencheurs</title>
<para>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.</para>
<para>Actuellement, les évenements suivant sont gérés :
<informaltable>
<tgroup cols="3"> <!-- on décrit le nombre de colonnes -->
<thead> <!-- on passe au "header" du tableau -->
<row>
<entry>Nom</entry>
<entry>Description</entry>
<entry>Bloquant</entry>
</row>
</thead>
<tbody> <!-- et on remplit les lignes -->
<row>
<entry><literal>before_import</literal></entry>
<entry><simpara>Avant l'import.</simpara></entry>
<entry><simpara>Oui</simpara></entry>
</row>
<row>
<entry><literal>after_import</literal></entry>
<entry><simpara>Après l'import'.</simpara></entry>
<entry><simpara>Non</simpara></entry>
</row>
</tbody>
</tgroup>
</informaltable>
<note><simpara>Si un événement est dit <emphasis>bloquant</emphasis>, lors de
l'exécution des actions liées, si une des fonctions retourne <literal>false
</literal>, le processus s'arrêtera.</simpara></note>
</para>
<sect4 id="config-LSobject-ioFormat-triggers-config">
<title>Configuration</title>
<para>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 <emphasis>LSpeople</emphasis> avec son LSioFormat <emphasis>
mycsv</emphasis>, c'est à dire lors de leur évènement <literal>after_import</literal>, il faut
définir la variable suivante :
<programlisting linenumbering="unnumbered"><![CDATA[$GLOBALS['LSobjects']['LSpeople']['ioFormat']['mycsv']['after_import']]]></programlisting>
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 <ulink url='https://www.php.net/manual/fr/functions.anonymous.php'>fonctions anonymes</ulink>.
</para>
</sect4>
<sect4 id="config-LSobject-ioFormat-triggers-writing">
<title>Ecriture d'une fonction</title>
<para>Une fonction exécutée par un déclencheur d'un ioFormat se déclare de la
manière suivante :
<programlisting linenumbering="unnumbered"><![CDATA[
/*
* Ma fonction à exécuter lors de l'evenement [event]
*
* Paramètres :
* - $ioFormat : Le LSioFormat sur lequel l'évènement survient
* - $data : Les données de contexte de l'évènement
*
* Valeurs retournées :
* - True : Tout s'est bien passé
* - False : Une erreur est survenue ou la fonction souhaite bloquer le
* processus lors d'un évènement bloquant.
*/
function maFonction (&$ioFormat, &$data) {
// Actions
}
]]></programlisting>
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
<literal>True</literal> si tout s'est bien passé ou <literal>False</literal> en cas de problème.
Dans le cas d'un événement bloquant, si la fonction retourne <literal>False</literal>, le processus
est arrêté.</para>
<para>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 :
<programlisting linenumbering="unnumbered"><![CDATA[array(
'input_file' => "[/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", [...]),
[...]
),
),
),
[...]
),
),
)]]></programlisting>
<note><simpara>Les clés <literal>objectsData</literal> et <literal>return</literal> 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.</simpara></note>
</para>
</sect4>
</sect3>
</sect2>

View file

@ -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',

View file

@ -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')

View file

@ -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.<type>.ioFormat.<name>)
@ -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 "<LSioFormat ".$this -> name." on ".$this -> LSobject.">";
}
}
LSerror :: defineError('LSioFormat_01',

View file

@ -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 <brenard@easter-eggs.com>\n"
"Language-Team: LdapSaisie <ldapsaisie-users@lists.labs.libre-entreprise."
"org>\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}.<pre>\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 "

View file

@ -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}.<pre>\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 ""