Add export feature using existing LSioFormats

This commit is contained in:
Benjamin Renard 2021-02-05 11:42:55 +01:00
parent 7ecfa33afc
commit 5f4798a5a1
15 changed files with 769 additions and 264 deletions

2
debian/control vendored
View file

@ -6,7 +6,7 @@ Maintainer: Benjamin Renard <brenard@easter-eggs.com>
Package: ldapsaisie
Architecture: all
Depends: apache2 | httpd, php-ldap | php5-ldap, php-fpm | libapache2-mod-php5 | libapache2-mod-php | php5-cli | php-cli, smarty | smarty3, php-net-ldap2, php-net-ftp, php-mail, php-mail-mime, php-file-csv-datasource, php-console-table
Depends: apache2 | httpd, php-ldap | php5-ldap, php-fpm | libapache2-mod-php5 | libapache2-mod-php | php5-cli | php-cli, smarty | smarty3, php-net-ldap2, php-net-ftp, php-mail, php-mail-mime, php-console-table
Recommends: php-mbstring, php-phpseclib
Description: web based interface for managing LDAP servers content
LdapSaisie is a Web application developed to manage LDAP directory.

View file

@ -103,18 +103,23 @@ création du type d'&LSobject;. En conséquence :
<sect4 id="config-LSobject-ioFormat-drivers-CSV">
<title>Pilote de fichiers CSV</title>
<para>Ce pilote permet de gérer l'import/export de &LSobject; à partir d'un fichier
<literal>CSV</literal>. Ce pilote utilise la classe PEAR <application>
<literal>CSV</literal>. Depuis la version 4 d'LdapSaisie, ce pilote utilise les
fonctions standards <literal>fgetcsv()</literal> et <literal>fputcsv</literal>
fournis par PHP. Avant cela, la classe PEAR <application>
<ulink url='http://pear.php.net/package/File_CSV_DataSource'>File_CSV_DataSource
</ulink></application>. Par défaut, les paramètres de lecture et d'écriture des
fichiers sont : la virgule sert de délimiteur, le caractère <literal>"</literal> peut
être utilisé pour encadrer les valeurs des champs et la longueur maximale d'une ligne
est 999999. Ces paramètres peuvent être modifiés en configurant les options du pilote.
</ulink></application> était utilisée. Par défaut, les paramètres de lecture et
d'écriture des fichiers sont : la virgule sert de délimiteur, le caractère
<literal>"</literal> peut être utilisé pour encadrer les valeurs des champs et la
longueur maximale d'une ligne est infini. Ces paramètres peuvent être modifiés en
configurant les options du pilote.
<programlisting>
<citetitle>Structure</citetitle>
<![CDATA[$GLOBALS['LSobjects']['[nom du type d'LSobject]']['ioFormat']['[ID ioFormat]']['driver_options'] = array (
'delimiter' => '[délimiteur]',
'enclosure' => '[caractère d'encadrement de texte]',
'length' => [longueur maximale d'une ligne],
'escape' => '[caratère d'encadrement]'
'escape' => '[caractère d'échappement]',
'multiple_value_delimiter' => '[délimiteur]',
);]]>
</programlisting>
@ -132,20 +137,40 @@ création du type d'&LSobject;. En conséquence :
<term>length</term>
<listitem>
<simpara>La longueur maximale d'une ligne du fichier. Si zéro est spécifié, la longueur d'une
ligne ne sera pas limité, mais la lecture du fichier sera ralenti. (Par défaut : <literal>999999
ligne ne sera pas limité, mais la lecture du fichier sera ralentie. (Par défaut : <literal>0
</literal>)
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>escape</term>
<term>enclosure</term>
<listitem>
<simpara>Le caractère utilisé pour encadrer les valeurs des champs
(Par défaut : <literal>"</literal>).</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term>escape</term>
<listitem>
<simpara>Le caractère d'échappement utilisé si un des champs d'une ligne de fichier contient le
caractère utilisé pour encadrer les valeurs. (Par défaut : <literal>\</literal>).</simpara>
<note><simpara>Selon la RFC4180, l'echappement du caractère utilisé pour encadrer les valeurs des
champs doit se faire en le doublant. Le caractère défini ici est une alternative à ce comportement
par défaut. Pour désactiver ce caractère d'échappement alternatif, il est possible depuis de la
version 7.4.0 de PHP de mettre ici une chaine vide.</simpara></note>
</listitem>
</varlistentry>
<varlistentry>
<term>multiple_value_delimiter</term>
<listitem>
<simpara>Le caractère utilisé pour délimiter au sein d'un champs, les valeurs valeurs multiples d'un
attribut (Par défaut : <literal>|</literal>).</simpara>
</listitem>
</varlistentry>
</variablelist>
</para>

View file

@ -65,9 +65,7 @@ $GLOBALS['LSobjects']['LSpeople'] = array (
'driver' => 'CSV',
'driver_options' => array (
'delimiter' => ';',
'escape' => '"',
'eol' => ';',
'length' => 2,
'enclosure' => '"',
),
'fields' => array (
'login' => 'uid',
@ -83,6 +81,43 @@ $GLOBALS['LSobjects']['LSpeople'] = array (
'cn' => '%{personalTitle} %{givenName} %{sn}',
),
),
'myfullcsv' => array (
'label' => 'Complete CSV',
'driver' => 'CSV',
'fields' => array (
'login' => 'uid',
'civility' => 'personalTitle',
'firstname' => 'givenName',
'lastname' => 'sn',
'fullname' => 'cn',
'mail' => 'mail',
'password' => 'userPassword',
'description' => 'description',
'accountables' => 'lsGodfatherDn',
'posix_uidnumber' => 'uidNumber',
'posix_gidnumber' => 'gidNumber',
'posix_shell' => 'loginShell',
'posix_home' => 'homeDirectory',
'posix_gecos' => 'gecos',
'password_expiration' => 'shadowExpire',
'password_max_age' => 'shadowMax',
'password_max_inactive' => 'shadowInactive',
'password_last_change' => 'shadowLastChange',
'samba_sid' => 'sambaSID',
'samba_primary_group_sid' => 'sambaPrimaryGroupSID',
'samba_account_flags' => 'sambaAcctFlags',
'samba_home_drive' => 'sambaHomeDrive',
'samba_home_path' => 'sambaHomePath',
'samba_profile_paht' => 'sambaProfilePath',
'samba_logon_script' => 'sambaLogonScript',
'samba_last_login' => 'sambaLogonTime',
'samba_last_logoff' => 'sambaLogoffTime',
'samba_expiration' => 'sambaKickoffTime',
'samba_password_last_change' => 'sambaPwdLastSet',
'samba_password_must_change' => 'sambaPwdMustChange',
'samba_password_cas_change' => 'sambaPwdCanChange',
),
),
),
'before_modify' => 'valid',

Binary file not shown.

After

Width:  |  Height:  |  Size: 581 B

View file

@ -220,66 +220,46 @@ class LSattribute extends LSlog_staticLoggerClass {
* @retval boolean true si l'ajout a fonctionner ou qu'il n'est pas nécessaire, false sinon
*/
public function addToForm(&$form,$idForm,&$obj=NULL,$value=NULL) {
if($this -> getConfig("form.$idForm")) {
if (!$this -> html) {
LSerror :: addErrorCode('LSattribute_09',array('type' => 'html','name' => $this -> name));
return;
}
if($this -> myRights() == 'n') {
return true;
}
if (!is_null($value)) {
$data = $value;
}
else if(!is_empty($this -> data)) {
$data = $this -> getFormVal();
}
else if (!is_empty($this -> getConfig('default_value'))) {
$data = $obj -> getFData($this -> getConfig('default_value'));
}
else {
$data = NULL;
}
$form_mode = $this -> getConfig("form.$idForm", false);
self :: log_debug("$this -> addToForm($idForm): mode = ".varDump($form_mode));
if($form_mode === false) {
self :: log_debug("Attribute ".$this -> name." not in form $idForm.");
return True;
}
$element = $this -> html -> addToForm($form,$idForm,$data);
if(!$element) {
LSerror :: addErrorCode('LSform_06',$this -> name);
}
$element = $this -> _addToForm($form, $idForm, $obj, $value);
if(!$element)
return false;
if($this -> getConfig('required')) {
$form -> setRequired($this -> name);
}
if($this -> getConfig('required', false, 'bool'))
$form -> setRequired($this -> name);
if ( ($this -> getConfig("form.$idForm")==0) || ($this -> myRights() == 'r') ) {
self :: log_debug("Attribute ".$this -> name." is freeze in form $idForm.");
$element -> freeze();
}
else {
$check_data = $this -> getConfig('check_data', array());
if(is_array($check_data)) {
foreach ($check_data as $rule => $rule_infos) {
if((!$form -> isRuleRegistered($rule))&&($rule!='')) {
LSerror :: addErrorCode('LSattribute_03',array('attr' => $this->name,'rule' => $rule));
return;
}
if(!isset($rule_infos['msg'])) {
$rule_infos['msg']=getFData(_('The value of field %{label} is invalid.'),$this -> getLabel());
}
else {
$rule_infos['msg']=__($rule_infos['msg']);
}
if(!isset($rule_infos['params']))
$rule_infos['params']=NULL;
$form -> addRule($this -> name,$rule,array('msg' => $rule_infos['msg'], 'params' => $rule_infos['params']));
}
}
else {
LSerror :: addErrorCode('LSattribute_04',$this->name);
}
}
if ( ($form_mode == 0) || ($this -> myRights() == 'r') ) {
self :: log_debug("Attribute ".$this -> name." is freeze in form $idForm.");
$element -> freeze();
}
else {
self :: log_debug("Attribute ".$this -> name." not in form $idForm.");
$check_data = $this -> getConfig('check_data', array());
if(is_array($check_data)) {
foreach ($check_data as $rule => $rule_infos) {
if((!$form -> isRuleRegistered($rule))&&($rule!='')) {
LSerror :: addErrorCode('LSattribute_03',array('attr' => $this->name,'rule' => $rule));
return;
}
if(!isset($rule_infos['msg'])) {
$rule_infos['msg']=getFData(_('The value of field %{label} is invalid.'),$this -> getLabel());
}
else {
$rule_infos['msg']=__($rule_infos['msg']);
}
if(!isset($rule_infos['params']))
$rule_infos['params']=NULL;
$form -> addRule($this -> name,$rule,array('msg' => $rule_infos['msg'], 'params' => $rule_infos['params']));
}
}
else {
LSerror :: addErrorCode('LSattribute_04', $this->name);
}
}
return true;
}
@ -319,37 +299,75 @@ class LSattribute extends LSlog_staticLoggerClass {
}
/**
* Ajoute l'attribut au formualaire de vue
*
* Cette méthode ajoute l'attribut au formulaire $form de vue si il doit l'être
* Add attribute to LSview
*
* @author Benjamin Renard <brenard@easter-eggs.com>
*
* @param[in] object $form Le formulaire dans lequel doit être ajouté l'attribut
* @param[in] $form LSform The LSform object
*
* @retval boolean true si l'ajout a fonctionner ou qu'il n'est pas nécessaire, false sinon
* @retval boolean True on succes, False otherwise
*/
public function addToView(&$form) {
if ($this -> getConfig('view', false, 'bool') && ($this -> myRights() != 'n') ) {
if (!$this -> html) {
LSerror :: addErrorCode('LSattribute_09',array('type' => 'html','name' => $this -> name));
return;
}
if(!is_empty($this -> data)) {
$data = $this -> getFormVal();
}
else {
$data=null;
}
$element = $this -> html -> addToForm($form,'view',$data);
if(!$element instanceof LSformElement) {
LSerror :: addErrorCode('LSform_06',$this -> name);
return;
}
if (!$this -> getConfig('view', false, 'bool') || ($this -> myRights() == 'n') )
return true;
$element = $this -> _addToForm($form, 'view');
if ($element) {
$element -> freeze();
return true;
}
return true;
return false;
}
/**
* Add attribute to export
*
* @author Benjamin Renard <brenard@easter-eggs.com>
*
* @param[in] $form LSform The LSform object
*
* @retval boolean True on succes, False otherwise
*/
public function addToExport(&$form) {
if ($this -> myRights() == 'n')
return False;
$element = $this -> _addToForm($form, 'export');
if ($element) {
$element -> freeze();
return True;
}
return False;
}
/**
* Add attribute to a LSform for export
*
* @author Benjamin Renard <brenard@easter-eggs.com>
*
* @param[in] object $form The LSform object
*
* @retval LSformElement|False LSformElement object on succes, False otherwise
*/
private function _addToForm(&$form, $idForm, &$obj=NULL, $data=NULL) {
if (!$this -> html) {
LSerror :: addErrorCode('LSattribute_09',array('type' => 'html','name' => $this -> name));
return;
}
if (is_null($data)) {
if(!is_empty($this -> data)) {
$data = $this -> getFormVal();
}
else if ($obj && !is_empty($this -> getConfig('default_value'))) {
$data = $obj -> getFData($this -> getConfig('default_value'));
}
}
$element = $this -> html -> addToForm($form, $idForm, $data);
if(!$element instanceof LSformElement) {
LSerror :: addErrorCode('LSform_06',$this -> name);
return;
}
return $element;
}
/**

View file

@ -0,0 +1,103 @@
<?php
/*******************************************************************************
* Copyright (C) 2007 Easter-eggs
* http://ldapsaisie.labs.libre-entreprise.org
*
* Author: See AUTHORS file in top-level directory.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version 2
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
******************************************************************************/
LSsession :: loadLSclass('LSlog_staticLoggerClass');
LSsession::loadLSclass('LSioFormat');
/**
* Manage export LSldapObject
*
* @author Benjamin Renard <brenard@easter-eggs.com>
*/
class LSexport extends LSlog_staticLoggerClass {
/**
* Export objects
*
* @param[in] $LSobject LSldapObject An instance of the object type
* @param[in] $ioFormat string The LSioFormat name
*
* @author Benjamin Renard <brenard@easter-eggs.com>
*
* @retval boolean True on success, False otherwise
*/
public static function export($object, $ioFormat) {
// Load LSobject
if (is_string($object)) {
if (!LSsession::loadLSobject($object, true)) { // Load with warning
return false;
}
$object = new $object();
}
// Validate ioFormat
if(!$object -> isValidIOformat($ioFormat)) {
LSerror :: addErrorCode('LSexport_01', $ioFormat);
return false;
}
// Create LSioFormat object
$ioFormat = new LSioFormat($object -> type, $ioFormat);
if (!$ioFormat -> ready()) {
LSerror :: addErrorCode('LSexport_02');
return false;
}
// Load LSsearch class (with warning)
if (!LSsession :: loadLSclass('LSsearch', null, true)) {
return false;
}
// Search objects
$search = new LSsearch($object -> type, 'LSexport');
$search -> run();
// Retreive objets
$objects = $search -> listObjects();
if (!is_array($objects)) {
LSerror :: addErrorCode('LSexport_03');
return false;
}
self :: log_debug(count($objects)." object(s) found to export");
// Export objects using LSioFormat object
if (!$ioFormat -> exportObjects($objects)) {
LSerror :: addErrorCode('LSexport_04');
return false;
}
self :: log_debug("export(): objects exported");
return true;
}
}
LSerror :: defineError('LSexport_01',
___("LSexport: input/output format %{format} invalid.")
);
LSerror :: defineError('LSexport_02',
___("LSexport: Fail to initialize input/output driver.")
);
LSerror :: defineError('LSexport_03',
___("LSexport: Fail to load objects's data to export from LDAP directory.")
);
LSerror :: defineError('LSexport_04',
___("LSexport: Fail to export objects's data.")
);

View file

@ -324,17 +324,17 @@ LStemplate :: registerFunction('LSimport_implodeValues','LSimport_implodeValues'
LSerror :: defineError('LSimport_01',
___("LSimport : Post data not found or not completed.")
___("LSimport: Post data not found or not completed.")
);
LSerror :: defineError('LSimport_02',
___("LSimport : object type invalid.")
___("LSimport: object type invalid.")
);
LSerror :: defineError('LSimport_03',
___("LSimport : input/output format %{format} invalid.")
___("LSimport: input/output format %{format} invalid.")
);
LSerror :: defineError('LSimport_04',
___("LSimport : Fail to initialize input/output driver")
___("LSimport: Fail to initialize input/output driver.")
);
LSerror :: defineError('LSimport_05',
___("LSimport : Fail to load objects's data from input file")
___("LSimport: Fail to load objects's data from input file.")
);

View file

@ -20,15 +20,17 @@
******************************************************************************/
LSsession :: loadLSclass('LSlog_staticLoggerClass');
/**
* Manage IOformat of LSldapObject import/export
*
* @author Benjamin Renard <brenard@easter-eggs.com>
*/
class LSioFormat {
class LSioFormat extends LSlog_staticLoggerClass {
var $config=False;
var $driver=False;
var $config = false;
var $driver = False;
/**
* Constructor
@ -39,17 +41,17 @@ class LSioFormat {
* @retval void
**/
public function __construct($LSobject, $ioFormat) {
$conf=LSconfig::get('LSobjects.'.$LSobject.".ioFormat.".$ioFormat);
$conf = LSconfig::get('LSobjects.'.$LSobject.".ioFormat.".$ioFormat);
if(is_array($conf)) {
$this -> config=$conf;
if (isset($this -> config['driver']) && LSsession :: loadLSclass('LSioFormat'.$this -> config['driver'])) {
$driverClass='LSioFormat'.$this -> config['driver'];
$driverOptions=array();
if (isset($this -> config['driver_options'])) $driverOptions = $this -> config['driver_options'];
$this -> config = $conf;
$driver = $this -> getConfig('driver');
if ($driver && LSsession :: loadLSclass('LSioFormat'.$driver)) {
$driverClass = "LSioFormat".$driver;
$driverOptions = $this -> getConfig('driver_options', array(), 'array');
$this -> driver = new $driverClass($driverOptions);
}
else {
LSerror :: addErrorCode('LSioFormat_01',$this -> config['driver']);
LSerror :: addErrorCode('LSioFormat_01', $driver);
}
}
}
@ -63,6 +65,19 @@ class LSioFormat {
return (is_array($this -> config) && $this -> driver !== False);
}
/**
* Return a configuration parameter (or default value)
*
* @param[] $param The configuration parameter
* @param[] $default The default value (default : null)
* @param[] $cast Cast resulting value in specific type (default : disabled)
*
* @retval mixed The configuration parameter value or default value if not set
**/
public function getConfig($param, $default=null, $cast=null) {
return LSconfig :: get($param, $default, $cast, (is_array($this -> config)?$this -> config:array()));
}
/**
* Load and valid file
*
@ -83,7 +98,44 @@ class LSioFormat {
* @retval array The objects contained by the loaded file
**/
public function getAll() {
return $this -> driver -> getAllFormated($this -> config['fields'],$this -> config['generated_fields']);
return $this -> driver -> getAllFormated(
$this -> getConfig('fields', array(), 'array'),
$this -> getConfig('generated_fields', array(), 'array')
);
}
/**
* Export objects
*
* @param $objects array of LSldapObject The objects to export
*
* @return boolean True on succes, False otherwise
*/
public function exportObjects(&$objects) {
self :: log_trace('exportObjects(): start');
$fields = $this -> getConfig('fields');
if (!$fields) {
self :: log_error('exportObjects(): No field configured !');
return false;
}
if (!LSsession :: loadLSclass('LSform', null, true))
return false;
$objects_data = array();
foreach($objects as $object) {
$objects_data[$object -> getDn()] = array();
// Build a LSform object
$export = new LSform($object, 'export');
// Add attributes to export and put their values to data to export
foreach($fields as $key => $attr_name) {
$object -> attrs[$attr_name] -> addToExport($export);
$objects_data[$object -> getDn()][$key] = $export -> elements[$attr_name] -> getApiValue();
}
}
self :: log_trace('exportObjects(): objects data = '.varDump($objects_data));
return $this -> driver -> exportObjectsData($objects_data);
}
}

View file

@ -30,8 +30,40 @@ LSsession :: loadLSclass('LSioFormatDriver');
*/
class LSioFormatCSV extends LSioFormatDriver {
// File_CSV_DataSource object
private $csv=false;
private $delimiter = null;
private $enclosure = null;
private $escape = null;
private $length = null;
private $rows = null;
private $headers = null;
/**
* Constructor
*
* @param[in] array $options Driver's options
*
* @retval void
**/
public function __construct($options) {
parent :: __construct($options);
// As recommend in PHP doc, we enable this ini parameter to allow detection of
// Macintosh line-ending convention.
ini_set("auto_detect_line_endings", true);
// Set CSV input/output parameters
$this -> delimiter = $this -> getOption('delimiter', ",", "string");
$this -> enclosure = $this -> getOption('enclosure', '"', "string");
$this -> escape = $this -> getOption('escape', "\\", "string");
$this -> length = $this -> getOption('length', 0, "int");
$this -> multiple_value_delimiter = $this -> getOption('multiple_value_delimiter', '|', "string");
self :: log_debug(
'New LSioFormatCSV objet started with delimiter="'.$this -> delimiter.'", '.
'enclosure = <'.$this -> enclosure.'>, escape = "'.$this -> escape.'", '.
'length = '.$this -> length.' and multiple value delimiter = "'.
$this -> multiple_value_delimiter.'"'
);
}
/**
* Load file
@ -41,17 +73,29 @@ class LSioFormatCSV extends LSioFormatDriver {
* @retval boolean True if file is loaded, false otherwise
**/
public function loadFile($path) {
$this->csv=new File_CSV_DataSource;
if (is_array($this -> options)) {
foreach ($this -> options as $opt_key => $opt_val) {
if (isset($this->csv -> settings[$opt_key]))
$this->csv -> settings[$opt_key] = $opt_val;
}
self :: log_debug("loadFile($path)");
$fd = fopen($path, 'r');
if ($fd === false) {
self :: log_error("Fail to open file '$path'.");
return false;
}
if ($this->csv->load($path)) {
return True;
$this -> rows = array();
while (
(
$row = fgetcsv(
$fd, $this -> length, $this -> delimiter,
$this -> enclosure, $this -> escape
)
) !== FALSE) {
$this -> rows[] = $row;
}
return false;
if (!$this -> rows)
return false;
$this -> headers = array_shift($this -> rows);
self :: log_trace("loadFile($path): headers = ".varDump($this -> headers));
self :: log_debug("loadFile($path): ".count($this -> rows)." row(s) loaded.");
return true;
}
/**
@ -60,10 +104,26 @@ class LSioFormatCSV extends LSioFormatDriver {
* @retval boolean True if loaded file data are valid, false otherwise
**/
public function isValid() {
if ($this -> csv && $this -> csv -> isSymmetric()) {
return True;
if (!is_array($this -> rows) && empty($this -> rows)) {
self :: log_error("No data loaded from input file");
return false;
}
return False;
if (!$this -> headers) {
self :: log_error("Header line seem empty");
return false;
}
for($i = 0; $i < count($this -> rows); $i++) {
if (count($this -> rows[$i]) != count($this -> headers)) {
self :: log_error(
"Input row #$i contain ".count($this -> rows[$i])." field(s) when ".
"headers has ".count($this -> headers)
);
return false;
}
}
self :: log_debug("isValid(): all ".count($this -> rows)." row(s) are symetric.");
return True;
}
/**
@ -87,7 +147,17 @@ class LSioFormatCSV extends LSioFormatDriver {
* @retval array The objects contained by the loaded file
**/
public function getAll() {
return $this -> csv -> connect();
$objects = array();
foreach($this -> rows as $row) {
$object = array();
foreach ($this -> headers as $idx => $key) {
$values = explode($this -> multiple_value_delimiter, $row[$idx]);
$object[$key] = (count($values) == 1?$values[0]:$values);
}
$objects[] = $object;
}
self :: log_trace("getAll(): objects = ".varDump($objects));
return $objects;
}
/**
@ -104,7 +174,67 @@ class LSioFormatCSV extends LSioFormatDriver {
* @retval array The fields names of the loaded file
**/
public function getFieldNames() {
return $this -> csv -> getHeaders();
return $this -> headers;
}
/**
* Export objects data
*
* @param[in] $stream The stream where objects's data have to be exported
* @param[in] $objects_data Array of objects data to export
*
* @return boolean True on succes, False otherwise
*/
public function exportObjectsData($objects_data) {
if (!function_exists('fputcsv')) {
LSerror :: addErrorCode('LSioFormatCSV_01');
return false;
}
$first = true;
$stream = fopen('php://temp/maxmemory:'. (5*1024*1024), 'w+');
foreach($objects_data as $dn => $object_data) {
if ($first) {
$this -> writeRow($stream, array_keys($object_data));
$first = false;
}
$row = array();
foreach($object_data as $values)
$row[] = (is_array($values)?implode($this -> multiple_value_delimiter, $values):$values);
$this -> writeRow($stream, $row);
}
header("Content-disposition: attachment; filename=export.csv");
header("Content-type: text/csv");
rewind($stream);
print stream_get_contents($stream);
@fclose($stream);
exit();
}
/**
* Write CSV row to stream
*
* @param[in] $stream The CSV file description reference
* @param[in] $row An array of a CSV row fields to write
*
* @author Benjamin Renard <brenard@easter-eggs.com>
*
* @retval boolean True if CSV row is successfully writed, false in other case
*/
private function writeRow($stream, $row) {
// Escape character could only be specified since php 5.5.4
if (!defined('PHP_VERSION_ID') or PHP_VERSION_ID < 50504) {
$result = fputcsv($stream, $row, $this -> delimiter, $this -> enclosure);
}
else {
$result = fputcsv($stream, $row, $this -> delimiter, $this -> enclosure, $this -> escape);
}
return ($result !== false);
}
}
LSerror :: defineError('LSioFormatCSV_01',
___("LSioFormatCSV: function fputcsv is not available.")
);

View file

@ -20,12 +20,14 @@
******************************************************************************/
LSsession :: loadLSclass('LSlog_staticLoggerClass');
/**
* Driver to manage ioFormat file of LSldapObject import/export
*
* @author Benjamin Renard <brenard@easter-eggs.com>
*/
class LSioFormatDriver {
class LSioFormatDriver extends LSlog_staticLoggerClass {
protected $options=array();
@ -137,4 +139,29 @@ class LSioFormatDriver {
return $retall;
}
/**
* Export objects data
*
* @param[in] $objects_data Array of objects data to export
*
* @return boolean True on succes, False otherwise
*/
public function exportObjectsData($objects_data) {
// Must be implement in real drivers
return False;
}
/**
* Return a option parameter (or default value)
*
* @param[] $param The option parameter
* @param[] $default The default value (default : null)
* @param[] $cast Cast resulting value in specific type (default : disabled)
*
* @retval mixed The option parameter value or default value if not set
**/
public function getOption($param, $default=null, $cast=null) {
return LSconfig :: get($param, $default, $cast, $this -> options);
}
}

View file

@ -456,6 +456,11 @@ function handle_LSobject_search($request) {
'url' => "object/$LSobject/import",
'action' => 'import'
);
$LSview_actions['export'] = array (
'label' => _('Export'),
'url' => "object/$LSobject/export",
'action' => 'export'
);
}
}
$LSview_actions['refresh'] = array (
@ -835,6 +840,45 @@ function handle_old_import_php($request) {
}
LSurl :: add_handler('#^import\.php#', 'handle_old_import_php', false);
/*
* Handle LSobject export request
*
* @param[in] $request LSurlRequest The request
*
* @retval void
**/
function handle_LSobject_export($request) {
$object = get_LSobject_from_request($request, true);
if (!$object)
return;
$ioFormats = array();
$result = null;
if ( LSsession :: loadLSclass('LSexport', null, true)) { // Load class with warning
$ioFormats = $object->listValidIOformats();
if (!is_array($ioFormats) || empty($ioFormats)) {
$ioFormats = array();
LSerror :: addErrorCode('LSsession_16');
}
else if (isset($_REQUEST['ioFormat'])) {
if (!LSexport::export($object, $_REQUEST['ioFormat']))
LSlog :: error("An error occurred exporting ".$object -> type);
}
}
// Define page title & template variables
LStemplate :: assign('pagetitle', _('Export').' : '.$object->getLabel());
LStemplate :: assign('LSobject', $object -> getType());
LStemplate :: assign('ioFormats', $ioFormats);
// Set & display template
LSsession :: setTemplate('export.tpl');
LStemplate :: addCssFile('LSform.css');
LSsession :: displayTemplate();
}
LSurl :: add_handler('#^object/(?P<LSobject>[^/]+)/export/?$#', 'handle_LSobject_export');
/*
* Handle LSobject create request
*

View file

@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: LdapSaisie\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2021-02-04 11:51+0100\n"
"PO-Revision-Date: 2021-02-05 10:32+0100\n"
"Last-Translator: Benjamin Renard <brenard@zionetrix.net>\n"
"Language-Team: LdapSaisie <ldapsaisie-users@lists.labs.libre-entreprise."
"org>\n"
@ -437,68 +437,68 @@ msgstr "LSformRule_%{type} : Le paramètre %{param} n'est pas défini."
msgid "LSformRule: Unknown rule type %{type}."
msgstr "LSformRule : Type de règle %{type} inconnu."
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSimport.php:203
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSimport.php:208
msgid "Failed to set post data on creation form."
msgstr "Impossible de définir les données dans le formulaire de création."
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSimport.php:209
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSimport.php:214
msgid "Error validating creation form."
msgstr "Une erreur est survenue en validant le formulaire de création."
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSimport.php:214
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSimport.php:219
msgid "Failed to validate object data."
msgstr "Impossible de valider les données de l'objet."
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSimport.php:221
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSimport.php:226
msgid "Failed to generate DN for this object."
msgstr "Impossible de générer le DN de cet objet."
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSimport.php:235
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSimport.php:240
msgid "Error creating object on LDAP server."
msgstr "Une erreur est survenue en création cet objet dans l'annuaire LDAP."
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSimport.php:241
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSimport.php:246
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}."
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSimport.php:252
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSimport.php:257
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."
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSimport.php:260
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSimport.php:265
msgid "Failed to set post data on update form."
msgstr "Impossible de définir les données dans le formulaire de mise à jours."
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSimport.php:266
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSimport.php:271
msgid "Error validating update form."
msgstr "Une erreur est survenue en validant le formulaire de mise à jour."
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSimport.php:276
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSimport.php:281
msgid "Error updating object on LDAP server."
msgstr ""
"Une erreur est survenue en mettant à jour cet objet dans l'annuaire LDAP."
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSimport.php:322
msgid "LSimport : Post data not found or not completed."
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSimport.php:327
msgid "LSimport: Post data not found or not completed."
msgstr "LSimport : les données transmises sont introuvables ou incomplètes."
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSimport.php:325
msgid "LSimport : object type invalid."
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSimport.php:330
msgid "LSimport: object type invalid."
msgstr "LSimport : type d'objet invalide."
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSimport.php:328
msgid "LSimport : input/output format %{format} invalid."
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSimport.php:333
msgid "LSimport: input/output format %{format} invalid."
msgstr "LSimport : Le format d'entrée/sortie %{format} est invalide."
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSimport.php:331
msgid "LSimport : Fail to initialize input/output driver"
msgstr "LSimport : Impossible d'initialiser le pilote d'entrée/sortie"
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSimport.php:336
msgid "LSimport: Fail to initialize input/output driver."
msgstr "LSimport : Impossible d'initialiser le pilote d'entrée/sortie."
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSimport.php:334
msgid "LSimport : Fail to load objects's data from input file"
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSimport.php:339
msgid "LSimport: Fail to load objects's data from input file."
msgstr ""
"LSimport: Impossible de charger les données des objets depuis le fichier "
"d'import."
@ -518,9 +518,9 @@ msgstr "Confirmez-vous votre choix ?"
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSconfirmBox.php:37
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsmoothbox.php:39
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSform.php:74
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:618
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1240
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1382
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:623
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1279
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1421
#: templates/default/recoverpassword.tpl:21
msgid "Validate"
msgstr "Valider"
@ -665,10 +665,10 @@ msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSformElement_select_object.php:68
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSformElement_supannLabeledValue.php:62
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearchEntry.php:174
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1000
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1168
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1253
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1395
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1039
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1207
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1292
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1434
msgid "Modify"
msgstr "Modifier"
@ -846,6 +846,24 @@ msgstr ""
"LSattr_html_select_objet : l'objet sélectionné %{name} n'a pas de valeur "
"dans son attribut %{attr}, vous ne pouvez pas le sélectionner."
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSexport.php:93
msgid "LSexport: input/output format %{format} invalid."
msgstr "LSimport : Le format d'entrée/sortie %{format} est invalide."
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSexport.php:96
msgid "LSexport: Fail to initialize input/output driver."
msgstr "LSexport : Impossible d'initialiser le pilote d'entrée/sortie."
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSexport.php:99
msgid "LSexport: Fail to load objects's data to export from LDAP directory."
msgstr ""
"LSexport: Impossible de charger les données des objets à exporter depuis "
"l'annuaire LDAP."
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSexport.php:102
msgid "LSexport: Fail to export objects's data."
msgstr "LSexport: Impossible d'exporter les données des objets."
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSformRule_differentPassword.php:90
msgid ""
"LSformRule_differentPassword : Other password attribute is not configured."
@ -884,11 +902,11 @@ msgstr ""
"LSformRule_differentPassword : Les autres attributs mots de passe doivent "
"utiliser LSattr_ldap :: password. Ce n'est pas le cas de l'attribut %{attr}."
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:266
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:250
msgid "The value of field %{label} is invalid."
msgstr "La valeur du champ %{label} est incorrecte."
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:720
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:738
msgid ""
"LSattribute : Attribute %{attr} : LDAP or HTML types unknow (LDAP = %{ldap} "
"& HTML = %{html})."
@ -896,7 +914,7 @@ msgstr ""
"LSattribute : Attribut %{attr} : Les types LDAP ou HTML sont inconnus (LDAP "
"= %{ldap} & HTML = %{html})."
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:723
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:741
msgid ""
"LSattribute : The function %{func} to display the attribute %{attr} is "
"unknow."
@ -904,14 +922,14 @@ msgstr ""
"LSattribute : La fonction %{func} pour afficher l'attribut %{attr} est "
"inconnue."
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:726
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:744
msgid ""
"LSattribute : The rule %{rule} to validate the attribute %{attr} is unknow."
msgstr ""
"LSattribute : La règle %{rule} de validation de l'attribut %{attr} n'existe "
"pas."
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:729
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:747
msgid ""
"LSattribute : Configuration data to verify the attribute %{attr} are "
"incorrect."
@ -919,22 +937,22 @@ msgstr ""
"LSattribute : Les données de configuration pour vérifier l'attribut %{attr} "
"sont incorrecte."
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:732
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:750
msgid ""
"LSattribute : The function %{func} to save the attribute %{attr} is unknow."
msgstr ""
"LSattribute : La fonction %{func} pour sauvegarder l'attribut %{attr} est "
"inconnue."
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:735
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:753
msgid "LSattribute : The value of the attribute %{attr} can't be generated."
msgstr "LSattribute : La valeur de l'attribut %{attr} ne peut être générée."
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:738
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:756
msgid "LSattribute : Generation of the attribute %{attr} failed."
msgstr "LSattribute : La génération de l'attribut %{attr} a échouée."
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:741
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:759
msgid ""
"LSattribute : Generation of the attribute %{attr} did not return a correct "
"value."
@ -942,7 +960,7 @@ msgstr ""
"LSattribute : La génération de l'attribut %{attr} n'a pas retournée de "
"valeur correcte."
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:744
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:762
msgid ""
"LSattribute : The attr_%{type} of the attribute %{name} is not yet defined."
msgstr ""
@ -1005,7 +1023,7 @@ msgstr "Votre nouveau mot de passe vous a été envoyé à l'adresse %{mail}."
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:1640
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:156
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:462
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:467
#: templates/default/select.tpl:29
msgid "Refresh"
msgstr "Rafraîchir"
@ -1509,8 +1527,8 @@ msgstr "Attention"
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSformElement_select_object.php:69
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSformElement_select_object.php:85
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearchEntry.php:190
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1016
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1160
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1055
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1199
msgid "Delete"
msgstr "Supprimer"
@ -1521,7 +1539,7 @@ msgstr "Aucun objet."
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSrelation.php:712
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:449
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:945
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:984
msgid "New"
msgstr "Nouveau"
@ -1719,14 +1737,14 @@ msgid "Delete this field."
msgstr "Supprimer cette valeur."
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSform.php:229
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:614
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:619
msgid "Do you really want to execute custom action %{title} on this search ?"
msgstr ""
"Êtes-vous vraiment sûre de vouloir exécuter l'action personnalisée %{title} "
"sur cette recherche ?"
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSform.php:235
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1376
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1415
msgid ""
"Do you really want to execute custom action %{customAction} on "
"%{objectname} ?"
@ -1875,8 +1893,8 @@ msgid "Display RSS stack."
msgstr "Afficher la file RSS."
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattr_ldap_password.php:100
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:574
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1326
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:579
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1365
msgid "undefined"
msgstr "non-définie"
@ -2249,6 +2267,10 @@ msgstr ""
"LScli : La fonction de prise en charge de la commande CLI '%{command}' n'est "
"pas exécutable."
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSioFormatCSV.php:236
msgid "LSioFormatCSV: function fputcsv is not available."
msgstr "LSioFormatCSV : la fonction fputcsv n'est pas disponible."
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSlog.php:478
msgid "LSlog : Fail to load logging handler %{handler}."
msgstr "LSlog : Impossible de charger l'handler %{handler}."
@ -2271,14 +2293,14 @@ msgid "Unknown error : %{error}"
msgstr "Erreur inconnu : %{error}"
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearchEntry.php:166
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1152
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1245
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1387
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1191
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1284
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1426
msgid "View"
msgstr "Voir"
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearchEntry.php:182
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1008
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1047
msgid "Copy"
msgstr "Copier"
@ -2294,7 +2316,7 @@ msgstr ""
"LSsearchEntry : formaterFunction %{func} invalide utilisé pour "
"l'extraDisplayedColumns %{column}."
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSioFormat.php:92
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSioFormat.php:144
msgid "LSioFormat : IOformat driver %{driver} invalid or unavailable."
msgstr ""
"LSioFormat : Le pilote d'IOformat %{driver} est invalide ou n'est pas "
@ -2313,69 +2335,74 @@ msgstr "Vous devez fournir un mot clé pour les recherches globales."
msgid "Import"
msgstr "Importer"
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:467
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:460
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:871
msgid "Export"
msgstr "Exporter"
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:472
msgid "Reset"
msgstr "Réinitialiser"
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:505
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:510
#: templates/default/select.tpl:28 templates/default/global_search.tpl:6
msgid "Search"
msgstr "Rechercher"
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:506
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:511
#: templates/default/select.tpl:31
msgid "Approximative search"
msgstr "Recherche approximative"
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:507
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:512
#: templates/default/select.tpl:32
msgid "Recursive search"
msgstr "Recherche récursive"
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:593
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:598
msgid ""
"The custom action %{title} have been successfully execute on this search."
msgstr ""
"L'action personnalisée %{title} a été correctement exécutée sur cette "
"recherche."
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:904
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:943
msgid "Data entry form"
msgstr "Masque de saisie"
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:910
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1626
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:949
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1665
msgid "Object has been added."
msgstr "L'objet a été ajouté."
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1047
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1086
msgid "My account"
msgstr "Mon compte"
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1110
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1716
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1149
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1755
msgid "The object has been partially modified."
msgstr "L'objet a été partiellement modifié."
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1113
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1719
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1152
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1758
msgid "The object has been modified successfully."
msgstr "L'objet a bien été modifié."
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1228
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1760
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1267
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1799
msgid "%{objectname} has been successfully deleted."
msgstr "%{objectname} a bien été supprimé."
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1237
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1276
msgid "Deleting : %{objectname}"
msgstr "Suppression : %{objectname}"
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1238
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1277
msgid "Do you really want to delete <strong>%{displayName}</strong> ?"
msgstr "Voulez-vous vraiment supprimer <strong>%{displayName}</strong> ?"
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1348
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1387
msgid ""
"The custom action %{customAction} have been successfully execute on "
"%{objectname}."
@ -2506,7 +2533,7 @@ msgstr "Fichier"
msgid "Forgot your password ?"
msgstr "Mot de passe perdu ?"
#: templates/default/import.tpl:13
#: templates/default/export.tpl:8 templates/default/import.tpl:13
msgid "Format"
msgstr "Format"
@ -2654,7 +2681,7 @@ msgstr "Mise à jour des objets existants"
msgid "Updated objects"
msgstr "Objets mis à jour"
#: templates/default/import.tpl:36
#: templates/default/export.tpl:15 templates/default/import.tpl:36
msgid "Valid"
msgstr "Valider"

View file

@ -360,65 +360,65 @@ msgstr ""
msgid "LSformRule: Unknown rule type %{type}."
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSimport.php:203
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSimport.php:208
msgid "Failed to set post data on creation form."
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSimport.php:209
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSimport.php:214
msgid "Error validating creation form."
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSimport.php:214
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSimport.php:219
msgid "Failed to validate object data."
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSimport.php:221
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSimport.php:226
msgid "Failed to generate DN for this object."
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSimport.php:235
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSimport.php:240
msgid "Error creating object on LDAP server."
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSimport.php:241
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSimport.php:246
msgid "An object already exist on LDAP server with DN %{dn}."
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSimport.php:252
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSimport.php:257
msgid ""
"Failed to load existing object %{dn} from LDAP server. Can't update object."
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSimport.php:260
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSimport.php:265
msgid "Failed to set post data on update form."
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSimport.php:266
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSimport.php:271
msgid "Error validating update form."
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSimport.php:276
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSimport.php:281
msgid "Error updating object on LDAP server."
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSimport.php:322
msgid "LSimport : Post data not found or not completed."
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSimport.php:327
msgid "LSimport: Post data not found or not completed."
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSimport.php:325
msgid "LSimport : object type invalid."
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSimport.php:330
msgid "LSimport: object type invalid."
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSimport.php:328
msgid "LSimport : input/output format %{format} invalid."
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSimport.php:333
msgid "LSimport: input/output format %{format} invalid."
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSimport.php:331
msgid "LSimport : Fail to initialize input/output driver"
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSimport.php:336
msgid "LSimport: Fail to initialize input/output driver."
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSimport.php:334
msgid "LSimport : Fail to load objects's data from input file"
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSimport.php:339
msgid "LSimport: Fail to load objects's data from input file."
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattr_ldap_pwdHistory.php:76
@ -436,9 +436,9 @@ msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSconfirmBox.php:37
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsmoothbox.php:39
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSform.php:74
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:618
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1240
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1382
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:623
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1279
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1421
#: templates/default/recoverpassword.tpl:21
msgid "Validate"
msgstr ""
@ -569,10 +569,10 @@ msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSformElement_select_object.php:68
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSformElement_supannLabeledValue.php:62
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearchEntry.php:174
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1000
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1168
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1253
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1395
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1039
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1207
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1292
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1434
msgid "Modify"
msgstr ""
@ -725,6 +725,22 @@ msgid ""
"value, you can't select it."
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSexport.php:93
msgid "LSexport: input/output format %{format} invalid."
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSexport.php:96
msgid "LSexport: Fail to initialize input/output driver."
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSexport.php:99
msgid "LSexport: Fail to load objects's data to export from LDAP directory."
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSexport.php:102
msgid "LSexport: Fail to export objects's data."
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSformRule_differentPassword.php:90
msgid ""
"LSformRule_differentPassword : Other password attribute is not configured."
@ -753,53 +769,53 @@ msgid ""
"LSattr_ldap :: password. It's not the case of the attribure %{attr}."
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:266
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:250
msgid "The value of field %{label} is invalid."
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:720
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:738
msgid ""
"LSattribute : Attribute %{attr} : LDAP or HTML types unknow (LDAP = %{ldap} "
"& HTML = %{html})."
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:723
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:741
msgid ""
"LSattribute : The function %{func} to display the attribute %{attr} is "
"unknow."
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:726
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:744
msgid ""
"LSattribute : The rule %{rule} to validate the attribute %{attr} is unknow."
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:729
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:747
msgid ""
"LSattribute : Configuration data to verify the attribute %{attr} are "
"incorrect."
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:732
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:750
msgid ""
"LSattribute : The function %{func} to save the attribute %{attr} is unknow."
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:735
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:753
msgid "LSattribute : The value of the attribute %{attr} can't be generated."
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:738
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:756
msgid "LSattribute : Generation of the attribute %{attr} failed."
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:741
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:759
msgid ""
"LSattribute : Generation of the attribute %{attr} did not return a correct "
"value."
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:744
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:762
msgid ""
"LSattribute : The attr_%{type} of the attribute %{name} is not yet defined."
msgstr ""
@ -853,7 +869,7 @@ msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:1640
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:156
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:462
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:467
#: templates/default/select.tpl:29
msgid "Refresh"
msgstr ""
@ -1262,8 +1278,8 @@ msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSformElement_select_object.php:69
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSformElement_select_object.php:85
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearchEntry.php:190
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1016
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1160
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1055
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1199
msgid "Delete"
msgstr ""
@ -1274,7 +1290,7 @@ msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSrelation.php:712
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:449
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:945
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:984
msgid "New"
msgstr ""
@ -1436,12 +1452,12 @@ msgid "Delete this field."
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSform.php:229
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:614
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:619
msgid "Do you really want to execute custom action %{title} on this search ?"
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSform.php:235
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1376
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1415
msgid ""
"Do you really want to execute custom action %{customAction} on "
"%{objectname} ?"
@ -1579,8 +1595,8 @@ msgid "Display RSS stack."
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattr_ldap_password.php:100
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:574
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1326
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:579
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1365
msgid "undefined"
msgstr ""
@ -1906,6 +1922,10 @@ msgstr ""
msgid "LScli : The CLI command '%{command}' handler is not callable."
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSioFormatCSV.php:236
msgid "LSioFormatCSV: function fputcsv is not available."
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSlog.php:478
msgid "LSlog : Fail to load logging handler %{handler}."
msgstr ""
@ -1928,14 +1948,14 @@ msgid "Unknown error : %{error}"
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearchEntry.php:166
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1152
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1245
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1387
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1191
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1284
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1426
msgid "View"
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearchEntry.php:182
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1008
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1047
msgid "Copy"
msgstr ""
@ -1949,7 +1969,7 @@ msgid ""
"%{column}."
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSioFormat.php:92
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSioFormat.php:144
msgid "LSioFormat : IOformat driver %{driver} invalid or unavailable."
msgstr ""
@ -1966,67 +1986,72 @@ msgstr ""
msgid "Import"
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:467
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:460
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:871
msgid "Export"
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:472
msgid "Reset"
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:505
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:510
#: templates/default/select.tpl:28 templates/default/global_search.tpl:6
msgid "Search"
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:506
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:511
#: templates/default/select.tpl:31
msgid "Approximative search"
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:507
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:512
#: templates/default/select.tpl:32
msgid "Recursive search"
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:593
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:598
msgid ""
"The custom action %{title} have been successfully execute on this search."
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:904
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:943
msgid "Data entry form"
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:910
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1626
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:949
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1665
msgid "Object has been added."
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1047
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1086
msgid "My account"
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1110
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1716
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1149
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1755
msgid "The object has been partially modified."
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1113
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1719
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1152
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1758
msgid "The object has been modified successfully."
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1228
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1760
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1267
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1799
msgid "%{objectname} has been successfully deleted."
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1237
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1276
msgid "Deleting : %{objectname}"
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1238
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1277
msgid "Do you really want to delete <strong>%{displayName}</strong> ?"
msgstr ""
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1348
#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1387
msgid ""
"The custom action %{customAction} have been successfully execute on "
"%{objectname}."
@ -2155,7 +2180,7 @@ msgstr ""
msgid "Forgot your password ?"
msgstr ""
#: templates/default/import.tpl:13
#: templates/default/export.tpl:8 templates/default/import.tpl:13
msgid "Format"
msgstr ""
@ -2301,7 +2326,7 @@ msgstr ""
msgid "Updated objects"
msgstr ""
#: templates/default/import.tpl:36
#: templates/default/export.tpl:15 templates/default/import.tpl:36
msgid "Valid"
msgstr ""

View file

@ -0,0 +1,19 @@
{extends file='ls:base_connected.tpl'}
{block name="content"}
{if $pagetitle != ''}<h1 id='LSview_title'>{$pagetitle|escape:"htmlall"}</h1>{/if}
<div class='LSform'>
<form action='object/{$LSobject|escape:"url"}/export' method='get'>
<dl class='LSform'>
<dt class='LSform'><label for='ioFormat'>{tr msg='Format'}</label></dt>
<dd class='LSform'>
<select name='ioFormat'>
{html_options options=$ioFormats}
</select>
</dd>
<dd class='LSform'><input type='submit' value='{tr msg='Valid'}'/></dd>
</dl>
</form>
</div>
{/block}