diff --git a/doc/conf/LSattribute/LSattr_html/LSattr_html_mail.docbook b/doc/conf/LSattribute/LSattr_html/LSattr_html_mail.docbook index 3361bc14..91c5c341 100644 --- a/doc/conf/LSattribute/LSattr_html/LSattr_html_mail.docbook +++ b/doc/conf/LSattribute/LSattr_html/LSattr_html_mail.docbook @@ -1,51 +1,13 @@ LSattr_html_mail Ce type est utilisé pour la gestion des attributs dont la valeur est - une adresse e-mail. Il offre les fonctionnalités suivantes : - - la possibilité d'envoyer des mails directement depuis l'interface - de l'application ; - l'autocomplétion lors de la saisie d'une adresse. - - + une adresse e-mail. En plus d'un affichage adapté, il offre la possibilité + d'envoyer des mails directement depuis l'interface de l'application. Structure... array( 'disableMailSending' => [booléen], - - // Autocomplétion pour un type d'LSobject donné - 'autocomplete' => array ( - 'object_type' => '[Type d'LSobject]', - 'mail_attributes' => array ( - 'mail', - 'mailAlternateAddress', - [...] - ), - 'filter' => '[filtre LDAP]', - 'basedn' => '[base DN spécifique]', - 'scope' => '[scope de recherche]', - 'displayFormat' => '[LSformat]', - 'onlyAccessible' => [booléen], - ), - - // Autocomplétion sur la base d'une recherche LDAP brute - 'autocomplete' => array ( - 'mail_attributes' => array ( - 'mail', - 'mailAlternateAddress', - [...] - ), - 'filter' => '[filtre LDAP]', - 'basedn' => '[base DN spécifique]', - 'scope' => '[scope de recherche]', - 'displayFormat' => '[LSformat]', - 'onlyAccessible' => [booléen], - ), - - // Autocomplétion (par défaut) - 'autocomplete' => true, - ),]]> ... @@ -63,86 +25,6 @@ - - autocomplete - - Paramètrage de l'autocomplétion des adresses mails saisies : Il peut s'agir - d'un tableau configurant les paramètres de l'autocomplétion ou simplement - true pour activer l'autocomplétion par défaut, c'est à dire la recherche brute - dans l'annuaire de n'importe quel objet ayant l'attribut mail. - En cas de configuration avancée, il est possible de faire une recherche : - - Sur la base d'un type d'&LSobject; donné : l'autocomplétion se fera - alors comme n'importe quelle recherche d'un type d'objet donné. - Sur la base d'une recherche brute dans l'annuaire : l'autocomplétion se - fera alors sur la valeur de l'adresse mail recherchée et au travers une recherche brute dans - l'annuaire sur n'importe quels objets ayant une adresse email correspondant. - - - Les paramètres associés à ces deux cas de figure sont décrits ci-dessous : - - - - object_type - - Le type d'&LSobject; recherché. - - - - - mail_attributes - - Le(s) nom de l'attribut stockant les adresses emails recherchées. Il peut s'agir d'une chaîne - de caractères ou d'un tableau s'il y a plusieurs attributs. - - - - - filter - - Un filtre de recherche falcultatif venant en plus de celui calculé automatiquement à partir - du mot clé de recherche. - - - - - basedn - - Le basedn de la recherche. Paramètre - facultatif. - - - - - scope - - Le scope de la recherche. Paramètre - facultatif, par défaut : sub. - - - - - displayFormat - - Le &LSformat; d'affichage des objets trouvés. Ce paramètre est facultatif et par défaut, - il s'agira du format d'affichage propre au type d'&LSobject; (si défini) et à défaut, l'adresse - mail trouvée sera affichée. - - - - - onlyAccessible - - Booléen falcultatif définissant si seul les &LSobjects; auxquels l'utilisateur connecté à accès - doivent être considérés comme sélectionnables (Faux par défaut). Ce paramètre n'est appliqué que dans - le cas d'une recherche pour un type d'&LSobject; donné. - - - - - - - Ce type d'attribut HTML est dérivé du type diff --git a/doc/conf/LSattribute/LSattr_html/LSattr_html_text.docbook b/doc/conf/LSattribute/LSattr_html/LSattr_html_text.docbook index 378eecab..5887746a 100644 --- a/doc/conf/LSattribute/LSattr_html/LSattr_html_text.docbook +++ b/doc/conf/LSattribute/LSattr_html/LSattr_html_text.docbook @@ -13,7 +13,23 @@ 'withoutAccent' => [booleen], 'replaceSpaces' => "[chaîne de remplacement]", 'upperCase' => [booleen], - 'lowerCase' => [booleen] + 'lowerCase' => [booleen], + + // Autocomplétion + 'autocomplete' => array ( + 'object_type' => '[Type d'LSobject]', // facultatif (voir ci-dessous) + 'value_attributes' => array ( + '[attr1]', + '[attr2]', + [...] + ), + 'filter' => '[filtre LDAP]', + 'basedn' => '[base DN spécifique]', + 'scope' => '[scope de recherche]', + 'displayFormat' => '[LSformat]', + 'onlyAccessible' => [booléen], + ), + ),]]> ... @@ -31,8 +47,8 @@ dans le format. Une seule valeur par attribut sera utilisée pour la génération : celle du premier champ (dans l'ordre d'apparition dans le formulaire). - Seuls les éléments du formulaire de type HTML - input, select ou + Seuls les éléments du formulaire de type HTML + input, select ou textarea peuvent être utilisés. @@ -92,5 +108,96 @@ + + autocomplete + + Paramètrage de l'autocomplétion des valeurs saisies : on paramètre ici la + recherche des valeurs possibles de l'attribut dans l'annuaire qui peut se faire : + + Sur la base d'un type d'&LSobject; donné : l'autocomplétion se fera + alors comme n'importe quelle recherche d'un type d'objet donné. + Sur la base d'une recherche brute dans l'annuaire : l'autocomplétion se + fera alors au travers une recherche brute dans l'annuaire sur n'importe quels objets ayant + un des attributs spécifiés dans le paramètre value_attributes + correspondant. + + + Les paramètres associés à ces deux cas de figure sont décrits ci-dessous : + + + + object_type + + Le type d'&LSobject; recherché. + + + + + value_attributes + + Le(s) nom de l'attribut stockant les valeurs possibles recherchées. Il peut s'agir + d'une chaîne de caractères ou d'un tableau s'il y a plusieurs attributs. + + + + + pattern_filter + + Le &LSformat; du filtre de recherche à partir du mot clé recherché. Ce paramètre est + facultatif et utile que dans le cas d'une recherche sans type d'&LSobject; précis. S'il est + défini, ce &LSformat; sera composé à l'aide du mot clé recherché. À défaut, le filtre de + recherche sera composé à l'aide des différents value_attributes configurés. + + + + + + filter + + Un filtre de recherche facultatif venant en plus de celui calculé automatiquement à partir + du mot clé de recherche. + + + + + basedn + + Le basedn de la recherche. Paramètre + facultatif. + + + + + scope + + Le scope de la recherche. Paramètre + facultatif, par défaut : sub. + + + + + display_name_format + + Le &LSformat; d'affichage des objets trouvés. Ce paramètre est facultatif et par défaut, + il s'agira du format d'affichage propre au type d'&LSobject; (si défini) et à défaut, la valeur + possible trouvée sera affichée. Si est configuré, ce &LSformat; sera composé à l'aide des valeurs + brutes des attributs des objets correspondants avec en plus la valeur possible trouvée dans le mot + clé value. + + + + + only_accessible + + Booléen falcultatif définissant si seul les &LSobjects; auxquels l'utilisateur connecté à accès + doivent être considérés comme sélectionnables (Faux par défaut). Ce paramètre n'est appliqué que dans + le cas d'une recherche pour un type d'&LSobject; donné. + + + + + + + diff --git a/src/css/default/LSformElement_mail.css b/src/css/default/LSformElement_text.css similarity index 70% rename from src/css/default/LSformElement_mail.css rename to src/css/default/LSformElement_text.css index 1687132f..974dac73 100644 --- a/src/css/default/LSformElement_mail.css +++ b/src/css/default/LSformElement_text.css @@ -1,4 +1,4 @@ -ul.LSformElement_mail_autocomplete { +ul.LSformElement_text_autocomplete { border: 1px solid #ccc; width: 200px; margin: 0; @@ -9,34 +9,34 @@ ul.LSformElement_mail_autocomplete { list-style-type: none; } -li.LSformElement_mail_autocomplete { +li.LSformElement_text_autocomplete { cursor: pointer; border-bottom: 1px dotted #ccc; font-size: 0.8em; } -li.LSformElement_mail_autocomplete:last-of-type { +li.LSformElement_text_autocomplete:last-of-type { border: none; } -li.LSformElement_mail_autocomplete_over { +li.LSformElement_text_autocomplete_over { background-color: #ccc; } -li.LSformElement_mail_autocomplete_current { +li.LSformElement_text_autocomplete_current { font-style: italic; color: #777; } @media (max-width: 1024px) { - ul.LSformElement_mail_autocomplete { + ul.LSformElement_text_autocomplete { width: 40vw; box-sizing: border-box; } } @media (max-width: 400px) { - ul.LSformElement_mail_autocomplete { + ul.LSformElement_text_autocomplete { width: calc(100% - 1em); } } diff --git a/src/css/light-blue.css b/src/css/light-blue.css index 3464a14f..fe85fee1 100644 --- a/src/css/light-blue.css +++ b/src/css/light-blue.css @@ -198,7 +198,7 @@ td.LSobject-list, tr.LSobject-list, table.LStable tbody td, table.LStable th { padding: 2px; } - .LSform input[type=text], .LSform input[type=password], .LSform select, .LSform textarea, ul.LSformElement_mail_autocomplete, ul.LSformElement_select_object_edit, div.LSformElement_wysiwyg_container, ul.LSformElement_jsonCompositeAttribute:not(.LSformElement_jsonCompositeAttribute_fullWidth), dd.LSform-errors { + .LSform input[type=text], .LSform input[type=password], .LSform select, .LSform textarea, ul.LSformElement_text_autocomplete, ul.LSformElement_select_object_edit, div.LSformElement_wysiwyg_container, ul.LSformElement_jsonCompositeAttribute:not(.LSformElement_jsonCompositeAttribute_fullWidth), dd.LSform-errors { width: 32vw; } diff --git a/src/includes/class/class.LSformElement.php b/src/includes/class/class.LSformElement.php index f0c1065e..814ffb14 100644 --- a/src/includes/class/class.LSformElement.php +++ b/src/includes/class/class.LSformElement.php @@ -44,18 +44,17 @@ class LSformElement extends LSlog_staticLoggerClass { var $fetchVariables = array(); /** - * Constructeur - * - * Cette methode construit l'objet et définis sa configuration de base. + * Constructor * * @author Benjamin Renard * - * @param[in] &$form [required] LSform L'objet LSform parent - * @param[in] $name [required] string Le nom de référence de l'élément - * @param[in] $label [required] string Le label de l'élément - * @param[in] $params mixed Paramètres supplémentaires + * @param[in] &$form LSform The LSform parent object + * @param[in] $name string The name of the element + * @param[in] $label string The label of the element + * @param[in] $params array The parameters of the element + * @param[in] &$attr_html LSattr_html The LSattr_html object of the corresponding attribute * - * @retval true + * @retval void */ public function __construct(&$form, $name, $label, $params, &$attr_html){ $this -> name = $name; @@ -63,7 +62,6 @@ class LSformElement extends LSlog_staticLoggerClass { $this -> params = $params; $this -> form =& $form; $this -> attr_html =& $attr_html; - return true; } /** @@ -278,12 +276,12 @@ class LSformElement extends LSlog_staticLoggerClass { } /** - * Retournne un template Smarty compilé dans le contexte d'un LSformElement + * Return HTML code of the LSformElement based on its (smarty) template file * - * @param[in] string $template Le template à retourner - * @param[in] array $variables Variables Smarty à assigner avant l'affichage + * @param[in] $template string The template filename (optional, default: $this -> template) + * @param[in] $variables array Array of template variables to assign before template compilation (optional) * - * @retval string Le HTML compilé du template + * @retval string HTML code of the LSformElement */ public function fetchTemplate($template=NULL,$variables=array()) { if (!$template) { diff --git a/src/includes/class/class.LSformElement_mail.php b/src/includes/class/class.LSformElement_mail.php index 66547ce7..f0d949e5 100644 --- a/src/includes/class/class.LSformElement_mail.php +++ b/src/includes/class/class.LSformElement_mail.php @@ -34,21 +34,52 @@ LSsession :: loadLSclass('LSformElement_text'); class LSformElement_mail extends LSformElement_text { var $JSscripts = array( - 'LSformElement_mail_field.js', 'LSformElement_mail.js' ); - var $CSSfiles = array( - 'LSformElement_mail.css', - ); - var $fetchVariables = array( - 'uriClass' => 'LSformElement_mail', + 'additionalCssClass' => array('LSformElement_mail'), 'uriPrefix' => 'mailto:' ); var $fieldTemplate = 'LSformElement_uri_field.tpl'; + // Flag to trigger warning about old Autocomplete config style + // (detect in constructor and show on getDisplay()) + private $warnOldAutocompleteConfigStyle = false; + + /** + * Constructor + * + * @author Benjamin Renard + * + * @param[in] &$form LSform The LSform parent object + * @param[in] $name string The name of the element + * @param[in] $label string The label of the element + * @param[in] $params array The parameters of the element + * @param[in] &$attr_html LSattr_html The LSattr_html object of the corresponding attribute + * + * @retval void + */ + public function __construct(&$form, $name, $label, $params, &$attr_html){ + parent::__construct($form, $name, $label, $params, $attr_html); + + // Handle autocomplete retro-compatibility & default value attributes + if ($this -> getParam('html_options.autocomplete')) { + $mail_attributes = $this -> getParam('html_options.autocomplete.mail_attributes'); + if ($mail_attributes) { + $this -> params['html_options']['autocomplete']['value_attributes'] = $mail_attributes; + $this -> warnOldAutocompleteConfigStyle = true; + } + elseif (!$this -> getParam('html_options.autocomplete.value_attributes')) { + if (!is_array($this -> params['html_options']['autocomplete'])) + $this -> params['html_options']['autocomplete'] = array(); + $this -> params['html_options']['autocomplete']['value_attributes'] = array('mail'); + $this -> warnOldAutocompleteConfigStyle = true; + } + } + } + public function getDisplay() { LStemplate :: addHelpInfo( 'LSformElement_mail', @@ -59,142 +90,31 @@ class LSformElement_mail extends LSformElement_text { if (LSsession :: loadLSclass('LSmail')) { LSmail :: loadDependenciesDisplay(); } - if (!$this -> isFreeze() && $this -> getParam('html_options.autocomplete')) { - LStemplate :: addJSconfigParam('LSformElement_mail_autocomplete_noResultLabel', _('No result')); - } + if ($this -> warnOldAutocompleteConfigStyle) + LSerror :: addErrorCode('LSformElement_mail_01'); return parent :: getDisplay(); } + /** + * Return HTML code of the LSformElement based on its (smarty) template file + * + * @param[in] $template string The template filename (optional, default: $this -> template) + * @param[in] $variables array Array of template variables to assign before template compilation (optional) + * + * @retval string HTML code of the LSformElement + */ public function fetchTemplate($template=NULL,$variables=array()) { if ($this -> getParam('html_options.disableMailSending', false, 'bool')) { - $this -> fetchVariables['uriClass'] .= " LSformElement_mail_disableMailSending"; - } - if ($this -> getParam('html_options.autocomplete', false, 'bool')) { - $this -> fetchVariables['uriClass'] .= " LSformElement_mail_autocomplete"; + $this -> fetchVariables['additionalCssClass'][] = " LSformElement_mail_disableMailSending"; } return parent :: fetchTemplate($template,$variables); } - /** - * Autocomplete email - * - * @param[in] $pattern The pattern of the search - * - * @retval array(mail -> displayName) Found emails - */ - public function autocomplete($pattern) { - $ret = array(); - if ($this -> getParam('html_options.autocomplete')) { - $mail_attributes = ensureIsArray($this -> getParam('html_options.autocomplete.mail_attributes', array('mail'))); - - $obj_type = $this -> getParam('html_options.autocomplete.object_type'); - if ($obj_type) { - // Search with a specific objectType - if (LSsession :: loadLSobject($obj_type)) { - $obj = new $obj_type(); - $filters = array(); - foreach($mail_attributes as $attr) { - $filters[] = Net_LDAP2_Filter::create($attr, 'present'); - } - $filter = (count($filters)==1?$filters[0]:Net_LDAP2_Filter::combine('or', $filters)); - if ($this -> getParam('html_options.autocomplete.filter')) { - $filter = Net_LDAP2_Filter::combine( - 'and', - array( - Net_LDAP2_Filter::parse($this -> getParam('html_options.autocomplete.filter')), - $filter, - ) - ); - } - $sparams = array( - 'pattern' => $pattern, - 'attributes' => $mail_attributes, - 'displayFormat' => $this -> getParam('html_options.autocomplete.display_name_format'), - 'filter' => $filter, - 'onlyAccessible' => $this -> getParam('html_options.autocomplete.onlyAccessible', false, 'bool'), - ); - LSdebug($filter->as_string()); - $search = new LSsearch( - $obj_type, - 'LSformElement_mail::autocomplete', - $sparams, - true - ); - $search -> run(); - foreach($search -> getSearchEntries() as $e) { - foreach($mail_attributes as $attr) { - $mails = ensureIsArray($e->get($attr)); - if (!$mails) continue; - foreach($mails as $mail) - $ret[$mail] = $e->displayName; - } - } - } - } - else { - $filters = array(); - foreach($mail_attributes as $attr) { - $filters[] = Net_LDAP2_Filter::create($attr, 'contains', $pattern); - } - $filter = (count($filters)==1?$filters[0]:Net_LDAP2_Filter::combine('or', $filters)); - if ($this -> getParam('html_options.autocomplete.filter')) { - $filter = Net_LDAP2_Filter::combine( - 'and', - array( - Net_LDAP2_Filter::parse($this -> getParam('html_options.autocomplete.filter')), - $filter, - ) - ); - } - - $displayNameFormat = $this -> getParam('html_options.autocomplete.display_name_format', false); - $attributes = $mail_attributes; - if ($displayNameFormat) - foreach(getFieldInFormat($displayNameFormat) as $attr) - if(!in_array($attr, $attributes)) - $attributes[] = $attr; - - $objects = LSldap :: search ( - $filter, - $this -> getParam('html_options.autocomplete.basedn', null), - array ( - 'attributes' => $attributes, - 'scope' => $this -> getParam('html_options.autocomplete.scope', 'sub'), - ) - ); - - if (is_array($objects)) { - foreach($objects as $object) { - $displayName = ($displayNameFormat?getFData($displayNameFormat, $object['attrs']):null); - foreach($mail_attributes as $attr) { - if (!isset($object['attrs'][$attr])) continue; - $mails = ensureIsArray($object['attrs'][$attr]); - foreach($mails as $mail) - $ret[$mail] = ($displayName?$displayName:$mail); - } - } - } - } - } - return $ret; - } - - /** - * This ajax method is used by the autocomplete function of the form element. - * - * @param[in] $data The address to the array of data witch will be return by the ajax request - * - * @retval void - **/ - public static function ajax_autocomplete(&$data) { - if ((isset($_REQUEST['attribute'])) && (isset($_REQUEST['objecttype'])) && (isset($_REQUEST['pattern'])) && (isset($_REQUEST['idform'])) ) { - if (LSsession ::loadLSobject($_REQUEST['objecttype'])) { - $object = new $_REQUEST['objecttype'](); - $form = $object -> getForm($_REQUEST['idform']); - $field=$form -> getElement($_REQUEST['attribute']); - $data['mails'] = $field -> autocomplete($_REQUEST['pattern']); - } - } - } - } + +/** + * Error Codes + **/ +LSerror :: defineError('LSformElement_mail_01', +___("LSformElement_mail: the autocomplete feature was moved to parent LSformElement_text class and you still use old configuration style with parameter mail_attributes (and its default value). Please upgrade your configuration by renaming (or setting) this parameter to value_attributes.") +); diff --git a/src/includes/class/class.LSformElement_maildir.php b/src/includes/class/class.LSformElement_maildir.php index 6fa8e1f2..9e8eaac4 100644 --- a/src/includes/class/class.LSformElement_maildir.php +++ b/src/includes/class/class.LSformElement_maildir.php @@ -59,7 +59,9 @@ class LSformElement_maildir extends LSformElement_text { 'LSformElement_maildir.js' ); - var $fieldTemplate = 'LSformElement_maildir_field.tpl'; + var $fetchVariables = array( + 'additionalCssClass' => array('LSformElement_maildir'), + ); public function getDisplay() { LStemplate :: addHelpInfo( diff --git a/src/includes/class/class.LSformElement_rss.php b/src/includes/class/class.LSformElement_rss.php index e9e8ca42..33bdee6d 100644 --- a/src/includes/class/class.LSformElement_rss.php +++ b/src/includes/class/class.LSformElement_rss.php @@ -37,7 +37,7 @@ class LSformElement_rss extends LSformElement_text { 'LSformElement_rss.js' ); var $fetchVariables = array( - 'uriClass' => 'LSformElement_rss', + 'additionalCssClass' => array('LSformElement_rss'), 'uriPrefix' => '' ); diff --git a/src/includes/class/class.LSformElement_tel.php b/src/includes/class/class.LSformElement_tel.php index e37ca242..a5bc2846 100644 --- a/src/includes/class/class.LSformElement_tel.php +++ b/src/includes/class/class.LSformElement_tel.php @@ -34,7 +34,7 @@ LSsession :: loadLSclass('LSformElement_text'); class LSformElement_tel extends LSformElement_text { var $fetchVariables = array( - 'uriClass' => 'LSformElement_tel', + 'additionalCssClass' => array('LSformElement_tel'), 'uriPrefix' => 'tel:' ); diff --git a/src/includes/class/class.LSformElement_text.php b/src/includes/class/class.LSformElement_text.php index fe83662d..be6e60c7 100644 --- a/src/includes/class/class.LSformElement_text.php +++ b/src/includes/class/class.LSformElement_text.php @@ -34,8 +34,13 @@ LSsession :: loadLSclass('LSformElement'); class LSformElement_text extends LSformElement { var $JSscripts = array(); - var $CSSfiles = array(); + var $CSSfiles = array( + 'LSformElement_text.css', + ); var $fieldTemplate = 'LSformElement_text_field.tpl'; + var $fetchVariables = array( + 'additionalCssClass' => array(), + ); /** * Retourne les infos d'affichage de l'élément @@ -57,6 +62,9 @@ class LSformElement_text extends LSformElement { 'generate' => _('Generate the value') ) ); + if ($this -> getParam('html_options.autocomplete')) { + LStemplate :: addJSconfigParam('LSformElement_text_autocomplete_noResultLabel', _('No result')); + } LStemplate :: addJSscript('LSformElement_text_field.js'); LStemplate :: addJSscript('LSformElement_text.js'); } @@ -70,4 +78,182 @@ class LSformElement_text extends LSformElement { return $return; } + /** + * Return HTML code of the LSformElement based on its (smarty) template file + * + * @param[in] $template string The template filename (optional, default: $this -> template) + * @param[in] $variables array Array of template variables to assign before template compilation (optional) + * + * @retval string HTML code of the LSformElement + */ + public function fetchTemplate($template=NULL,$variables=array()) { + if ($this -> getParam('html_options.autocomplete.value_attributes', null, 'array')) { + $this -> fetchVariables['additionalCssClass'][] = " LSformElement_text_autocomplete"; + } + return parent :: fetchTemplate($template,$variables); + } + + + /** + * Autocomplete value + * + * @param[in] $pattern The pattern of the search + * + * @retval array(value -> displayName) Found values + */ + public function autocomplete($pattern) { + $ret = array(); + $value_attributes = $this -> getParam('html_options.autocomplete.value_attributes', null, 'array'); + if ($value_attributes) { + $obj_type = $this -> getParam('html_options.autocomplete.object_type'); + if ($obj_type) { + // Search with a specific objectType + if (LSsession :: loadLSobject($obj_type)) { + $obj = new $obj_type(); + $filters = array(); + foreach($value_attributes as $attr) { + $filters[] = Net_LDAP2_Filter::create($attr, 'present'); + } + $filter = (count($filters)==1?$filters[0]:Net_LDAP2_Filter::combine('or', $filters)); + if ($this -> getParam('html_options.autocomplete.filter')) { + $filter = Net_LDAP2_Filter::combine( + 'and', + array( + Net_LDAP2_Filter::parse($this -> getParam('html_options.autocomplete.filter')), + $filter, + ) + ); + } + self :: log_debug("autocomplete($pattern): search $obj_type with pattern = '$pattern' and additional filter = '".$filter->as_string()."'"); + $sparams = array( + 'pattern' => $pattern, + 'attributes' => $value_attributes, + 'displayFormat' => $this -> getParam('html_options.autocomplete.display_name_format'), + 'filter' => $filter, + 'onlyAccessible' => $this -> getParam('html_options.autocomplete.only_accessible', false, 'bool'), + ); + LSdebug($filter->as_string()); + $search = new LSsearch( + $obj_type, + 'LSformElement_text::autocomplete', + $sparams, + true + ); + $search -> run(); + foreach($search -> getSearchEntries() as $e) { + foreach($value_attributes as $attr) { + $values = ensureIsArray($e->get($attr)); + if (!$values) continue; + foreach($values as $value) { + $e -> registerOtherValue('value', $value); + $ret[$value] = $e->displayName; + } + } + } + } + } + else { + if ($this -> getParam('html_options.autocomplete.pattern_filter')) { + // Filter on object with at least one of value attributes + $filters = array(); + foreach($value_attributes as $attr) { + $filters[] = Net_LDAP2_Filter::create($attr, 'present'); + } + $filter = (count($filters)==1?$filters[0]:Net_LDAP2_Filter::combine('or', $filters)); + + // Compute pattern filter + $pattern_filter = getFData( + $this -> getParam('html_options.autocomplete.pattern_filter', null, 'string'), + Net_LDAP2_Filter::escape($pattern) + ); + self :: log_debug("autocomplete($pattern): pattern filter = '$pattern_filter'"); + + // Combine pattern and value attributes filters + $filter = Net_LDAP2_Filter::combine( + 'and', + array( + Net_LDAP2_Filter::parse($pattern_filter), + $filter, + ) + ); + } + else { + foreach($value_attributes as $attr) { + $filters[] = Net_LDAP2_Filter::create($attr, 'contains', $pattern); + } + $filter = (count($filters)==1?$filters[0]:Net_LDAP2_Filter::combine('or', $filters)); + } + + if ($this -> getParam('html_options.autocomplete.filter')) { + $filter = Net_LDAP2_Filter::combine( + 'and', + array( + Net_LDAP2_Filter::parse($this -> getParam('html_options.autocomplete.filter')), + $filter, + ) + ); + } + + self :: log_debug("autocomplete($pattern): filter = '".$filter->as_string()."'"); + + $displayNameFormat = $this -> getParam('html_options.autocomplete.display_name_format', false); + $attributes = $value_attributes; + if ($displayNameFormat) + foreach(getFieldInFormat($displayNameFormat) as $attr) + if(!in_array($attr, $attributes) && $attr != 'value') + $attributes[] = $attr; + + $objects = LSldap :: search ( + $filter, + $this -> getParam('html_options.autocomplete.basedn', null), + array ( + 'attributes' => $attributes, + 'scope' => $this -> getParam('html_options.autocomplete.scope', 'sub'), + ) + ); + + if (is_array($objects)) { + foreach($objects as $object) { + foreach($value_attributes as $attr) { + if (!isset($object['attrs'][$attr])) continue; + $values = ensureIsArray($object['attrs'][$attr]); + foreach($values as $value) + + if ($displayNameFormat) + $displayName = getFData( + $displayNameFormat, + array_merge( + array('value' => $value, 'dn' => $object['dn']), + $object['attrs'] + ) + ); + else + $displayName = $value; + $ret[$value] = $displayName; + } + } + } + } + } + return $ret; + } + + /** + * This ajax method is used by the autocomplete function of the form element. + * + * @param[in] $data The address to the array of data witch will be return by the ajax request + * + * @retval void + **/ + public static function ajax_autocomplete(&$data) { + if ((isset($_REQUEST['attribute'])) && (isset($_REQUEST['objecttype'])) && (isset($_REQUEST['pattern'])) && (isset($_REQUEST['idform'])) ) { + if (LSsession ::loadLSobject($_REQUEST['objecttype'])) { + $object = new $_REQUEST['objecttype'](); + $form = $object -> getForm($_REQUEST['idform']); + $field=$form -> getElement($_REQUEST['attribute']); + $data['values'] = $field -> autocomplete($_REQUEST['pattern']); + } + } + } + } diff --git a/src/includes/class/class.LSformElement_url.php b/src/includes/class/class.LSformElement_url.php index 2ac108c6..102745f2 100644 --- a/src/includes/class/class.LSformElement_url.php +++ b/src/includes/class/class.LSformElement_url.php @@ -38,7 +38,7 @@ class LSformElement_url extends LSformElement_text { ); var $fetchVariables = array( - 'uriClass' => 'LSformElement_url', + 'additionalCssClass' => array('LSformElement_url'), 'uriPrefix' => '' ); diff --git a/src/includes/class/class.LSformElement_xmpp.php b/src/includes/class/class.LSformElement_xmpp.php index 762877b8..9c78b817 100644 --- a/src/includes/class/class.LSformElement_xmpp.php +++ b/src/includes/class/class.LSformElement_xmpp.php @@ -37,7 +37,7 @@ class LSformElement_xmpp extends LSformElement_text { ); var $fetchVariables = array( - 'uriClass' => 'LSformElement_xmpp', + 'additionalCssClass' => array('LSformElement_xmpp'), 'uriPrefix' => 'xmpp:' ); diff --git a/src/includes/class/class.LSsearchEntry.php b/src/includes/class/class.LSsearchEntry.php index 17f303ad..24753eeb 100644 --- a/src/includes/class/class.LSsearchEntry.php +++ b/src/includes/class/class.LSsearchEntry.php @@ -101,6 +101,9 @@ class LSsearchEntry extends LSlog_staticLoggerClass { elseif ($key=='subDn' || $key=='subDnName') { return $this -> subDn; } + elseif ($key=='dn') { + return $this -> dn; + } } /** @@ -111,7 +114,7 @@ class LSsearchEntry extends LSlog_staticLoggerClass { * * @retval void **/ - private function registerOtherValue($name,$value) { + public function registerOtherValue($name,$value) { $this -> other_values[$name]=$value; } diff --git a/src/includes/js/LSformElement_mail.js b/src/includes/js/LSformElement_mail.js index 9edc8aeb..749f473d 100644 --- a/src/includes/js/LSformElement_mail.js +++ b/src/includes/js/LSformElement_mail.js @@ -22,16 +22,6 @@ var LSformElement_mail = new Class({ this.addBtnAfter.bind(this)(a); } }, this); - var getName = /^(.*)\[\]$/; - el.getElements('input.LSformElement_mail_autocomplete').each(function(input) { - this.fields.push( - new LSformElement_mail_field( - getName.exec(input.name)[1], - input - ) - ); - }, this); - }, addBtnAfter: function(el) { diff --git a/src/includes/js/LSformElement_mail_field.js b/src/includes/js/LSformElement_mail_field.js deleted file mode 100644 index 16880ced..00000000 --- a/src/includes/js/LSformElement_mail_field.js +++ /dev/null @@ -1,155 +0,0 @@ -var LSformElement_mail_field = new Class({ - initialize: function(name, input){ - this.name = name; - this.input = input; - this.ul = input.getParent('ul'); - this.li = input.getParent('li'); - this.keyUpTimer = null; - this.lastKeyUpValue = null; - this.lastAutocompletePattern = null; - this.lastAutocompleteMails = null; - this.initialiseLSformElement_mail_field(); - }, - - initialiseLSformElement_mail_field: function() { - this.input.addEvent('keyup',this.onKeyUp.bindWithEvent(this)); - this.input.addEvent('keydown',this.onKeyDown.bindWithEvent(this)); - }, - - onKeyDown: function(event) { - event = new Event(event); - if (event.key=='tab' && this.input.value) { - event.stop(); - if (this.keyUpTimer) { - clearTimeout(this.keyUpTimer); - } - this.launchAutocomplete(this.input.value); - } - }, - - onKeyUp: function(event) { - this.lastKeyUpValue = this.input.value; - if (this.keyUpTimer) { - clearTimeout(this.keyUpTimer); - } - if (this.lastKeyUpValue) { - this.keyUpTimer = this.onkeyUpTimeout.delay(800, this); - } - }, - - onkeyUpTimeout: function() { - this.keyUpTimer = null; - if (this.lastKeyUpValue == this.input.value) { - this.launchAutocomplete(this.input.value); - } - }, - - launchAutocomplete: function(pattern) { - if (this.lastAutocompletePattern == pattern) { - if (!this.autocompleteIsOpen()) this.showAutocompleteMails(); - return true; - } - this.input.set('disabled', 'disabled'); - this.lastAutocompletePattern=pattern; - var data = { - attribute: this.name, - objecttype: varLSform.objecttype, - idform: varLSform.idform, - pattern: pattern - }; - data.imgload=varLSdefault.loadingImgDisplay(this.input); - new Request({url: 'ajax/class/LSformElement_mail/autocomplete', data: data, onSuccess: this.onAutocompleteComplete.bind(this)}).send(); - }, - - onAutocompleteComplete: function(responseText, responseXML) { - var data = JSON.decode(responseText); - this.input.erase('disabled'); - if ( varLSdefault.checkAjaxReturn(data) ) { - this.lastAutocompleteMails = new Hash(data.mails); - this.showAutocompleteMails(); - } - }, - - showAutocompleteMails: function() { - if (!this.lastAutocompleteMails) return; - if (!$type(this.autocompleteUl)) { - this.autocompleteUl = new Element('ul'); - this.autocompleteUl.addClass('LSformElement_mail_autocomplete'); - this.autocompleteUl.injectInside(this.li); - document.addEvent('click', this.closeAutocompleteIfOpen.bind(this)); - } - this.autocompleteUl.empty(); - if (this.lastAutocompleteMails) { - this.lastAutocompleteMails.each(this.addAutocompleteLi, this); - } - this.addAutocompleteNoValueLabelIfEmpty(); - - this.autocompleteUl.setStyle('display','block'); - }, - - addAutocompleteLi: function(name, mail) { - var current = 0; - this.ul.getElements("input").each(function(input){ - if (input.value==mail && input != this.input) { - current=1; - } - },this); - - var li = new Element('li'); - li.addClass('LSformElement_mail_autocomplete'); - li.set('data-mail', mail); - li.set('html', name); - li.addEvent('mouseenter',this.onAutocompleteLiMouseEnter.bind(this,li)); - li.addEvent('mouseleave',this.onAutocompleteLiMouseLeave.bind(this,li)); - if (current) { - li.addClass('LSformElement_mail_autocomplete_current'); - } - else { - li.addEvent('click',this.onAutocompleteLiClick.bind(this,li)); - } - li.injectInside(this.autocompleteUl); - }, - - addAutocompleteNoValueLabelIfEmpty: function() { - if (this.autocompleteUl.getElement('li') == null) { - var li = new Element('li'); - li.addClass('LSformElement_mail_autocomplete'); - li.set('html', varLSdefault.LSjsConfig['LSformElement_mail_autocomplete_noResultLabel']); - li.injectInside(this.autocompleteUl); - } - }, - - onAutocompleteLiMouseEnter: function(li) { - li.addClass('LSformElement_mail_autocomplete_over'); - }, - - onAutocompleteLiMouseLeave: function(li) { - li.removeClass('LSformElement_mail_autocomplete_over'); - }, - - onAutocompleteLiClick: function(li) { - this.closeAutocomplete(); - if (li.get('data-mail')) { - this.input.value = li.get('data-mail'); - } - }, - - autocompleteIsOpen: function() { - return ($type(this.autocompleteUl) == 'element' && this.autocompleteUl.getStyle('display') != 'none'); - }, - - closeAutocomplete: function() { - if (!this.autocompleteIsOpen()) return true; - this.autocompleteUl.setStyle('display', 'none'); - }, - - closeAutocompleteIfOpen: function(event) { - event = new Event(event); - if (!this.autocompleteIsOpen()) - return true; - if (event.target==this.input || event.target==this.autocompleteUl) - return true; - this.closeAutocomplete(); - }, - -}); diff --git a/src/includes/js/LSformElement_text.js b/src/includes/js/LSformElement_text.js index 3d59473a..bae79eaa 100644 --- a/src/includes/js/LSformElement_text.js +++ b/src/includes/js/LSformElement_text.js @@ -8,11 +8,10 @@ var LSformElement_text = new Class({ }, initialiseLSformElement_text: function(el) { - if (typeof(el) == 'undefined') { el = document; } - var getName = /^(.*)\[\]$/ + var getName = /^(.*)\[\]$/; el.getElements('input.LSformElement_text').each(function(input) { var name = getName.exec(input.name)[1]; if (!$type(this.elements[name])) { diff --git a/src/includes/js/LSformElement_text_field.js b/src/includes/js/LSformElement_text_field.js index 2dcdd022..add02d1e 100644 --- a/src/includes/js/LSformElement_text_field.js +++ b/src/includes/js/LSformElement_text_field.js @@ -8,51 +8,60 @@ var LSformElement_text_field = new Class({ this._auto=1; this.onChangeColor = '#f16d6d'; this.generatedValue = ""; + + this.ul = input.getParent('ul'); + this.li = input.getParent('li'); + this.keyUpTimer = null; + this.lastKeyUpValue = null; + this.lastAutocompletePattern = null; + this.lastAutocompleteMails = null; }, start: function() { if (this._start) { return true; } - if ($type(this.params)) { - if ($type(this.params['generate_value_format'])) { - this.format = this.params['generate_value_format']; - this.oldBg=this.input.getStyle('background-color'); + if ($type(this.params) && $type(this.params.generate_value_format)) { + this.format = this.params.generate_value_format; + this.oldBg = this.input.getStyle('background-color'); - this.fx = new Fx.Tween(this.input,{property: 'background-color',duration:600}); + this.fx = new Fx.Tween(this.input,{property: 'background-color',duration:600}); - // GenerateBtn - this.generateBtn = new Element('img'); - this.generateBtn.addClass('btn'); - this.generateBtn.src=varLSdefault.imagePath('generate'); - this.generateBtn.addEvent('click',this.refreshValue.bind(this,true)); - this.generateBtn.injectAfter(this.input); - varLSdefault.addHelpInfo(this.generateBtn,'LSformElement_text','generate'); + // GenerateBtn + this.generateBtn = new Element('img'); + this.generateBtn.addClass('btn'); + this.generateBtn.src=varLSdefault.imagePath('generate'); + this.generateBtn.addEvent('click',this.refreshValue.bind(this,true)); + this.generateBtn.injectAfter(this.input); + varLSdefault.addHelpInfo(this.generateBtn,'LSformElement_text','generate'); - // Auto - var force=0; - if (this.params.autoGenerateOnModify) { - force = 1; - } - this.isCreation = false; - if (this.input.value=="") { - this.isCreation = true; - } + // Auto + var force=0; + if (this.params.autoGenerateOnModify) { + force = 1; + } + this.isCreation = false; + if (this.input.value=="") { + this.isCreation = true; + } - if (((this.isCreation)&&(this.params.autoGenerateOnCreate))||(force)) { - this.dependsFields = this.parent.getDependsFields(this.format); - this.dependsFields.each(function(el) { - var inputs = varLSform.getInput.bind(this.parent)(el); - if (inputs.length>0) { - inputs.each(function(input) { - input.addEvent('change',this.refreshValue.bind(this)); - },this); - } - },this); - } - this._start=true; + if (((this.isCreation)&&(this.params.autoGenerateOnCreate))||(force)) { + this.dependsFields = this.parent.getDependsFields(this.format); + this.dependsFields.each(function(el) { + var inputs = varLSform.getInput.bind(this.parent)(el); + if (inputs.length>0) { + inputs.each(function(input) { + input.addEvent('change',this.refreshValue.bind(this)); + },this); + } + },this); } } + if (this.input.hasClass('LSformElement_text_autocomplete')) { + this.input.addEvent('keyup',this.onKeyUp.bindWithEvent(this)); + this.input.addEvent('keydown',this.onKeyDown.bindWithEvent(this)); + } + this._start=true; }, refreshValue: function(force) { @@ -87,5 +96,141 @@ var LSformElement_text_field = new Class({ (function() {this.fx.start(this.oldBg);}).delay(1000,this); this.input.fireEvent('change'); } - } + }, + + onKeyDown: function(event) { + event = new Event(event); + if (event.key=='tab' && this.input.value) { + event.stop(); + if (this.keyUpTimer) { + clearTimeout(this.keyUpTimer); + } + this.launchAutocomplete(this.input.value); + } + }, + + onKeyUp: function(event) { + this.lastKeyUpValue = this.input.value; + if (this.keyUpTimer) { + clearTimeout(this.keyUpTimer); + } + if (this.lastKeyUpValue) { + this.keyUpTimer = this.onkeyUpTimeout.delay(800, this); + } + }, + + onkeyUpTimeout: function() { + this.keyUpTimer = null; + if (this.lastKeyUpValue == this.input.value) { + this.launchAutocomplete(this.input.value); + } + }, + + launchAutocomplete: function(pattern) { + if (this.lastAutocompletePattern == pattern) { + if (!this.autocompleteIsOpen()) this.showAutocompleteValues(); + return true; + } + this.input.set('disabled', 'disabled'); + this.lastAutocompletePattern=pattern; + var data = { + attribute: this.name, + objecttype: varLSform.objecttype, + idform: varLSform.idform, + pattern: pattern + }; + data.imgload=varLSdefault.loadingImgDisplay(this.input); + new Request({url: 'ajax/class/LSformElement_text/autocomplete', data: data, onSuccess: this.onAutocompleteComplete.bind(this)}).send(); + }, + + onAutocompleteComplete: function(responseText, responseXML) { + var data = JSON.decode(responseText); + this.input.erase('disabled'); + if ( varLSdefault.checkAjaxReturn(data) ) { + this.lastAutocompleteValues = new Hash(data.values); + this.showAutocompleteValues(); + } + }, + + showAutocompleteValues: function() { + if (!this.lastAutocompleteValues) return; + if (!$type(this.autocompleteUl)) { + this.autocompleteUl = new Element('ul'); + this.autocompleteUl.addClass('LSformElement_text_autocomplete'); + this.autocompleteUl.injectInside(this.li); + document.addEvent('click', this.closeAutocompleteIfOpen.bind(this)); + } + this.autocompleteUl.empty(); + if (this.lastAutocompleteValues) { + this.lastAutocompleteValues.each(this.addAutocompleteLi, this); + } + this.addAutocompleteNoValueLabelIfEmpty(); + + this.autocompleteUl.setStyle('display','block'); + }, + + addAutocompleteLi: function(name, value) { + var current = 0; + this.ul.getElements("input").each(function(input){ + if (input.value==value && input != this.input) { + current=1; + } + },this); + + var li = new Element('li'); + li.addClass('LSformElement_text_autocomplete'); + li.set('data-value', value); + li.set('html', name); + li.addEvent('mouseenter',this.onAutocompleteLiMouseEnter.bind(this,li)); + li.addEvent('mouseleave',this.onAutocompleteLiMouseLeave.bind(this,li)); + if (current) { + li.addClass('LSformElement_text_autocomplete_current'); + } + else { + li.addEvent('click',this.onAutocompleteLiClick.bind(this,li)); + } + li.injectInside(this.autocompleteUl); + }, + + addAutocompleteNoValueLabelIfEmpty: function() { + if (this.autocompleteUl.getElement('li') == null) { + var li = new Element('li'); + li.addClass('LSformElement_text_autocomplete'); + li.set('html', varLSdefault.LSjsConfig['LSformElement_text_autocomplete_noResultLabel']); + li.injectInside(this.autocompleteUl); + } + }, + + onAutocompleteLiMouseEnter: function(li) { + li.addClass('LSformElement_text_autocomplete_over'); + }, + + onAutocompleteLiMouseLeave: function(li) { + li.removeClass('LSformElement_text_autocomplete_over'); + }, + + onAutocompleteLiClick: function(li) { + this.closeAutocomplete(); + if (li.get('data-value')) { + this.input.value = li.get('data-value'); + } + }, + + autocompleteIsOpen: function() { + return ($type(this.autocompleteUl) == 'element' && this.autocompleteUl.getStyle('display') != 'none'); + }, + + closeAutocomplete: function() { + if (!this.autocompleteIsOpen()) return true; + this.autocompleteUl.setStyle('display', 'none'); + }, + + closeAutocompleteIfOpen: function(event) { + event = new Event(event); + if (!this.autocompleteIsOpen()) + return true; + if (event.target==this.input || event.target==this.autocompleteUl) + return true; + this.closeAutocomplete(); + }, }); diff --git a/src/lang/fr_FR.UTF8/LC_MESSAGES/ldapsaisie.mo b/src/lang/fr_FR.UTF8/LC_MESSAGES/ldapsaisie.mo index 4f6340d4..4cab6888 100644 Binary files a/src/lang/fr_FR.UTF8/LC_MESSAGES/ldapsaisie.mo and b/src/lang/fr_FR.UTF8/LC_MESSAGES/ldapsaisie.mo differ diff --git a/src/lang/fr_FR.UTF8/LC_MESSAGES/ldapsaisie.po b/src/lang/fr_FR.UTF8/LC_MESSAGES/ldapsaisie.po index 881cf083..44785ea3 100644 --- a/src/lang/fr_FR.UTF8/LC_MESSAGES/ldapsaisie.po +++ b/src/lang/fr_FR.UTF8/LC_MESSAGES/ldapsaisie.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: LdapSaisie\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2021-02-05 18:27+0100\n" +"PO-Revision-Date: 2021-03-03 14:25+0100\n" "Last-Translator: Benjamin Renard \n" "Language-Team: LdapSaisie \n" @@ -528,9 +528,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:623 -#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1279 -#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1421 +#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:631 +#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1285 +#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1429 #: templates/default/recoverpassword.tpl:21 msgid "Validate" msgstr "Valider" @@ -547,7 +547,7 @@ msgstr "" "LSauthMethod_anonymous : Vous devez définir la constante " "LSAUTHMETHOD_ANONYMOUS_USER dans le fichier de configuration." -#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSformElement.php:193 +#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSformElement.php:191 msgid "Attribute" msgstr "Attribut" @@ -674,11 +674,11 @@ msgstr "" #: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSrelation.php:701 #: /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: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 +#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearchEntry.php:177 +#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1045 +#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1213 +#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1298 +#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1442 msgid "Modify" msgstr "Modifier" @@ -689,8 +689,8 @@ msgid "No set value" msgstr "Aucune valeur définie" #: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSformElement_supannCompositeAttribute.php:108 +#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSformElement_text.php:66 #: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSformElement_select_object.php:76 -#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSformElement_mail.php:63 #: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSformElement_supannLabeledValue.php:64 msgid "No result" msgstr "Aucun résultat" @@ -894,11 +894,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:250 +#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:256 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:738 +#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:744 msgid "" "LSattribute : Attribute %{attr} : LDAP or HTML types unknow (LDAP = %{ldap} " "& HTML = %{html})." @@ -906,7 +906,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:741 +#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:747 msgid "" "LSattribute : The function %{func} to display the attribute %{attr} is " "unknow." @@ -914,14 +914,14 @@ msgstr "" "LSattribute : La fonction %{func} pour afficher l'attribut %{attr} est " "inconnue." -#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:744 +#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:750 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:747 +#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:753 msgid "" "LSattribute : Configuration data to verify the attribute %{attr} are " "incorrect." @@ -929,22 +929,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:750 +#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:756 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:753 +#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:759 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:756 +#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:762 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:759 +#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:765 msgid "" "LSattribute : Generation of the attribute %{attr} did not return a correct " "value." @@ -952,7 +952,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:762 +#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:768 msgid "" "LSattribute : The attr_%{type} of the attribute %{name} is not yet defined." msgstr "" @@ -989,48 +989,48 @@ msgstr "" msgid "Clear" msgstr "Nettoyer" -#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:1424 +#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:1432 msgid "Connection" msgstr "Connexion" -#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:1446 +#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:1454 msgid "Recovery of your credentials" msgstr "Récupération de votre mot de passe" -#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:1455 +#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:1463 msgid "Please fill the identifier field to proceed recovery procedure" msgstr "" "Merci d'entrer votre identifiant pour poursuivre la procédure de récupération" -#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:1460 +#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:1468 msgid "" "An email has been sent to %{mail}. Please follow the instructions on it." msgstr "" "Un e-mail vient de vous être envoyé à l'adresse %{mail}. Merci de suivre les " "indications qu'il contient." -#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:1469 +#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:1477 msgid "Your new password has been sent to %{mail}." 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/class/class.LSsession.php:1648 #: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:156 #: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:467 #: templates/default/select.tpl:29 msgid "Refresh" msgstr "Rafraîchir" -#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2718 +#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2726 #: templates/default/select.tpl:20 templates/default/recoverpassword.tpl:17 #: templates/default/login.tpl:16 msgid "Level" msgstr "Niveau" -#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2876 +#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2884 msgid "LSsession : The constant '%{const}' is not defined." msgstr "LSsession : La constante '%{const}' n'est pas définie." -#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2879 +#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2887 msgid "" "LSsession : The addon '%{addon}' support is uncertain. Verify system " "compatibility and the add-on configuration." @@ -1038,53 +1038,53 @@ msgstr "" "LSsession : Le support de l'addon '%{addon}' est incertain. Vérifiez la " "compatibilité du système et la configuration de l'add-on." -#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2882 +#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2890 msgid "" "LSsession : LDAP server's configuration data are invalid. Can't connect." msgstr "" "LSsession : Les données de configuration du serveur LDAP sont invalide. " "Impossible de s'y connecter." -#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2885 +#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2893 msgid "LSsession : Failed to load LSobject type '%{type}' : unknon type." msgstr "" "LSsession : Impossible de charger le type d'LSobject '%{type}' : type " "inconnu." -#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2888 +#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2896 msgid "LSsession : Failed to load LSclass '%{class}'." msgstr "LSsession : Impossible de charger la LSclass '%{class}'." -#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2891 +#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2899 msgid "LSsession : Login or password incorrect." msgstr "LSsession : Identifiant ou mot de passe incorrects." -#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2894 +#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2902 msgid "LSsession : Impossible to identify you : Duplication of identities." msgstr "LSsession : Impossible de vous identifier : Duplication d'identité." -#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2897 +#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2905 msgid "LSsession : Can't load class of authentification (%{class})." msgstr "" "LSsession : Impossible de charger la classe d'authentification (%{class})." -#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2900 +#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2908 msgid "LSsession : Can't connect to LDAP server." msgstr "LSsession : Impossible de se connecter au serveur LDAP." -#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2903 +#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2911 msgid "LSsession : Impossible to authenticate you." msgstr "LSsession : Impossible de vous identifier." -#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2906 +#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2914 msgid "LSsession : Your are not authorized to do this action." msgstr "LSsession : Vous n'êtes pas autorisé à faire cette action." -#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2909 +#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2917 msgid "LSsession : Some informations are missing to display this page." msgstr "LSsession : Des informations sont manquant pour afficher cette page." -#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2912 +#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2920 msgid "" "LSsession : The function '%{function}' of the custom action " "'%{customAction}' does not exists or is not configured." @@ -1092,24 +1092,24 @@ msgstr "" "LSsession : La fonction '%{function}' de l'action personnalisée " "'%{customAction}' n'existe pas ou n'est pas configurée." -#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2915 +#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2923 msgid "LSsession : Fail to retreive user's LDAP credentials from LSauth." msgstr "" "LSsession : Erreur en récupérant les identifiants LDAP de l'utilisateur " "depuis LSauth." -#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2918 +#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2926 msgid "" "LSsession : Fail to reconnect to LDAP server with user's LDAP credentials." msgstr "" "LSsession : Impossible de se reconnecter au serveur LDAP avec les " "identifiants de l'utilisateur." -#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2921 +#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2929 msgid "LSsession : No import/export format define for this object type." msgstr "LSsession : Aucun format d'entrée/sortie définie pour ce type d'objet." -#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2924 +#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2932 msgid "" "LSsession : Error during creation of list of levels. Contact administrators. " "(Code : %{code})" @@ -1117,13 +1117,13 @@ msgstr "" "LSsession : Erreur durant la création de la liste des niveaux. Contacter les " "administrateurs. (Code : %{type})" -#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2927 +#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2935 msgid "LSsession : The password recovery is disabled for this LDAP server." msgstr "" "LSsession : La récupération de mot de passe est désactivée pour ce serveur " "LDAP." -#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2930 +#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2938 msgid "" "LSsession : Some informations are missing to recover your password. Contact " "administrators." @@ -1131,7 +1131,7 @@ msgstr "" "LSsession : Des informations sont manques pour pouvoir récupérer votre mot " "de passe. Contacter les administrateurs." -#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2933 +#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2941 msgid "" "LSsession : Error during password recovery. Contact administrators.(Step : " "%{step})" @@ -1139,7 +1139,7 @@ msgstr "" "LSsession : Erreur durant la récupération de votre mot de passe. Contacter " "les administrateurs. (Etape : %{step})" -#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2936 +#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2944 msgid "" "LSsession : The function '%{func}' configured for the view '%{view}' of the " "LSaddon '%{addon}' is not declared in the LSaddon file." @@ -1147,7 +1147,7 @@ msgstr "" "LSsession : la fonction '%{func}' configurée pour la vue '%{view}' du " "LSaddon '%{addon}' n'est pas déclaré dans le fichier du LSaddon." -#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2940 +#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2948 msgid "" "LSsession : The function '%{func}' configured for the view '%{view}' of the " "LSaddon '%{addon}' doesn't exist." @@ -1155,11 +1155,11 @@ msgstr "" "LSsession : la fonction '%{func}' configurée pour la vue '%{view}' du " "LSaddon '%{addon}' n'existe pas." -#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2943 +#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2951 msgid "LSsession : invalid related object's DN pass in parameter." msgstr "LSsession : DN d'objet en relation incorrect dans les paramètres." -#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2946 +#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2954 msgid "" "LSsession : the LSaddon %{addon} keep using old-style addon view URL. Please " "upgrade it." @@ -1167,7 +1167,7 @@ msgstr "" "LSsession : le LSaddon %{addon} utilise toujours l'ancien type d'URL de " "vues. Merci de le mettre à jour." -#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2949 +#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2957 msgid "" "LSsession : You have been redirect from an old-style URL %{url}. Please " "upgrade this link." @@ -1175,7 +1175,7 @@ msgstr "" "LSsession : Vous avez été redirigé depuis une ancienne URL %{url}. Merci de " "le mettre à jour ce lien." -#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2952 +#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2960 msgid "" "LSsession : You always seem to use %{old} in your custom code: Please " "upgrade it and use %{new}.
\n"
@@ -1453,35 +1453,35 @@ msgstr ""
 "LSformRule_password : Regex invalide configurée : %{regex}. Vous devez "
 "utiliser des regex de type PCRE (commencant par le caractère '/')."
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSldap.php:581
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSldap.php:582
 msgid "LSldap: Error during the LDAP server connection (%{msg})."
 msgstr "LSldap : Erreur durant la connexion au serveur LDAP (%{msg})."
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSldap.php:584
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSldap.php:585
 msgid "LSldap: Error during the LDAP search (%{msg})."
 msgstr "LSldap : Erreur pendant la recherche LDAP (%{msg})."
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSldap.php:587
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSldap.php:588
 msgid "LSldap: Object type unknown."
 msgstr "LSldap : Type d'objet inconnu."
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSldap.php:590
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSldap.php:591
 msgid "LSldap: Error while fetching the LDAP entry."
 msgstr "LSldap : Erreur durant la récupération de l'entrée LDAP."
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSldap.php:593
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSldap.php:594
 msgid "LSldap: Error while changing the LDAP entry (DN : %{dn})."
 msgstr "LSldap : Erreur durant la modification de l'entrée LDAP (DN : %{dn})."
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSldap.php:596
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSldap.php:597
 msgid "LSldap: Error while deleting empty attributes."
 msgstr "LSldap : Erreur durant la suppression des attributs vides."
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSldap.php:599
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSldap.php:600
 msgid "LSldap: Error while changing the DN of the object."
 msgstr "LSldap : Erreur pendant la modification du DN de l'objet."
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSldap.php:602
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSldap.php:603
 msgid "LSldap: LDAP server base DN not configured."
 msgstr "LSldap : Le base DN du serveur LDAP n'est pas configuré."
 
@@ -1518,9 +1518,9 @@ msgstr "Attention"
 #: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSform.php:248
 #: /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:1055
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1199
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearchEntry.php:193
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1061
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1205
 msgid "Delete"
 msgstr "Supprimer"
 
@@ -1531,7 +1531,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:984
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:990
 msgid "New"
 msgstr "Nouveau"
 
@@ -1701,7 +1701,7 @@ msgstr "Afficher le site internet."
 msgid "Add this website to my bookmarks."
 msgstr "Ajouter ce site internet à mes favoris."
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSformElement_text.php:57
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSformElement_text.php:62
 msgid "Generate the value"
 msgstr "Générer une valeur"
 
@@ -1729,14 +1729,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:619
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:627
 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:1415
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1423
 msgid ""
 "Do you really want to execute custom action %{customAction} on "
 "%{objectname} ?"
@@ -1798,7 +1798,7 @@ msgstr ""
 "LSform : L'élement %{name}, listé comme affiché dans la configuration du "
 "masque de saisie, n'existe pas."
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSformElement_maildir.php:68
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSformElement_maildir.php:70
 msgid ""
 "Maildir creation/modification on user creation/modification is enabled. "
 "Click to disable."
@@ -1806,7 +1806,7 @@ msgstr ""
 "La création/modification de la maildir en même temps que la création/"
 "modification de l'utilisateur est activée. Cliquer pour désactiver."
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSformElement_maildir.php:69
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSformElement_maildir.php:71
 msgid ""
 "Click to enable maildir creation/modification on user creation/modification."
 msgstr ""
@@ -1872,10 +1872,23 @@ msgstr "LdapSaisie - Authentification requise"
 msgid "LSauthMethod_HTTP : the %{var} environnement variable is missing."
 msgstr "LSauthMethod_HTTP : la variable d'environnement %{var} est manquante."
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSformElement_mail.php:56
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSformElement_mail.php:88
 msgid "Send a mail from here."
 msgstr "Envoyer un mail depuis l'interface."
 
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSformElement_mail.php:120
+msgid ""
+"LSformElement_mail: the autocomplete feature was moved to parent "
+"LSformElement_text class and you still use old configuration style with "
+"parameter mail_attributes (and its default value). Please upgrade your "
+"configuration by renaming (or setting) this parameter to value_attributes."
+msgstr ""
+"LSformElement_mail : la fonctionnalité d'auto-complétion a été déplacée dans "
+"la classe parente LSformElement_text et vous utilisez toujours l'ancien "
+"style de configuration avec le paramètre mail_attributes (et sa valeur par "
+"défaut). Merci de mettre à jour votre configuration en renommant (ou en "
+"définissant) ce paramètre en value_attributes."
+
 #: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSformElement_boolean.php:52
 msgid "Reset the choice."
 msgstr "Réinitialiser le choix."
@@ -1885,12 +1898,12 @@ 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:579
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1365
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:580
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1372
 msgid "undefined"
 msgstr "non-définie"
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattr_ldap_password.php:350
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattr_ldap_password.php:354
 msgid ""
 "LSattr_ldap_password : Encoding type %{type} is not supported. This password "
 "will be stored in clear text."
@@ -1898,7 +1911,7 @@ msgstr ""
 "LSattr_ldap_password : Le type d'encodage %{type} n'est pas supporté. Le mot "
 "de passe sera stocké en clair."
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattr_ldap_password.php:353
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattr_ldap_password.php:357
 msgid ""
 "LSattr_ldap_password : Encoding function %{function} is not callable. This "
 "password will be stored in clear text."
@@ -1988,39 +2001,39 @@ msgstr "Étape"
 msgid "Pedagogical element"
 msgstr "Élement pédagogique"
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1200
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1202
 msgid "Actions"
 msgstr "Actions"
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1203
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1205
 #: templates/default/global_search.tpl:16
 msgid "This search didn't get any result."
 msgstr "Cette recherche n'a retournée aucun résultat."
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1842
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1844
 msgid "LSsearch : Invalid filter : %{filter}."
 msgstr "LSsearch : Filtre invalide : %{filter}."
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1845
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1847
 msgid "LSsearch : Invalid basedn : %{basedn}."
 msgstr "LSsearch : Base DN invalide."
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1848
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1850
 msgid "LSsearch : Invalid value for %{param} parameter."
 msgstr "LSsearch : La valeur du paramètre %{param} est incorrecte."
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1851
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1853
 msgid ""
 "LSsearch : Invalid size limit. Must be an integer greater or equal to 0."
 msgstr ""
 "LSsearch : Limite de taille de recherche invalide. Elle doit être un entier "
 "supérieur ou égal à 0."
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1854
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1856
 msgid "LSsearch : Invalid parameter %{attr}. Must be an boolean."
 msgstr "LSsearch : Paramètre %{param} invalide. Il doit être un booléen."
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1857
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1859
 msgid ""
 "LSsearch : Invalid parameter attributes. Must be an string or an array of "
 "strings."
@@ -2028,13 +2041,13 @@ msgstr ""
 "LSsearch : Paramètre 'attributes' invalide. Il doit être une chaîne de "
 "caractères ou un tableau de chaînes de caractères."
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1860
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1862
 msgid "LSsearch : Can't build attributes list for make filter."
 msgstr ""
 "LSsearch : Impossible de construire la liste des attributs pour faire le "
 "filtre."
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1863
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1865
 msgid ""
 "LSsearch : Error building filter with attribute '%{attr}' and pattern "
 "'%{pattern}'"
@@ -2042,34 +2055,34 @@ msgstr ""
 "LSsearch : Problème en construisant le filtre avec l'attribut '%{attr}' et "
 "le mot clé '%{pattern}'"
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1866
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1868
 msgid "LSsearch : Error combining filters."
 msgstr "LSsearch : Problème en combinant les filtres."
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1869
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1871
 msgid "LSsearch : Invalid pattern."
 msgstr "LSsearch : Mot clé invalide."
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1872
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1874
 msgid "LSsearch : Invalid attribute %{attr} in parameters."
 msgstr "LSsearch : Attribut %{attr} incorrect dans les paramètres."
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1875
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1877
 msgid "LSsearch : Error during the search."
 msgstr "LSsearch : Erreur pendant la recherche."
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1878
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1880
 msgid "LSsearch : Error sorting the search."
 msgstr "LSsearch : Erreur pendant le trie de la recherche."
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1881
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1883
 msgid ""
 "LSsearch : The function of the custum information %{name} is not callable."
 msgstr ""
 "LSsearch : La fonction de l'information personnalisée %{name} n'est pas "
 "exécutable."
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1884
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1886
 msgid ""
 "LSsearch : Invalid predefinedFilter for LSobject type %{type} : %{label} "
 "(filter : %{filter})."
@@ -2077,13 +2090,13 @@ msgstr ""
 "LSsearch : PredefinedFilter invalide pour le type d'LSobject %{type} : "
 "%{label} (filtre : %{filter})."
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1887
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1889
 msgid "LSsearch : Error during execution of the custom action %{customAction}."
 msgstr ""
 "LSldapObject : Erreur durant l'exécution de l'action personnalisée "
 "%{customAction}."
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1890
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1892
 msgid "LSsearch : Invalid search pattern."
 msgstr "LSsearch : Mot clé de recherche invalide."
 
@@ -2259,7 +2272,7 @@ 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:247
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSioFormatCSV.php:246
 msgid "LSioFormatCSV: function fputcsv is not available."
 msgstr "LSioFormatCSV : la fonction fputcsv n'est pas disponible."
 
@@ -2284,23 +2297,23 @@ msgstr "Erreur inconnue"
 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:1191
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1284
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1426
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearchEntry.php:169
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1197
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1290
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1434
 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:1047
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearchEntry.php:185
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1053
 msgid "Copy"
 msgstr "Copier"
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearchEntry.php:258
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearchEntry.php:261
 msgid "Unknown property !"
 msgstr "Propriété inconnue !"
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearchEntry.php:280
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearchEntry.php:283
 msgid ""
 "LSsearchEntry : Invalid formaterFunction %{func} for extraDisplayedColumns "
 "%{column}."
@@ -2308,7 +2321,7 @@ msgstr ""
 "LSsearchEntry : formaterFunction %{func} invalide utilisé pour "
 "l'extraDisplayedColumns %{column}."
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSioFormat.php:145
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSioFormat.php:154
 msgid "LSioFormat : IOformat driver %{driver} invalid or unavailable."
 msgstr ""
 "LSioFormat : Le pilote d'IOformat %{driver} est invalide ou n'est pas "
@@ -2323,12 +2336,12 @@ msgid "You must provide pattern for global search."
 msgstr "Vous devez fournir un mot clé pour les recherches globales."
 
 #: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:455
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:803
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:811
 msgid "Import"
 msgstr "Importer"
 
 #: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:460
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:871
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:877
 msgid "Export"
 msgstr "Exporter"
 
@@ -2351,50 +2364,50 @@ msgstr "Recherche approximative"
 msgid "Recursive search"
 msgstr "Recherche récursive"
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:598
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:601
 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:943
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:949
 msgid "Data entry form"
 msgstr "Masque de saisie"
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:949
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1665
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:955
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1673
 msgid "Object has been added."
 msgstr "L'objet a été ajouté."
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1086
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1092
 msgid "My account"
 msgstr "Mon compte"
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1149
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1756
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1155
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1847
 msgid "The object has been partially modified."
 msgstr "L'objet a été partiellement modifié."
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1152
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1759
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1158
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1850
 msgid "The object has been modified successfully."
 msgstr "L'objet a bien été modifié."
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1267
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1800
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1273
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1891
 msgid "%{objectname} has been successfully deleted."
 msgstr "%{objectname} a bien été supprimé."
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1276
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1282
 msgid "Deleting : %{objectname}"
 msgstr "Suppression : %{objectname}"
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1277
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1283
 msgid "Do you really want to delete %{displayName} ?"
 msgstr "Voulez-vous vraiment supprimer %{displayName} ?"
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1387
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1392
 msgid ""
 "The custom action %{customAction} have been successfully execute on "
 "%{objectname}."
@@ -2525,7 +2538,7 @@ msgstr "Fichier"
 msgid "Forgot your password ?"
 msgstr "Mot de passe perdu ?"
 
-#: templates/default/export.tpl:8 templates/default/import.tpl:13
+#: templates/default/export.tpl:9 templates/default/import.tpl:13
 msgid "Format"
 msgstr "Format"
 
@@ -2673,7 +2686,7 @@ msgstr "Mise à jour des objets existants"
 msgid "Updated objects"
 msgstr "Objets mis à jour"
 
-#: templates/default/export.tpl:15 templates/default/import.tpl:36
+#: templates/default/export.tpl:16 templates/default/import.tpl:36
 msgid "Valid"
 msgstr "Valider"
 
diff --git a/src/lang/ldapsaisie.pot b/src/lang/ldapsaisie.pot
index d993c808..6c72ea66 100644
--- a/src/lang/ldapsaisie.pot
+++ b/src/lang/ldapsaisie.pot
@@ -444,9 +444,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:623
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1279
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1421
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:631
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1285
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1429
 #: templates/default/recoverpassword.tpl:21
 msgid "Validate"
 msgstr ""
@@ -461,7 +461,7 @@ msgid ""
 "contant in the configuration file."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSformElement.php:193
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSformElement.php:191
 msgid "Attribute"
 msgstr ""
 
@@ -576,11 +576,11 @@ msgstr ""
 #: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSrelation.php:701
 #: /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: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
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearchEntry.php:177
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1045
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1213
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1298
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1442
 msgid "Modify"
 msgstr ""
 
@@ -591,8 +591,8 @@ msgid "No set value"
 msgstr ""
 
 #: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSformElement_supannCompositeAttribute.php:108
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSformElement_text.php:66
 #: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSformElement_select_object.php:76
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSformElement_mail.php:63
 #: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSformElement_supannLabeledValue.php:64
 msgid "No result"
 msgstr ""
@@ -761,53 +761,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:250
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:256
 msgid "The value of field %{label} is invalid."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:738
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:744
 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:741
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:747
 msgid ""
 "LSattribute : The function %{func} to display the attribute %{attr} is "
 "unknow."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:744
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:750
 msgid ""
 "LSattribute : The rule %{rule} to validate the attribute %{attr} is unknow."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:747
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:753
 msgid ""
 "LSattribute : Configuration data to verify the attribute %{attr} are "
 "incorrect."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:750
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:756
 msgid ""
 "LSattribute : The function %{func} to save the attribute %{attr} is unknow."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:753
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:759
 msgid "LSattribute : The value of the attribute %{attr} can't be generated."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:756
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:762
 msgid "LSattribute : Generation of the attribute %{attr} failed."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:759
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:765
 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:762
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattribute.php:768
 msgid ""
 "LSattribute : The attr_%{type} of the attribute %{name} is not yet defined."
 msgstr ""
@@ -838,161 +838,161 @@ msgstr ""
 msgid "Clear"
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:1424
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:1432
 msgid "Connection"
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:1446
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:1454
 msgid "Recovery of your credentials"
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:1455
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:1463
 msgid "Please fill the identifier field to proceed recovery procedure"
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:1460
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:1468
 msgid ""
 "An email has been sent to  %{mail}. Please follow the instructions on it."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:1469
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:1477
 msgid "Your new password has been sent to %{mail}."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:1640
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:1648
 #: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:156
 #: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:467
 #: templates/default/select.tpl:29
 msgid "Refresh"
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2718
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2726
 #: templates/default/select.tpl:20 templates/default/recoverpassword.tpl:17
 #: templates/default/login.tpl:16
 msgid "Level"
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2876
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2884
 msgid "LSsession : The constant '%{const}' is not defined."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2879
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2887
 msgid ""
 "LSsession : The addon '%{addon}' support is uncertain. Verify system "
 "compatibility and the add-on configuration."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2882
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2890
 msgid ""
 "LSsession : LDAP server's configuration data are invalid. Can't connect."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2885
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2893
 msgid "LSsession : Failed to load LSobject type '%{type}' : unknon type."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2888
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2896
 msgid "LSsession : Failed to load LSclass '%{class}'."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2891
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2899
 msgid "LSsession : Login or password incorrect."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2894
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2902
 msgid "LSsession : Impossible to identify you : Duplication of identities."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2897
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2905
 msgid "LSsession : Can't load class of authentification (%{class})."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2900
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2908
 msgid "LSsession : Can't connect to LDAP server."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2903
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2911
 msgid "LSsession : Impossible to authenticate you."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2906
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2914
 msgid "LSsession : Your are not authorized to do this action."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2909
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2917
 msgid "LSsession : Some informations are missing to display this page."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2912
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2920
 msgid ""
 "LSsession : The function '%{function}' of the custom action "
 "'%{customAction}' does not exists or is not configured."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2915
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2923
 msgid "LSsession : Fail to retreive user's LDAP credentials from LSauth."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2918
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2926
 msgid ""
 "LSsession : Fail to reconnect to LDAP server with user's LDAP credentials."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2921
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2929
 msgid "LSsession : No import/export format define for this object type."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2924
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2932
 msgid ""
 "LSsession : Error during creation of list of levels. Contact administrators. "
 "(Code : %{code})"
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2927
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2935
 msgid "LSsession : The password recovery is disabled for this LDAP server."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2930
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2938
 msgid ""
 "LSsession : Some informations are missing to recover your password. Contact "
 "administrators."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2933
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2941
 msgid ""
 "LSsession : Error during password recovery. Contact administrators.(Step : "
 "%{step})"
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2936
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2944
 msgid ""
 "LSsession : The function '%{func}' configured for the view '%{view}' of the "
 "LSaddon '%{addon}' is not declared in the LSaddon file."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2940
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2948
 msgid ""
 "LSsession : The function '%{func}' configured for the view '%{view}' of the "
 "LSaddon '%{addon}' doesn't exist."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2943
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2951
 msgid "LSsession : invalid related object's DN pass in parameter."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2946
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2954
 msgid ""
 "LSsession : the LSaddon %{addon} keep using old-style addon view URL. Please "
 "upgrade it."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2949
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2957
 msgid ""
 "LSsession : You have been redirect from an old-style URL %{url}. Please "
 "upgrade this link."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2952
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsession.php:2960
 msgid ""
 "LSsession : You always seem to use %{old} in your custom code: Please "
 "upgrade it and use %{new}.
\n"
@@ -1204,35 +1204,35 @@ msgid ""
 "(begining by '/' caracter)."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSldap.php:581
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSldap.php:582
 msgid "LSldap: Error during the LDAP server connection (%{msg})."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSldap.php:584
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSldap.php:585
 msgid "LSldap: Error during the LDAP search (%{msg})."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSldap.php:587
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSldap.php:588
 msgid "LSldap: Object type unknown."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSldap.php:590
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSldap.php:591
 msgid "LSldap: Error while fetching the LDAP entry."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSldap.php:593
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSldap.php:594
 msgid "LSldap: Error while changing the LDAP entry (DN : %{dn})."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSldap.php:596
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSldap.php:597
 msgid "LSldap: Error while deleting empty attributes."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSldap.php:599
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSldap.php:600
 msgid "LSldap: Error while changing the DN of the object."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSldap.php:602
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSldap.php:603
 msgid "LSldap: LDAP server base DN not configured."
 msgstr ""
 
@@ -1269,9 +1269,9 @@ msgstr ""
 #: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSform.php:248
 #: /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:1055
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1199
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearchEntry.php:193
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1061
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1205
 msgid "Delete"
 msgstr ""
 
@@ -1282,7 +1282,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:984
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:990
 msgid "New"
 msgstr ""
 
@@ -1420,7 +1420,7 @@ msgstr ""
 msgid "Add this website to my bookmarks."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSformElement_text.php:57
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSformElement_text.php:62
 msgid "Generate the value"
 msgstr ""
 
@@ -1444,12 +1444,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:619
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:627
 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:1415
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1423
 msgid ""
 "Do you really want to execute custom action %{customAction} on "
 "%{objectname} ?"
@@ -1506,13 +1506,13 @@ msgid ""
 "configuration, doesn't exist."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSformElement_maildir.php:68
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSformElement_maildir.php:70
 msgid ""
 "Maildir creation/modification on user creation/modification is enabled. "
 "Click to disable."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSformElement_maildir.php:69
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSformElement_maildir.php:71
 msgid ""
 "Click to enable maildir creation/modification on user creation/modification."
 msgstr ""
@@ -1574,10 +1574,18 @@ msgstr ""
 msgid "LSauthMethod_HTTP : the %{var} environnement variable is missing."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSformElement_mail.php:56
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSformElement_mail.php:88
 msgid "Send a mail from here."
 msgstr ""
 
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSformElement_mail.php:120
+msgid ""
+"LSformElement_mail: the autocomplete feature was moved to parent "
+"LSformElement_text class and you still use old configuration style with "
+"parameter mail_attributes (and its default value). Please upgrade your "
+"configuration by renaming (or setting) this parameter to value_attributes."
+msgstr ""
+
 #: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSformElement_boolean.php:52
 msgid "Reset the choice."
 msgstr ""
@@ -1587,18 +1595,18 @@ 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:579
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1365
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:580
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1372
 msgid "undefined"
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattr_ldap_password.php:350
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattr_ldap_password.php:354
 msgid ""
 "LSattr_ldap_password : Encoding type %{type} is not supported. This password "
 "will be stored in clear text."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattr_ldap_password.php:353
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSattr_ldap_password.php:357
 msgid ""
 "LSattr_ldap_password : Encoding function %{function} is not callable. This "
 "password will be stored in clear text."
@@ -1681,88 +1689,88 @@ msgstr ""
 msgid "Pedagogical element"
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1200
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1202
 msgid "Actions"
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1203
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1205
 #: templates/default/global_search.tpl:16
 msgid "This search didn't get any result."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1842
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1844
 msgid "LSsearch : Invalid filter : %{filter}."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1845
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1847
 msgid "LSsearch : Invalid basedn : %{basedn}."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1848
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1850
 msgid "LSsearch : Invalid value for %{param} parameter."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1851
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1853
 msgid ""
 "LSsearch : Invalid size limit. Must be an integer greater or equal to 0."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1854
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1856
 msgid "LSsearch : Invalid parameter %{attr}. Must be an boolean."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1857
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1859
 msgid ""
 "LSsearch : Invalid parameter attributes. Must be an string or an array of "
 "strings."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1860
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1862
 msgid "LSsearch : Can't build attributes list for make filter."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1863
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1865
 msgid ""
 "LSsearch : Error building filter with attribute '%{attr}' and pattern "
 "'%{pattern}'"
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1866
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1868
 msgid "LSsearch : Error combining filters."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1869
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1871
 msgid "LSsearch : Invalid pattern."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1872
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1874
 msgid "LSsearch : Invalid attribute %{attr} in parameters."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1875
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1877
 msgid "LSsearch : Error during the search."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1878
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1880
 msgid "LSsearch : Error sorting the search."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1881
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1883
 msgid ""
 "LSsearch : The function of the custum information %{name} is not callable."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1884
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1886
 msgid ""
 "LSsearch : Invalid predefinedFilter for LSobject type %{type} : %{label} "
 "(filter : %{filter})."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1887
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1889
 msgid "LSsearch : Error during execution of the custom action %{customAction}."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1890
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearch.php:1892
 msgid "LSsearch : Invalid search pattern."
 msgstr ""
 
@@ -1914,7 +1922,7 @@ msgstr ""
 msgid "LScli : The CLI command '%{command}' handler is not callable."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSioFormatCSV.php:247
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSioFormatCSV.php:246
 msgid "LSioFormatCSV: function fputcsv is not available."
 msgstr ""
 
@@ -1939,29 +1947,29 @@ msgstr ""
 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:1191
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1284
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1426
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearchEntry.php:169
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1197
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1290
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1434
 msgid "View"
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearchEntry.php:182
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1047
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearchEntry.php:185
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1053
 msgid "Copy"
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearchEntry.php:258
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearchEntry.php:261
 msgid "Unknown property !"
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearchEntry.php:280
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSsearchEntry.php:283
 msgid ""
 "LSsearchEntry : Invalid formaterFunction %{func} for extraDisplayedColumns "
 "%{column}."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSioFormat.php:145
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/class/class.LSioFormat.php:154
 msgid "LSioFormat : IOformat driver %{driver} invalid or unavailable."
 msgstr ""
 
@@ -1974,12 +1982,12 @@ msgid "You must provide pattern for global search."
 msgstr ""
 
 #: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:455
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:803
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:811
 msgid "Import"
 msgstr ""
 
 #: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:460
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:871
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:877
 msgid "Export"
 msgstr ""
 
@@ -2002,48 +2010,48 @@ msgstr ""
 msgid "Recursive search"
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:598
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:601
 msgid ""
 "The custom action %{title} have been successfully execute on this search."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:943
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:949
 msgid "Data entry form"
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:949
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1665
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:955
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1673
 msgid "Object has been added."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1086
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1092
 msgid "My account"
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1149
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1756
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1155
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1847
 msgid "The object has been partially modified."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1152
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1759
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1158
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1850
 msgid "The object has been modified successfully."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1267
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1800
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1273
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1891
 msgid "%{objectname} has been successfully deleted."
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1276
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1282
 msgid "Deleting : %{objectname}"
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1277
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1283
 msgid "Do you really want to delete %{displayName} ?"
 msgstr ""
 
-#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1387
+#: /home/brenard/dev/ldapsaisie_clean3/src/includes/routes.php:1392
 msgid ""
 "The custom action %{customAction} have been successfully execute on "
 "%{objectname}."
@@ -2172,7 +2180,7 @@ msgstr ""
 msgid "Forgot your password ?"
 msgstr ""
 
-#: templates/default/export.tpl:8 templates/default/import.tpl:13
+#: templates/default/export.tpl:9 templates/default/import.tpl:13
 msgid "Format"
 msgstr ""
 
@@ -2318,7 +2326,7 @@ msgstr ""
 msgid "Updated objects"
 msgstr ""
 
-#: templates/default/export.tpl:15 templates/default/import.tpl:36
+#: templates/default/export.tpl:16 templates/default/import.tpl:36
 msgid "Valid"
 msgstr ""
 
diff --git a/src/templates/default/LSformElement_maildir_field.tpl b/src/templates/default/LSformElement_maildir_field.tpl
deleted file mode 100644
index bf02e7a8..00000000
--- a/src/templates/default/LSformElement_maildir_field.tpl
+++ /dev/null
@@ -1,5 +0,0 @@
-{if $freeze}
-{if $value}{$value|escape:"htmlall"}{else}{$noValueTxt|escape:"htmlall"}{/if}
-{else}
-
-{/if}
diff --git a/src/templates/default/LSformElement_text_field.tpl b/src/templates/default/LSformElement_text_field.tpl
index 45d81400..4580bd31 100644
--- a/src/templates/default/LSformElement_text_field.tpl
+++ b/src/templates/default/LSformElement_text_field.tpl
@@ -1,5 +1,6 @@
 {if $freeze}
-{if $value}{$value|escape:"htmlall"}{else}{$noValueTxt|escape:"htmlall"}{/if}
+{if $value}{$value|escape:"htmlall"}{else}{$noValueTxt|escape:"htmlall"}{/if}
+
 {else}
-
+
 {/if}
diff --git a/src/templates/default/LSformElement_uri_field.tpl b/src/templates/default/LSformElement_uri_field.tpl
index a3328570..b51c047b 100644
--- a/src/templates/default/LSformElement_uri_field.tpl
+++ b/src/templates/default/LSformElement_uri_field.tpl
@@ -1,12 +1,12 @@
 {if $freeze}
   
   {if $value}
-    {$value|escape:"htmlall"}
+    {$value|escape:"htmlall"}
   {else}
     {$noValueTxt|escape:"htmlall"}
   {/if}
   
-  
+  
 {else}
-  
+  
 {/if}