From 20551d89c88997ddea88b12a5258622c1b067bc6 Mon Sep 17 00:00:00 2001
From: "rastapopoulos@spip.org" <>
Date: Tue, 16 Nov 2010 16:12:55 +0000
Subject: [PATCH] =?UTF-8?q?V=C3=A9rifier=20une=20valeur=20d=C3=A9cimale,?=
 =?UTF-8?q?=20y=20compris=20en=20v=C3=A9rifiant=20le=20nombre=20de=20chiff?=
 =?UTF-8?q?res=20apr=C3=A8s=20la=20virgule.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .gitattributes        |  2 ++
 lang/verifier_fr.php  |  7 +++++-
 verifier/decimal.php  | 51 +++++++++++++++++++++++++++++++++++++++++++
 verifier/decimal.yaml | 26 ++++++++++++++++++++++
 4 files changed, 85 insertions(+), 1 deletion(-)
 create mode 100644 verifier/decimal.php
 create mode 100644 verifier/decimal.yaml

diff --git a/.gitattributes b/.gitattributes
index 5e11c0d..af8db2e 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -10,6 +10,8 @@ test/verifier.html -text
 verifier/code_postal.php -text
 verifier/date.php -text
 verifier/date.yaml -text
+verifier/decimal.php -text
+verifier/decimal.yaml -text
 verifier/email.php -text
 verifier/email.yaml -text
 verifier/entier.php -text
diff --git a/lang/verifier_fr.php b/lang/verifier_fr.php
index 768f622..d331c8a 100644
--- a/lang/verifier_fr.php
+++ b/lang/verifier_fr.php
@@ -9,6 +9,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
 	'erreur_code_postal' => 'Ce code postal est incorrect.',
 	'erreur_date' => 'La date n\'est pas valide.',
 	'erreur_date_format' => 'Le format de la date n\'est pas accept&eacute;.',
+	'erreur_decimal' => 'La valeur doit &ecirc;tre un nombre d&eacute;cimal.',
+	'erreur_decimal_nb_decimales' => 'Le nombre ne doit pas avoir plus de @nb_decimales@ chiffres apr&egrave;s la virgule.',
 	'erreur_email' => 'L\'adresse de courriel <em>@email@</em> n\'a pas un format valide.',
 	'erreur_email_nondispo' => 'L\'adresse de courriel <em>@email@</em> est d&eacute;j&agrave; utilis&eacute;e.',
 	'erreur_entier' => 'La valeur doit &ecirc;tre un entier.',
@@ -28,6 +30,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
 	'erreur_url' => 'L\'adresse n\\\'est pas valide.',
 
 	// O
+	'option_decimal_nb_decimales_label' => 'Nombre de d&eacute;cimales apr&egrave;s la virgule',
 	'option_email_disponible_label' => 'Adresse disponible',
 	'option_email_disponible_label_case' => 'V&eacute;rifier que l\'adresse n\'est pas d&eacute;j&agrave; utilis&eacute;e par un utilisateur',
 	'option_email_mode_5322' => 'V&eacute;rification la plus conforme aux standards disponibles',
@@ -46,11 +49,13 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
 	// T
 	'type_date' => 'Date',
 	'type_date_description' => 'V&eacute;rifie que la valeur est une date au format JJ/MM/AAAA. Le s&eacute;parateur est libre (&quot;.&quot;, &quot;/&quot;, etc).',
+	'type_decimal' => 'Nombre &agrave; d&eacute;cimal',
+	'type_decimal_description' => 'V&eacute;rifie que la valeur est un nombre d&eacute;cimal, avec la possibilit&eacute; de restreindre entre deux valeurs et de pr&eacute;ciser le nombre de d&eacute;cimales apr&egrave;s la virgule.',
 	'type_email' => 'Adresse de courriel',
 	'type_email_description' => 'V&eacute;rifie que l\'adresse de courriel a un format correct.',
 	'type_email_disponible' => 'Disponibilit&eacute; d\'une adresse de courriel',
 	'type_email_disponible_description' => 'V&eacute;rifie que l\'adresse de courriel n\'est pas d&eacute;j&agrave; utilis&eacute; par un autre utilisateur du syst&egrave;me.',
-	'type_entier' => 'Entier',
+	'type_entier' => 'Nombre entier',
 	'type_entier_description' => 'V&eacute;rifie que la valeur est un entier, avec la possibilit&eacute; de restreindre entre deux valeurs.',
 	'type_regex' => 'Expression r&eacute;guli&egrave;re',
 	'type_regex_description' => 'V&eacute;rifie que la valeur correspond au masque demand&eacute;. Pour l\'utilisation des masques, reportez-vous à <a href="http://fr2.php.net/manual/fr/reference.pcre.pattern.syntax.php">l\'aide en ligne de PHP</a>.',
diff --git a/verifier/decimal.php b/verifier/decimal.php
new file mode 100644
index 0000000..92be676
--- /dev/null
+++ b/verifier/decimal.php
@@ -0,0 +1,51 @@
+<?php
+
+// Sécurité
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+/**
+ * Vérifie qu'un entier cohérent peut être extrait de la valeur
+ * Options :
+ * - min : valeur minimale acceptée
+ * - max : valeur maximale acceptée
+ *
+ * @param string $valeur La valeur à vérifier.
+ * @param array $option Si ce tableau associatif contient une valeur pour 'min' ou 'max', un contrôle supplémentaire sera effectué.
+ * @return string Retourne une chaine vide si c'est valide, sinon une chaine expliquant l'erreur.
+ */
+function verifier_decimal_dist($valeur, $options=array()){
+	$erreur = _T('verifier:erreur_decimal');
+	
+	// Pas de tableau ni d'objet
+	if (is_numeric($valeur) and $valeur == floatval($valeur)){
+		// Si c'est une chaine on convertit en flottant
+		$valeur = floatval($valeur);
+		$ok = true;
+		$erreur = '';
+		
+		if (isset($options['min']))
+			$ok = ($ok and ($valeur >= $options['min']));
+		
+		if (isset($options['max'])){
+			$ok = ($ok and ($valeur <= $options['max']));
+		}
+		
+		if (!$ok){
+			if (isset($options['min']) and isset($options['max']))
+				$erreur = _T('verifier:erreur_entier_entre', $options);
+			elseif (isset($options['max']))
+				$erreur = _T('verifier:erreur_entier_max', $options);
+			else
+				$erreur = _T('verifier:erreur_entier_min', $options);
+		}
+	}
+	
+	// On vérifie le nombre de décimales après la virgule
+	if ($nb_decimales = $options['nb_decimales'] and round($valeur, $nb_decimales) != $valeur){
+		$erreur = _T('verifier:erreur_decimal_nb_decimales', array('nb_decimales' => $nb_decimales));
+	}
+	
+	return $erreur;
+}
+
+?>
diff --git a/verifier/decimal.yaml b/verifier/decimal.yaml
new file mode 100644
index 0000000..dff9ac4
--- /dev/null
+++ b/verifier/decimal.yaml
@@ -0,0 +1,26 @@
+
+titre: '<:verifier:type_decimal:>'
+description: '<:verifier:type_decimal_description:>'
+options:
+  -
+    saisie: 'input'
+    options:
+      nom: 'min'
+      label: '<:verifier:option_entier_min_label:>'
+    verifier:
+      type: 'decimal'
+  -
+    saisie: 'input'
+    options:
+      nom: 'max'
+      label: '<:verifier:option_entier_max_label:>'
+    verifier:
+      type: 'decimal'
+  -
+    saisie: 'input'
+    options:
+      nom: 'nb_decimales'
+      label: '<:verifier:option_decimal_nb_decimales_label:>'
+    verifier:
+      type: 'entier'
+      min: 0
-- 
GitLab