Compare commits

...

3 commits

Author SHA1 Message Date
Benjamin Renard
fea76e7af2
lsexample: make restore_lsexample compatible with OpenLDAP 2.5 (and Debian Bookworm) 2023-07-19 12:45:24 +02:00
Benjamin Renard
6ff53b412e
ioFormat: add update_only mode 2023-07-19 12:25:14 +02:00
Benjamin Renard
a4319237f2
Fix PHP8 compatibility 2023-07-19 10:26:28 +02:00
10 changed files with 406 additions and 258 deletions

View file

@ -10,7 +10,8 @@ Cette variable est un tableau associatif dont la clé est l'identifiant du forma
dont la valeur associée est la configuration du format.
<important><para>Le moteur d'importation simule la validation d'un formulaire de
création du type d'&LSobject;. En conséquence :
création du type d'&LSobject; (ou de modification en cas d'activation du mode mise à jour
uniquement, voir ci-dessous). En conséquence :
<itemizedlist>
<listitem><simpara>seul les attributs présent dans le formulaire de création peuvent
être importés.</simpara></listitem>
@ -31,6 +32,7 @@ création du type d'&LSobject;. En conséquence :
'label' => '[Label du type de fichier]',
'driver' => '[Pilote d'ioFormat utilisé]',
'driver_options' => array([Options du pilote d'ioFormat utilisé]),
'update_only' => '[Booléen]',
'fields => array (
'[champ 1]' => '[attribut 1]',
'[champ 2]' => '[attribut 2]',
@ -79,11 +81,28 @@ création du type d'&LSobject;. En conséquence :
</listitem>
</varlistentry>
<varlistentry>
<term>update_only</term>
<listitem>
<simpara>Booléen permetant d'activer le mode mise à jour uniquement pour ce format. Dans ce
mode, les données de l'objet LDAP correspondant seront chargées depuis l'annuaire avant toutes
validations des données fournies dans le fichier d'import, et ce, dans un formulaire de
modifications et non pas un formulaire de création autrement. Pour que cela soit possible, il
est indispensable que le DN de l'objet puisse être déduit depuis les données fournies dans le
fichier d'import. Pour cela, vous pouvez le fournir via un champ du fichier d'import associé
à la clé <literal>dn</literal> ou à défaut il sera généré à partir du RDN dont la valeur devra
être fournie dans le fichier d'import. Vous pouvez également le générer via le paramètre
<literal>generated_fields</literal> (voir ci-dessous).</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>fields</term>
<listitem>
<simpara>Tableau associatif permettant d'associer un champ du fichier source (la clé)
avec attribut de l'objet LDAP (la valeur).</simpara>
avec attribut de l'objet LDAP (la valeur). Il est également possible d'associé un champ
avec la valeur <literal>dn</literal> pour fournir le DN de l'objet en mode mise à jour
uniquement (voir ci-dessus).</simpara>
</listitem>
</varlistentry>
@ -92,7 +111,8 @@ création du type d'&LSobject;. En conséquence :
<listitem>
<simpara>Tableau associatif permettant de définir soit des &LSformats;, soit un
<emphasis>callable</emphasis> (au sens PHP) pour générer les valeurs d'attributs automatiquement.
Ce tableau contient en clé, le nom de l'attribut à générer, et en valeur associée, un ou plusieurs
Ce tableau contient en clé, le nom de l'attribut à générer (ou <literal>dn</literal> pour la
génération du DN de l'objet en mode mise à jour uniquement), et en valeur associée, un ou plusieurs
&LSformat; ou un <emphasis>callable</emphasis> à utiliser pour générer ses valeurs. En cas de
&LSformat;, ils seront composés à l'aide des valeurs des autres attributs de l'objet. En cas d'un
<emphasis>callable</emphasis>, il sera appeler avec en paramètre le tableau des valeurs des autres

View file

@ -68,11 +68,14 @@ $SYS_SCHEMA_DIR/core.ldif
$SYS_SCHEMA_DIR/cosine.ldif
$SYS_SCHEMA_DIR/nis.ldif
$SYS_SCHEMA_DIR/inetorgperson.ldif
$SYS_SCHEMA_DIR/ppolicy.ldif
$SYS_SCHEMA_DIR/dyngroup.ldif
$SAMBA_SCHEMA_LDIF
$LS_SCHEMA_LDIF
"
# Extranet ppolicy schema removed in OpenLDAP 2.5, make its installation optional
[ -f "$SYS_SCHEMA_DIR/ppolicy.ldif" ] && SCHEMA_FILES="$SCHEMA_FILES $SYS_SCHEMA_DIR/ppolicy.ldif"
for file in $SCHEMA_FILES
do
[ $VERBOSE -eq 1 ] && echo "Install $( basename $file) schema..."

View file

@ -133,6 +133,19 @@ $GLOBALS['LSobjects']['LSpeople'] = array (
'samba_password_cas_change' => 'sambaPwdCanChange',
),
),
'enable_disable_shell' => array (
'label' => 'Enable/disable commands shell',
'update_only' => true,
'driver' => 'CSV',
'driver_options' => array (
'delimiter' => ';',
'enclosure' => '"',
),
'fields' => array (
'login' => 'uid',
'shell' => 'loginShell',
),
),
),
'display_name_format' => '%{cn}',

View file

@ -363,10 +363,10 @@ class LSattr_ldap_password extends LSattr_ldap {
*/
public static function getSalt($length=8) {
$pattern = "1234567890abcdefghijklmnopqrstuvwxyz";
$key = $pattern{rand(0,35)};
$key = $pattern[rand(0,35)];
for($i=1;$i<$length;$i++)
{
$key .= $pattern{rand(0,35)};
$key .= $pattern[rand(0,35)];
}
return $key;
}

View file

@ -216,6 +216,16 @@ class LSio extends LSlog_staticLoggerClass {
return $return;
}
// Check update_only vs updateIfExists
if ($ioFormat -> update_only) {
self :: log_debug("import(): enable update only mode");
if (!$updateIfExists) {
self :: log_debug("import(): update only mode and updateIfExists not checked, stop");
LSerror :: addErrorCode('LSio_11');
return $return;
}
}
// Load data in LSioFormat object
if (!$ioFormat -> loadFile($input_file)) {
LSerror :: addErrorCode('LSio_05');
@ -331,8 +341,46 @@ class LSio extends LSlog_staticLoggerClass {
$globalErrors = array();
// Instanciate an LSobject
$object = new $LSobject();
// Instanciate a creation LSform (in API mode)
$form = $object -> getForm('create', null, true);
// Load object data on update_only mode
if ($ioFormat -> update_only) {
// Retrieve/compute object DN
$dn = null;
if (array_key_exists('dn', $objData)) {
$dn = $objData['dn']?$objData['dn'][0]:null;
// Remove field in object data
unset($objData['dn']);
if ($dn)
self :: log_debug("import(): Object DN provided ($dn)");
else
$globalErrors[] = _('Object DN is empty in provided data.');
}
// DN not provided, compute it
if (!$dn) {
$rdn_attr = $object->rdn_attr;
if (!$rdn_attr || !array_key_exists($rdn_attr, $objData) || !$objData[$rdn_attr]) {
self :: log_debug('import(): Failed to compute object DN from provided data (no RDN value): '.print_r($objData,True));
$globalErrors[] = _('Failed to compute object DN from provided data (no RDN value).');
}
else {
$dn = sprintf("%s=%s,%s", $rdn_attr, $objData[$rdn_attr][0], $object -> getContainerDn());
self :: log_debug("import(): Computed object DN is '$dn'");
}
}
// Load object data from DN
if ($dn && !$object -> loadData($dn)) {
self :: log_debug('import(): Failed to load data of '.$dn);
$globalErrors[] = getFData(
_("Failed to load existing object %{dn} from LDAP server. Can't update object."),
$dn
);
}
}
if (!$globalErrors) {
// Instanciate a creation/modification LSform (based on update_only mode and force API mode)
$form_id = $ioFormat -> update_only ? 'modify' : 'create';
$form = $object -> getForm($form_id, null, true);
// Set form data from inputed data
if (!$form -> setPostData($objData, true)) {
self :: log_debug('import(): Failed to setPostData on: '.print_r($objData,True));
@ -345,7 +393,7 @@ class LSio extends LSlog_staticLoggerClass {
$globalErrors[] = _('Error validating creation form.');
}
// Validate data (just check mode)
else if (!$object -> updateData('create', True)) {
else if (!$object -> updateData($form_id, True)) {
self :: log_debug('import(): fail to validate object data: '.varDump($objData));
$globalErrors[] = _('Failed to validate object data.');
}
@ -358,7 +406,7 @@ class LSio extends LSlog_staticLoggerClass {
}
else {
// Check if object already exists
if (!LSldap :: exists($dn)) {
if (!$ioFormat -> update_only && !LSldap :: exists($dn)) {
// Creation mode
self :: log_debug('import(): New object, perform creation');
if ($justTry || $object -> updateData('create')) {
@ -387,6 +435,8 @@ class LSio extends LSlog_staticLoggerClass {
// Restart import in update mode
// Instanciate a new LSobject and load data from it's DN
// Note: expected in update_only mode, it's already done.
if (!$ioFormat -> update_only) {
$object = new $LSobject();
if (!$object -> loadData($dn)) {
self :: log_debug('import(): Failed to load data of '.$dn);
@ -394,7 +444,9 @@ class LSio extends LSlog_staticLoggerClass {
_("Failed to load existing object %{dn} from LDAP server. Can't update object."),
$dn);
}
else {
}
if (!$globalErrors) {
// Instanciate a modify form (in API mode)
$form = $object -> getForm('modify', null, true);
// Set form data from inputed data
@ -427,16 +479,21 @@ class LSio extends LSlog_staticLoggerClass {
}
}
}
}
$globalErrors = array_merge(LSerror :: getErrors(), $globalErrors);
$objectsInError[] = array(
'data' => $objData,
'errors' => array (
'globals' => $globalErrors,
'attrs' => $form->getErrors(),
'attrs' => isset($form)?$form->getErrors():array(),
),
'messages' => $_SESSION['LSsession_infos'],
);
$_SESSION['LSsession_infos'] = array();
// Clean iteration objects
unset($object);
if (isset($form)) unset($form);
}
$return['errors'] = $objectsInError;
$return['success'] = empty($objectsInError);
@ -856,6 +913,9 @@ ___("LSio: An error occured running after import hooks.")
LSerror :: defineError('LSio_10',
___("LSio: Error occured loading objects's data from input file.")
);
LSerror :: defineError('LSio_11',
___("LSio: This input/output format only support update. You must check the 'Update objects if exists' box.")
);
// Defined CLI commands functions only on CLI context
if (php_sapi_name() != 'cli')

View file

@ -25,6 +25,7 @@ LSsession :: loadLSclass('LSlog_staticLoggerClass');
/**
* Manage IOformat of LSldapObject import/export
*
* @property-read bool $update_only
* @author Benjamin Renard <brenard@easter-eggs.com>
*/
class LSioFormat extends LSlog_staticLoggerClass {
@ -85,6 +86,22 @@ class LSioFormat extends LSlog_staticLoggerClass {
}
}
/**
* Access to infos of the ioFormat
*
* @param string $key The name of the value
*
* @return mixed The value
**/
public function __get($key) {
switch($key) {
case 'update_only':
return $this -> getConfig('update_only', false, 'bool');
}
// Unknown key, log warning
self :: log_warning("__get($key): invalid property requested\n".LSlog :: get_debug_backtrace_context());
}
/**
* Check if ioFormat driver is ready
*
@ -162,10 +179,14 @@ class LSioFormat extends LSlog_staticLoggerClass {
// Add attributes to export and put their values to data to export
foreach($fields as $key => $attr_name) {
$objects_data[$dn][$key] = null;
if (!isset($object -> attrs[$attr_name])) {
if ($attr_name == 'dn') {
$objects_data[$dn][$key] = $dn;
}
else if (!isset($object -> attrs[$attr_name])) {
self :: log_warning("exportObjects($object): attribute '$attr_name' does not exist !");
continue;
}
else {
$object -> attrs[$attr_name] -> addToExport($export);
if (!isset($export -> elements[$attr_name])) {
// @phpstan-ignore-next-line
@ -175,6 +196,7 @@ class LSioFormat extends LSlog_staticLoggerClass {
$objects_data[$dn][$key] = $export -> elements[$attr_name] -> getApiValue(false);
}
}
}
self :: log_trace('exportObjects(): objects data = '.varDump($objects_data));
return $this -> driver -> exportObjectsData($objects_data, $stream);
}

View file

@ -30,6 +30,7 @@ LSsession :: loadLSclass('LSattribute');
*
* @property-read string $subDnValue
* @property-read string $subDnName
* @property-read string $rdn_attr
* @property-read string $rdn
* @property-read string $type
* @author Benjamin Renard <brenard@easter-eggs.com>
@ -2003,13 +2004,15 @@ class LSldapObject extends LSlog_staticLoggerClass {
$this -> cache['subDnName'] = self :: getSubDnName($this -> dn);
return $this -> cache['subDnName'];
}
elseif ($key=='rdn') {
elseif ($key=='rdn_attr') {
$rdn_attr = $this -> getConfig('rdn');
if ($rdn_attr && isset($this -> attrs[ $rdn_attr ])) {
return $this -> attrs[ $rdn_attr ] -> getValue();
}
if ($rdn_attr && isset($this -> attrs[ $rdn_attr ]))
return $rdn_attr;
return false;
}
elseif ($key=='rdn') {
return $this -> rdn_attr?$this -> attrs[ $this -> rdn_attr ] -> getValue():false;
}
elseif ($key=='type') {
return $this -> getType();
}

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-07-03 12:30+0200\n"
"PO-Revision-Date: 2023-07-19 12:07+0200\n"
"Last-Translator: Benjamin Renard <brenard@easter-eggs.com>\n"
"Language-Team: LdapSaisie <ldapsaisie-users@lists.labs.libre-entreprise."
"org>\n"
@ -633,10 +633,6 @@ msgstr ""
"MAILDIR : Erreur durant la récupération du chemin distant du dossier des "
"mails."
#: includes/addons/LSaddons.watermark.php:78
msgid "PRE-PRODUCTION"
msgstr "PRÉ-PRODUCTION"
#: includes/addons/LSaddons.showTechInfo.php:63
#: templates/default/showTechInfo.tpl:16
msgid "Structural object class"
@ -752,101 +748,119 @@ 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:339
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:356
msgid "Object DN is empty in provided data."
msgstr "Le DN de l'object est vide dans les données fournies."
#: includes/class/class.LSio.php:345
msgid "Error validating creation form."
msgstr "Une erreur est survenue en validant le formulaire de création."
#: includes/class/class.LSio.php:350
msgid "Failed to validate object data."
msgstr "Impossible de valider les données de l'objet."
#: includes/class/class.LSio.php:357
msgid "Failed to generate DN for this object."
msgstr "Impossible de générer le DN de cet objet."
#: includes/class/class.LSio.php:376
msgid "Error creating object on LDAP server."
#: includes/class/class.LSio.php:363
msgid "Failed to compute object DN from provided data (no RDN value)."
msgstr ""
"Une erreur est survenue durant la création de cet objet dans l'annuaire LDAP."
"Impossible de générer le DN de l'objet depuis les données fournies (pas de "
"valeur pour le RDN)."
#: includes/class/class.LSio.php:382
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:394
#: includes/class/class.LSio.php:374 includes/class/class.LSio.php:444
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:403
#: includes/class/class.LSio.php:387
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:393
msgid "Error validating creation form."
msgstr "Une erreur est survenue en validant le formulaire de création."
#: includes/class/class.LSio.php:398
msgid "Failed to validate object data."
msgstr "Impossible de valider les données de l'objet."
#: includes/class/class.LSio.php:405
msgid "Failed to generate DN for this object."
msgstr "Impossible de générer le DN de cet objet."
#: includes/class/class.LSio.php:424
msgid "Error creating object on LDAP server."
msgstr ""
"Une erreur est survenue durant la création de cet objet dans l'annuaire LDAP."
#: includes/class/class.LSio.php:430
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:455
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:409
#: includes/class/class.LSio.php:461
msgid "Error validating update form."
msgstr "Une erreur est survenue en validant le formulaire de mise à jour."
#: includes/class/class.LSio.php:424
#: includes/class/class.LSio.php:476
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:830
#: includes/class/class.LSio.php:883
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:833
#: includes/class/class.LSio.php:886
msgid "LSio: object type invalid."
msgstr "LSio : type d'objet invalide."
#: includes/class/class.LSio.php:836
#: includes/class/class.LSio.php:889
msgid "LSio: input/output format %{format} invalid."
msgstr "LSio : Le format d'entrée/sortie %{format} est invalide."
#: includes/class/class.LSio.php:839
#: includes/class/class.LSio.php:892
msgid "LSio: Fail to initialize input/output driver."
msgstr "LSio : Impossible d'initialiser le pilote d'entrée/sortie."
#: includes/class/class.LSio.php:842
#: includes/class/class.LSio.php:895
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:845
#: includes/class/class.LSio.php:898
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:848
#: includes/class/class.LSio.php:901
msgid "LSio: Fail to export objects's data."
msgstr "LSio: Impossible d'exporter les données des objets."
#: includes/class/class.LSio.php:851
#: includes/class/class.LSio.php:904
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:854
#: includes/class/class.LSio.php:907
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.LSio.php:857
#: includes/class/class.LSio.php:910
msgid "LSio: Error occured loading objects's data from input file."
msgstr ""
"LSio: Une erreur est survenue en chargeant les données des objets depuis le "
"fichier d'import."
#: includes/class/class.LSio.php:913
msgid ""
"LSio: This input/output format only support update. You must check the "
"'Update objects if exists' box."
msgstr ""
"LSio : Ce format d'import/export ne supporte que les mises à jour. Vous "
"devez cocher la case \"Mise à jour des objets existants\"."
#: includes/class/class.LSformElement_supannRessourceEtatDate.php:61
msgid "Start date"
msgstr "Date de début"
@ -1738,25 +1752,25 @@ msgstr ""
msgid "Invalid file type (%{type})."
msgstr "Type de fichier invalide (%{type})."
#: includes/class/class.LSldapObject.php:584
#: includes/class/class.LSldapObject.php:585
msgid "The attribute %{attr} is not valid."
msgstr "L'attribut %{attr} n'est pas valide."
#: includes/class/class.LSldapObject.php:3157
#: includes/class/class.LSldapObject.php:3160
msgid "LSldapObject : Object type unknown."
msgstr "LSldapObject : Type d'objet inconnu."
#: includes/class/class.LSldapObject.php:3160
#: includes/class/class.LSldapObject.php:3163
msgid "LSldapObject : Update form is not defined for the object %{obj}."
msgstr ""
"LSldapObject : Le formulaire de mise à jour n'est pas défini pour l'objet "
"%{obj}."
#: includes/class/class.LSldapObject.php:3163
#: includes/class/class.LSldapObject.php:3166
msgid "LSldapObject : No form exists for the object %{obj}."
msgstr "LSldapObject : Aucun formulaire n'existe pour l'objet %{obj}"
#: includes/class/class.LSldapObject.php:3166
#: includes/class/class.LSldapObject.php:3169
msgid ""
"LSldapObject : The function %{func} to validate the attribute %{attr} the "
"object %{obj} is unknow."
@ -1764,7 +1778,7 @@ msgstr ""
"LSldapObject : La fonction %{func} pour valider l'attribut %{attr} de "
"l'objet %{obj} est inconnue."
#: includes/class/class.LSldapObject.php:3169
#: includes/class/class.LSldapObject.php:3172
msgid ""
"LSldapObject : Configuration data are missing to validate the attribute "
"%{attr} of the object %{obj}."
@ -1772,7 +1786,7 @@ msgstr ""
"LSldapObject : Des données de configurations sont manquantes pour pouvoir "
"valider l'attribut %{attr} de l'objet %{obj}."
#: includes/class/class.LSldapObject.php:3173
#: includes/class/class.LSldapObject.php:3176
msgid ""
"LSldapObject : The function %{func} to be executed on the object event "
"%{event} doesn't exist."
@ -1780,14 +1794,14 @@ msgstr ""
"LSldapObject : La fonction %{func} devant être exécutée lors de l'évènement "
"%{event} de l'objet n'existe pas."
#: includes/class/class.LSldapObject.php:3176
#: includes/class/class.LSldapObject.php:3179
msgid ""
"LSldapObject : The %{func} execution on the object event %{event} failed."
msgstr ""
"LSldapObject : L'exécution de la fonction %{func} lors de l'évènement "
"%{event} de l'objet a échouée."
#: includes/class/class.LSldapObject.php:3180
#: includes/class/class.LSldapObject.php:3183
msgid ""
"LSldapObject : Class %{class}, which method %{meth} to be executed on the "
"object event %{event}, doesn't exist."
@ -1795,7 +1809,7 @@ msgstr ""
"La classe %{class}, contenant la méthode %{meth} devant être exécutée lors "
"de l'évènement %{event} de l'objet, n'existe pas."
#: includes/class/class.LSldapObject.php:3183
#: includes/class/class.LSldapObject.php:3186
msgid ""
"LSldapObject : Method %{meth} within %{class} class to be executed on object "
"event %{event}, doesn't exist."
@ -1803,7 +1817,7 @@ msgstr ""
"LSldapObject : La méthode %{meth} de la classe %{class} devant être exécutée "
"lors de l'évènement %{event} de l'objet n'existe pas."
#: includes/class/class.LSldapObject.php:3186
#: includes/class/class.LSldapObject.php:3189
msgid ""
"LSldapObject : Error during execute %{meth} method within %{class} class, to "
"be executed on object event %{event}."
@ -1811,7 +1825,7 @@ msgstr ""
"LSldapObject : Erreur durant l'exécution de la méthode %{meth} de la classe "
"%{class} devant être exécutée lors de l'évènement %{event} de l'objet."
#: includes/class/class.LSldapObject.php:3190
#: includes/class/class.LSldapObject.php:3193
msgid ""
"LSldapObject : Some configuration data of the object type %{obj} are missing "
"to generate the DN of the new object."
@ -1819,7 +1833,7 @@ msgstr ""
"LSldapObject : Des informations de configuration du type d'objet %{obj} sont "
"manquantes pour la génération du DN du nouvel objet."
#: includes/class/class.LSldapObject.php:3193
#: includes/class/class.LSldapObject.php:3196
msgid ""
"LSldapObject : The attibute %{attr} of the object is not yet defined. Can't "
"generate DN."
@ -1827,11 +1841,11 @@ msgstr ""
"LSldapObject : L'attribut %{attr} de l'objet n'est pas encore défini. "
"Impossible de générer le DN."
#: includes/class/class.LSldapObject.php:3196
#: includes/class/class.LSldapObject.php:3199
msgid "LSldapObject : Without DN, the object could not be changed."
msgstr "LSldapObject : Sans DN, l'objet ne peut pas être modifié."
#: includes/class/class.LSldapObject.php:3199
#: includes/class/class.LSldapObject.php:3202
msgid ""
"LSldapObject : The attribute %{attr_depend} depending on the attribute "
"%{attr} doesn't exist."
@ -1839,39 +1853,39 @@ msgstr ""
"LSldapObject : L'attritbut %{attr_depend} dépendant de l'attribut %{attr} "
"n'existe pas."
#: includes/class/class.LSldapObject.php:3202
#: includes/class/class.LSldapObject.php:3205
msgid "LSldapObject : Error during deleting the object %{objectname}."
msgstr "LSldapObject : Erreur durant la suppression de l'objet %{objectname}"
#: includes/class/class.LSldapObject.php:3206
#: includes/class/class.LSldapObject.php:3209
msgid ""
"LSldapObject : Error during actions to be executed before renaming the objet."
msgstr ""
"LSldapObject : Erreur durant les actions devant être exécutée avant de "
"renommer l'objet."
#: includes/class/class.LSldapObject.php:3209
#: includes/class/class.LSldapObject.php:3212
msgid ""
"LSldapObject : Error during actions to be executed after renaming the objet."
msgstr ""
"LSldapObject : Erreur durant les actions devant être exécutée après avoir "
"renommé l'objet."
#: includes/class/class.LSldapObject.php:3213
#: includes/class/class.LSldapObject.php:3216
msgid ""
"LSldapObject : Error during actions to be executed before deleting the objet."
msgstr ""
"LSldapObject : Erreur durant les actions devant être exécutée avant de "
"supprimer l'objet."
#: includes/class/class.LSldapObject.php:3216
#: includes/class/class.LSldapObject.php:3219
msgid ""
"LSldapObject : Error during actions to be executed after deleting the objet."
msgstr ""
"LSldapObject : Erreur durant les actions devant être exécutée après avoir "
"supprimé l'objet."
#: includes/class/class.LSldapObject.php:3220
#: includes/class/class.LSldapObject.php:3223
msgid ""
"LSldapObject : Error during the actions to be executed before creating the "
"object."
@ -1879,7 +1893,7 @@ msgstr ""
"LSldapObject : Erreur durant les actions devant être exécutée avant de créer "
"l'objet."
#: includes/class/class.LSldapObject.php:3223
#: includes/class/class.LSldapObject.php:3226
msgid ""
"LSldapObject : Error during the actions to be executed after creating the "
"object. It was created anyway."
@ -1887,7 +1901,7 @@ msgstr ""
"LSldapObject : Erreur durant les actions devant être exécutées après la "
"création de l'objet. Il a tout de même été créé."
#: includes/class/class.LSldapObject.php:3227
#: includes/class/class.LSldapObject.php:3230
msgid ""
"LSldapObject : The function %{func} to be executed before creating the "
"object doesn't exist."
@ -1895,7 +1909,7 @@ msgstr ""
"LSldapObject : La fonction %{func} devant être exécutée avant la création de "
"l'objet n'existe pas."
#: includes/class/class.LSldapObject.php:3230
#: includes/class/class.LSldapObject.php:3233
msgid ""
"LSldapObject : Error executing the function %{func} to be execute after "
"deleting the object."
@ -1903,7 +1917,7 @@ msgstr ""
"LSldapObject : Erreur durant l'exécution de la fonction %{func} devant être "
"exécutée après la suppression de l'objet."
#: includes/class/class.LSldapObject.php:3233
#: includes/class/class.LSldapObject.php:3236
msgid ""
"LSldapObject : The function %{func} to be executed after deleting the object "
"doesn't exist."
@ -1911,7 +1925,7 @@ msgstr ""
"LSldapObject : La fonction %{func} devant être exécutée après la suppression "
"de l'objet n'existe pas."
#: includes/class/class.LSldapObject.php:3236
#: includes/class/class.LSldapObject.php:3239
msgid ""
"LSldapObject : Error executing the function %{func} to be execute after "
"creating the object."
@ -1919,7 +1933,7 @@ msgstr ""
"LSldapObject : Erreur durant l'exécution de la fonction %{func} devant être "
"exécutée après la création de l'objet."
#: includes/class/class.LSldapObject.php:3240
#: includes/class/class.LSldapObject.php:3243
msgid ""
"LSldapObject : %{func} function, to be executed on object event %{event}, "
"doesn't exist."
@ -1927,7 +1941,7 @@ msgstr ""
"LSldapObject : La fonction %{func}, devant être exécutée lors de l'évènement "
"%{event} de l'objet, n'existe pas."
#: includes/class/class.LSldapObject.php:3243
#: includes/class/class.LSldapObject.php:3246
msgid ""
"LSldapObject : Error during the execution of %{func} function on object "
"event %{event}."
@ -1935,7 +1949,7 @@ msgstr ""
"LSldapObject : Erreur durant l'exécution de la fonction %{func} lors de "
"l'évènement %{event} de l'objet."
#: includes/class/class.LSldapObject.php:3247
#: includes/class/class.LSldapObject.php:3250
msgid ""
"LSldapObject : %{meth} method, to be executed on object event %{event}, "
"doesn't exist."
@ -1943,7 +1957,7 @@ msgstr ""
"LSldapObject : La méthode %{meth}, devant être exécutée lors de l'évènement "
"%{event} de l'objet, n'existe pas."
#: includes/class/class.LSldapObject.php:3250
#: includes/class/class.LSldapObject.php:3253
msgid ""
"LSldapObject : Error during execution of %{meth} method on object event "
"%{event}."
@ -1951,13 +1965,13 @@ msgstr ""
"LSldapObject : Erreur durant l'exécution de la méthode %{meth} lors de "
"l'évènement %{event} de l'objet."
#: includes/class/class.LSldapObject.php:3253
#: includes/class/class.LSldapObject.php:3256
msgid "LSldapObject : Error during generate LDAP filter for %{LSobject}."
msgstr ""
"LSldapObject : Erreur durant la génération du filtre LDAP de l'objet "
"%{LSobject}."
#: includes/class/class.LSldapObject.php:3257
#: includes/class/class.LSldapObject.php:3260
msgid ""
"LSldapObject : Error during execution of the custom action %{customAction} "
"on %{objectname}."
@ -1965,22 +1979,22 @@ msgstr ""
"LSldapObject : Erreur durant l'exécution de l'action personnalisée "
"%{customAction} sur l'objet %{objectname}."
#: includes/class/class.LSldapObject.php:3261
#: includes/class/class.LSldapObject.php:3264
msgid "LSldapObject : Fail to retrieve container DN."
msgstr "LSldapObject : Impossible de récupérer le DN parent."
#: includes/class/class.LSldapObject.php:3264
#: includes/class/class.LSldapObject.php:3267
msgid ""
"LSldapObject : The function %{func} to generate container DN is not callable."
msgstr ""
"LSldapObject : La fonction %{func} pour générer le DN parent n'est pas "
"exécutable."
#: includes/class/class.LSldapObject.php:3267
#: includes/class/class.LSldapObject.php:3270
msgid "LSldapObject : Error during generating container DN : %{error}"
msgstr "LSldapObject : Erreur durant la génération du DN parent : %{error}."
#: includes/class/class.LSldapObject.php:3270
#: includes/class/class.LSldapObject.php:3273
msgid ""
"LSldapObject : An LDAP object with the same DN as generated for this new one "
"already exists. Please verify your configuration."
@ -1988,7 +2002,7 @@ msgstr ""
"LSldapObject : Un objet LDAP avec le même DN que celui généré pour ce nouvel "
"objet existe déjà. Merci de vérifier votre configuration."
#: includes/class/class.LSldapObject.php:3275
#: includes/class/class.LSldapObject.php:3278
msgid ""
"LSrelation : Some parameters are missing in the call of methods to handle "
"standard relations (Method : %{meth})."
@ -3203,7 +3217,7 @@ msgstr ""
"LSsearchEntry : formaterFunction %{func} invalide utilisé pour "
"l'extraDisplayedColumns %{column}."
#: includes/class/class.LSioFormat.php:224
#: includes/class/class.LSioFormat.php:246
msgid "LSioFormat : IOformat driver %{driver} invalid or unavailable."
msgstr ""
"LSioFormat : Le pilote d'IOformat %{driver} est invalide ou n'est pas "
@ -3744,3 +3758,6 @@ msgstr "événement(s) trouvé(s) pour cet objet."
#: templates/default/import.tpl:27 templates/default/import.tpl:33
msgid "no"
msgstr "non"
#~ msgid "PRE-PRODUCTION"
#~ msgstr "PRÉ-PRODUCTION"

View file

@ -527,10 +527,6 @@ msgstr ""
msgid "MAILDIR : Error retrieving remote path of the maildir."
msgstr ""
#: includes/addons/LSaddons.watermark.php:78
msgid "PRE-PRODUCTION"
msgstr ""
#: includes/addons/LSaddons.showTechInfo.php:63
#: templates/default/showTechInfo.tpl:16
msgid "Structural object class"
@ -638,87 +634,101 @@ msgstr ""
msgid "LSformRule_%{type}: Parameter %{param} is not found."
msgstr ""
#: includes/class/class.LSio.php:339
msgid "Failed to set post data on creation form."
#: includes/class/class.LSio.php:356
msgid "Object DN is empty in provided data."
msgstr ""
#: includes/class/class.LSio.php:345
msgid "Error validating creation form."
#: includes/class/class.LSio.php:363
msgid "Failed to compute object DN from provided data (no RDN value)."
msgstr ""
#: includes/class/class.LSio.php:350
msgid "Failed to validate object data."
msgstr ""
#: includes/class/class.LSio.php:357
msgid "Failed to generate DN for this object."
msgstr ""
#: includes/class/class.LSio.php:376
msgid "Error creating object on LDAP server."
msgstr ""
#: includes/class/class.LSio.php:382
msgid "An object already exist on LDAP server with DN %{dn}."
msgstr ""
#: includes/class/class.LSio.php:394
#: includes/class/class.LSio.php:374 includes/class/class.LSio.php:444
msgid ""
"Failed to load existing object %{dn} from LDAP server. Can't update object."
msgstr ""
#: includes/class/class.LSio.php:403
msgid "Failed to set post data on update form."
#: includes/class/class.LSio.php:387
msgid "Failed to set post data on creation form."
msgstr ""
#: includes/class/class.LSio.php:409
msgid "Error validating update form."
#: includes/class/class.LSio.php:393
msgid "Error validating creation form."
msgstr ""
#: includes/class/class.LSio.php:398
msgid "Failed to validate object data."
msgstr ""
#: includes/class/class.LSio.php:405
msgid "Failed to generate DN for this object."
msgstr ""
#: includes/class/class.LSio.php:424
msgid "Error creating object on LDAP server."
msgstr ""
#: includes/class/class.LSio.php:430
msgid "An object already exist on LDAP server with DN %{dn}."
msgstr ""
#: includes/class/class.LSio.php:455
msgid "Failed to set post data on update form."
msgstr ""
#: includes/class/class.LSio.php:461
msgid "Error validating update form."
msgstr ""
#: includes/class/class.LSio.php:476
msgid "Error updating object on LDAP server."
msgstr ""
#: includes/class/class.LSio.php:830
#: includes/class/class.LSio.php:883
msgid "LSio: Post data not found or not completed."
msgstr ""
#: includes/class/class.LSio.php:833
#: includes/class/class.LSio.php:886
msgid "LSio: object type invalid."
msgstr ""
#: includes/class/class.LSio.php:836
#: includes/class/class.LSio.php:889
msgid "LSio: input/output format %{format} invalid."
msgstr ""
#: includes/class/class.LSio.php:839
#: includes/class/class.LSio.php:892
msgid "LSio: Fail to initialize input/output driver."
msgstr ""
#: includes/class/class.LSio.php:842
#: includes/class/class.LSio.php:895
msgid "LSio: Fail to load objects's data from input file."
msgstr ""
#: includes/class/class.LSio.php:845
#: includes/class/class.LSio.php:898
msgid "LSio: Fail to load objects's data to export from LDAP directory."
msgstr ""
#: includes/class/class.LSio.php:848
#: includes/class/class.LSio.php:901
msgid "LSio: Fail to export objects's data."
msgstr ""
#: includes/class/class.LSio.php:851
#: includes/class/class.LSio.php:904
msgid "LSio: An error occured running before import hooks. Stop the import."
msgstr ""
#: includes/class/class.LSio.php:854
#: includes/class/class.LSio.php:907
msgid "LSio: An error occured running after import hooks."
msgstr ""
#: includes/class/class.LSio.php:857
#: includes/class/class.LSio.php:910
msgid "LSio: Error occured loading objects's data from input file."
msgstr ""
#: includes/class/class.LSio.php:913
msgid ""
"LSio: This input/output format only support update. You must check the "
"'Update objects if exists' box."
msgstr ""
#: includes/class/class.LSformElement_supannRessourceEtatDate.php:61
msgid "Start date"
msgstr ""
@ -1474,199 +1484,199 @@ msgstr ""
msgid "Invalid file type (%{type})."
msgstr ""
#: includes/class/class.LSldapObject.php:584
#: includes/class/class.LSldapObject.php:585
msgid "The attribute %{attr} is not valid."
msgstr ""
#: includes/class/class.LSldapObject.php:3157
#: includes/class/class.LSldapObject.php:3160
msgid "LSldapObject : Object type unknown."
msgstr ""
#: includes/class/class.LSldapObject.php:3160
#: includes/class/class.LSldapObject.php:3163
msgid "LSldapObject : Update form is not defined for the object %{obj}."
msgstr ""
#: includes/class/class.LSldapObject.php:3163
#: includes/class/class.LSldapObject.php:3166
msgid "LSldapObject : No form exists for the object %{obj}."
msgstr ""
#: includes/class/class.LSldapObject.php:3166
#: includes/class/class.LSldapObject.php:3169
msgid ""
"LSldapObject : The function %{func} to validate the attribute %{attr} the "
"object %{obj} is unknow."
msgstr ""
#: includes/class/class.LSldapObject.php:3169
#: includes/class/class.LSldapObject.php:3172
msgid ""
"LSldapObject : Configuration data are missing to validate the attribute "
"%{attr} of the object %{obj}."
msgstr ""
#: includes/class/class.LSldapObject.php:3173
#: includes/class/class.LSldapObject.php:3176
msgid ""
"LSldapObject : The function %{func} to be executed on the object event "
"%{event} doesn't exist."
msgstr ""
#: includes/class/class.LSldapObject.php:3176
#: includes/class/class.LSldapObject.php:3179
msgid ""
"LSldapObject : The %{func} execution on the object event %{event} failed."
msgstr ""
#: includes/class/class.LSldapObject.php:3180
#: includes/class/class.LSldapObject.php:3183
msgid ""
"LSldapObject : Class %{class}, which method %{meth} to be executed on the "
"object event %{event}, doesn't exist."
msgstr ""
#: includes/class/class.LSldapObject.php:3183
#: includes/class/class.LSldapObject.php:3186
msgid ""
"LSldapObject : Method %{meth} within %{class} class to be executed on object "
"event %{event}, doesn't exist."
msgstr ""
#: includes/class/class.LSldapObject.php:3186
#: includes/class/class.LSldapObject.php:3189
msgid ""
"LSldapObject : Error during execute %{meth} method within %{class} class, to "
"be executed on object event %{event}."
msgstr ""
#: includes/class/class.LSldapObject.php:3190
#: includes/class/class.LSldapObject.php:3193
msgid ""
"LSldapObject : Some configuration data of the object type %{obj} are missing "
"to generate the DN of the new object."
msgstr ""
#: includes/class/class.LSldapObject.php:3193
#: includes/class/class.LSldapObject.php:3196
msgid ""
"LSldapObject : The attibute %{attr} of the object is not yet defined. Can't "
"generate DN."
msgstr ""
#: includes/class/class.LSldapObject.php:3196
#: includes/class/class.LSldapObject.php:3199
msgid "LSldapObject : Without DN, the object could not be changed."
msgstr ""
#: includes/class/class.LSldapObject.php:3199
#: includes/class/class.LSldapObject.php:3202
msgid ""
"LSldapObject : The attribute %{attr_depend} depending on the attribute "
"%{attr} doesn't exist."
msgstr ""
#: includes/class/class.LSldapObject.php:3202
#: includes/class/class.LSldapObject.php:3205
msgid "LSldapObject : Error during deleting the object %{objectname}."
msgstr ""
#: includes/class/class.LSldapObject.php:3206
msgid ""
"LSldapObject : Error during actions to be executed before renaming the objet."
msgstr ""
#: includes/class/class.LSldapObject.php:3209
msgid ""
"LSldapObject : Error during actions to be executed after renaming the objet."
"LSldapObject : Error during actions to be executed before renaming the objet."
msgstr ""
#: includes/class/class.LSldapObject.php:3213
#: includes/class/class.LSldapObject.php:3212
msgid ""
"LSldapObject : Error during actions to be executed before deleting the objet."
"LSldapObject : Error during actions to be executed after renaming the objet."
msgstr ""
#: includes/class/class.LSldapObject.php:3216
msgid ""
"LSldapObject : Error during actions to be executed before deleting the objet."
msgstr ""
#: includes/class/class.LSldapObject.php:3219
msgid ""
"LSldapObject : Error during actions to be executed after deleting the objet."
msgstr ""
#: includes/class/class.LSldapObject.php:3220
#: includes/class/class.LSldapObject.php:3223
msgid ""
"LSldapObject : Error during the actions to be executed before creating the "
"object."
msgstr ""
#: includes/class/class.LSldapObject.php:3223
#: includes/class/class.LSldapObject.php:3226
msgid ""
"LSldapObject : Error during the actions to be executed after creating the "
"object. It was created anyway."
msgstr ""
#: includes/class/class.LSldapObject.php:3227
#: includes/class/class.LSldapObject.php:3230
msgid ""
"LSldapObject : The function %{func} to be executed before creating the "
"object doesn't exist."
msgstr ""
#: includes/class/class.LSldapObject.php:3230
#: includes/class/class.LSldapObject.php:3233
msgid ""
"LSldapObject : Error executing the function %{func} to be execute after "
"deleting the object."
msgstr ""
#: includes/class/class.LSldapObject.php:3233
#: includes/class/class.LSldapObject.php:3236
msgid ""
"LSldapObject : The function %{func} to be executed after deleting the object "
"doesn't exist."
msgstr ""
#: includes/class/class.LSldapObject.php:3236
#: includes/class/class.LSldapObject.php:3239
msgid ""
"LSldapObject : Error executing the function %{func} to be execute after "
"creating the object."
msgstr ""
#: includes/class/class.LSldapObject.php:3240
#: includes/class/class.LSldapObject.php:3243
msgid ""
"LSldapObject : %{func} function, to be executed on object event %{event}, "
"doesn't exist."
msgstr ""
#: includes/class/class.LSldapObject.php:3243
#: includes/class/class.LSldapObject.php:3246
msgid ""
"LSldapObject : Error during the execution of %{func} function on object "
"event %{event}."
msgstr ""
#: includes/class/class.LSldapObject.php:3247
#: includes/class/class.LSldapObject.php:3250
msgid ""
"LSldapObject : %{meth} method, to be executed on object event %{event}, "
"doesn't exist."
msgstr ""
#: includes/class/class.LSldapObject.php:3250
#: includes/class/class.LSldapObject.php:3253
msgid ""
"LSldapObject : Error during execution of %{meth} method on object event "
"%{event}."
msgstr ""
#: includes/class/class.LSldapObject.php:3253
#: includes/class/class.LSldapObject.php:3256
msgid "LSldapObject : Error during generate LDAP filter for %{LSobject}."
msgstr ""
#: includes/class/class.LSldapObject.php:3257
#: includes/class/class.LSldapObject.php:3260
msgid ""
"LSldapObject : Error during execution of the custom action %{customAction} "
"on %{objectname}."
msgstr ""
#: includes/class/class.LSldapObject.php:3261
#: includes/class/class.LSldapObject.php:3264
msgid "LSldapObject : Fail to retrieve container DN."
msgstr ""
#: includes/class/class.LSldapObject.php:3264
#: includes/class/class.LSldapObject.php:3267
msgid ""
"LSldapObject : The function %{func} to generate container DN is not callable."
msgstr ""
#: includes/class/class.LSldapObject.php:3267
#: includes/class/class.LSldapObject.php:3270
msgid "LSldapObject : Error during generating container DN : %{error}"
msgstr ""
#: includes/class/class.LSldapObject.php:3270
#: includes/class/class.LSldapObject.php:3273
msgid ""
"LSldapObject : An LDAP object with the same DN as generated for this new one "
"already exists. Please verify your configuration."
msgstr ""
#: includes/class/class.LSldapObject.php:3275
#: includes/class/class.LSldapObject.php:3278
msgid ""
"LSrelation : Some parameters are missing in the call of methods to handle "
"standard relations (Method : %{meth})."
@ -2724,7 +2734,7 @@ msgid ""
"%{column}."
msgstr ""
#: includes/class/class.LSioFormat.php:224
#: includes/class/class.LSioFormat.php:246
msgid "LSioFormat : IOformat driver %{driver} invalid or unavailable."
msgstr ""