diff --git a/doc/conf/LSattribute/check-data.docbook b/doc/conf/LSattribute/check-data.docbook
index c6c2c5d8..011a9b83 100644
--- a/doc/conf/LSattribute/check-data.docbook
+++ b/doc/conf/LSattribute/check-data.docbook
@@ -3,14 +3,14 @@
Cette section décrit la manière de configuer des règles de vérification
syntaxique sur les données des attributs. Ces règles seront utilisées pour vérifier
que les valeurs saisies par un utilisateur dans un formulaire sont correctes.
-
+
Structure...
array (
'[regle1]' => array(
'msg' => "[Message d'erreur]",
'params' => array(
- // Paramètres de la règle
+ // Paramètres de la règle
)
),
...
@@ -18,7 +18,7 @@
...
-Le paramètre check_data est un tableau associatif
+Le paramètre check_data est un tableau associatif
dont les clés sont les noms des règles de vérification syntaxique actives et les
valeurs associées sont des tableaux associatifs contenant les paramètres des
règles.
@@ -29,7 +29,7 @@ règles.
msg
- Le message d'erreur à afficher lors que la règle n'est pas respectée.
+ Le message d'erreur à afficher lors que la règle n'est pas respectée (optionel).
diff --git a/src/includes/class/class.LSform.php b/src/includes/class/class.LSform.php
index 8da5dde3..eaf52118 100644
--- a/src/includes/class/class.LSform.php
+++ b/src/includes/class/class.LSform.php
@@ -395,13 +395,13 @@ class LSform extends LSlog_staticLoggerClass {
// Iter on rules and check element values with each of them
foreach($this -> _rules[$element] as $rule) {
- if (
- !LSformRule :: validate_values(
- $rule['name'], $values, $rule['options'], $this -> elements[$element]
- )
- ) {
+ $errors = LSformRule :: validate_values(
+ $rule['name'], $values, $rule['options'], $this -> elements[$element]
+ );
+ if (is_array($errors)) {
$retval = false;
- $this -> setElementError($this -> elements[$element], $rule['options']['msg']);
+ foreach ($errors as $error)
+ $this -> setElementError($this -> elements[$element], $error);
}
}
}
diff --git a/src/includes/class/class.LSformRule.php b/src/includes/class/class.LSformRule.php
index 948b64b3..b16c9d88 100644
--- a/src/includes/class/class.LSformRule.php
+++ b/src/includes/class/class.LSformRule.php
@@ -48,18 +48,32 @@ class LSformRule extends LSlog_staticLoggerClass {
// Load PHP class (with error if fail)
if (!LSsession :: loadLSclass($rule_class)) {
- LSerror :: addErrorCode('LSformRule_02', $rule_name);
- return False;
+ return array(
+ getFData(_('Invalid syntax checking configuration: unknown rule %{rule}.'), $rule_name)
+ );
}
- if (! $rule_class :: validate_one_by_one)
- return $rule_class :: validate($values, $options, $formElement);
-
- foreach ($values as $value) {
- if (!$rule_class :: validate($value, $options, $formElement))
- return False;
+ $errors = false;
+ try {
+ if (! $rule_class :: validate_one_by_one) {
+ if (!$rule_class :: validate($values, $options, $formElement))
+ throw new LSformRuleException();
+ }
+ else {
+ foreach ($values as $value) {
+ if (!$rule_class :: validate($value, $options, $formElement))
+ throw new LSformRuleException();
+ }
+ }
}
- return True;
+ catch (LSformRuleException $e) {
+ $errors = $e->errors;
+ $msg = LSconfig :: get('msg', null, null, $options);
+ if ($msg || !$errors) {
+ $errors[] = ($msg?__($msg):_('Invalid value'));
+ }
+ }
+ return ($errors?$errors:true);
}
/**
@@ -77,12 +91,22 @@ class LSformRule extends LSlog_staticLoggerClass {
}
+class LSformRuleException extends Exception {
+
+ public $errors = array();
+
+ public function __construct($errors=array(), $code = 0, Throwable $previous = null) {
+ $this -> errors = ensureIsArray($errors);
+ $message = _("Invalid value");
+ if ($this -> errors)
+ $message .= ': '.implode(", ", $this -> errors);
+ parent::__construct($message, $code, $previous);
+ }
+}
+
/**
* Error Codes
**/
LSerror :: defineError('LSformRule_01',
___("LSformRule_%{type}: Parameter %{param} is not found.")
);
-LSerror :: defineError('LSformRule_02',
-___("LSformRule: Unknown rule type %{type}.")
-);