From 9ccabb513a590157e33309c39b8e152c953ceecc Mon Sep 17 00:00:00 2001
From: "rastapopoulos@spip.org" <>
Date: Fri, 27 May 2011 07:38:15 +0000
Subject: [PATCH] =?UTF-8?q?Une=20page=20d'aide=20permettant=20de=20g=C3=A9?=
 =?UTF-8?q?n=C3=A9rer=20les=20r=C3=A9f=C3=A9rences=20comme=20pour=20le=20p?=
 =?UTF-8?q?lugin=20Saisies.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Et une nouvelle vérification nommée "comparaison_champ" qui permet de comparer une valeur avec un champ du _request(). Je ne sais pas si c'est la meilleure manière de faire, donc pour l'instant je n'ai pas décris le YAML, c'est à tester...
---
 .gitattributes                 |  3 ++
 aide/verifier.html             | 73 ++++++++++++++++++++++++++++++++++
 aide/verifier_fonctions.php    | 39 ++++++++++++++++++
 lang/verifier_fr.php           |  6 +++
 plugin.xml                     |  2 +-
 verifier/comparaison_champ.php | 45 +++++++++++++++++++++
 6 files changed, 167 insertions(+), 1 deletion(-)
 create mode 100644 aide/verifier.html
 create mode 100644 aide/verifier_fonctions.php
 create mode 100644 verifier/comparaison_champ.php

diff --git a/.gitattributes b/.gitattributes
index f85ef98..4158eff 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1,4 +1,6 @@
 * text=auto !eol
+aide/verifier.html -text
+aide/verifier_fonctions.php -text
 images/icones-infos.txt -text
 images/verifier-128.png -text
 inc/is_email.php -text
@@ -15,6 +17,7 @@ lang/verifier_pt_br.php -text
 /plugin.xml -text
 test/verifier.html -text
 verifier/code_postal.php -text
+verifier/comparaison_champ.php -text
 verifier/date.php -text
 verifier/date.yaml -text
 verifier/decimal.php -text
diff --git a/aide/verifier.html b/aide/verifier.html
new file mode 100644
index 0000000..36b9adb
--- /dev/null
+++ b/aide/verifier.html
@@ -0,0 +1,73 @@
+
+#SET{infos,#VAL|verifier_generer_aide}
+#SET{verifications,#GET{infos}|table_valeur{verifications}}
+#SET{options,#GET{infos}|table_valeur{options}}
+
+[(#ENV{format}|=={brut}|oui)<textarea style="width:100%; height:100%;">]
+
+Sauter à : <a href="#liste_verifications">Toutes les vérifications</a>, <a href="#liste_options_verifications">Toutes les options</a>
+
+<h2 class="h2 spip">Utilisation des options</h2>
+<B_options_tableau>
+<div style="overflow:auto;">
+<table class="spip">
+<thead>
+	<tr class="first_row">
+		<th>Options \ Vérifications</th>
+		<BOUCLE_verifications_tableau_th(POUR){tableau #GET{verifications}}>
+		<th><a href="#verification_#CLE">#CLE</a></th>
+		</BOUCLE_verifications_tableau_th>
+	</tr>
+</thead>
+<tbody>
+	<BOUCLE_options_tableau(POUR){tableau #GET{options}}>
+	<tr class="tr_liste [(#COMPTEUR_BOUCLE|alterner{row_odd,row_even})]">
+		<th><a href="#option_#CLE">#CLE</a></th>
+		<BOUCLE_verifications_tableau(POUR){tableau #GET{verifications}}>
+		<td>[(#CLE|in_array{[(#_options_tableau:VALEUR|table_valeur{utilisee_par})]}|?{'X','-'})]</td>
+		</BOUCLE_verifications_tableau>
+	</tr>
+	</BOUCLE_options_tableau>
+</tbody>
+</table>
+</div>
+</B_options_tableau>
+
+<h2 class="h2 spip" id="liste_verifications">Toutes les vérifications</h2>
+<BOUCLE_verifications(POUR){tableau #GET{verifications}}>
+<h3 class="h3 spip" id="verification_#CLE">[(#VALEUR|table_valeur{titre})] (#CLE)</h3>
+<p class="description">
+	<strong>Description :</strong> [(#VALEUR|table_valeur{description})]
+</p>
+<p class="options">
+	<strong>Options :</strong>
+	<BOUCLE_options_verification(POUR){tableau #VALEUR|table_valeur{options}}{", "}><a href="#option_#CLE">#CLE</a></BOUCLE_options_verification>
+</p>
+</BOUCLE_verifications>
+
+<h2 class="h2 spip" id="liste_options_verifications">Toutes les options</h2>
+<BOUCLE_options(POUR){tableau #GET{options}}>
+[(#SET{label, [(#VALEUR|table_valeur{label}|sinon{[(#VALEUR|table_valeur{label_case})]})]})]
+<h3 class="h3 spip" id="option_#CLE">[(#GET{label}|?{#GET{label} [ ((#CLE))], #CLE})]</h3>
+[<p class="description">
+	<strong>Description :</strong> (#VALEUR|table_valeur{explication}|sinon{[(#VALEUR|table_valeur{label}|?{[(#VALEUR|table_valeur{label_case})]})]})
+</p>]
+<B_utilisee_par>
+<p class="utilisee_par">
+	<strong>Utilisée par :</strong>
+	<BOUCLE_utilisee_par(POUR){tableau #VALEUR|table_valeur{utilisee_par}}{", "}><a href="#verification_#VALEUR">#VALEUR</a></BOUCLE_utilisee_par>
+</p>
+</B_utilisee_par>
+<B_choix>
+<p class="choix_possibles">
+	<strong>Choix possibles :</strong>
+	<ul class="spip">
+		<BOUCLE_choix(POUR){tableau #VALEUR|table_valeur{datas}}>
+		<li>"#CLE" : #VALEUR</li>
+		</BOUCLE_choix>
+	</ul>
+</p>
+</B_choix>
+</BOUCLE_options>
+
+[(#ENV{format}|=={brut}|oui)</textarea>]
diff --git a/aide/verifier_fonctions.php b/aide/verifier_fonctions.php
new file mode 100644
index 0000000..79d7ab5
--- /dev/null
+++ b/aide/verifier_fonctions.php
@@ -0,0 +1,39 @@
+<?php
+
+// Sécurité
+if (!defined('_ECRIRE_INC_VERSION')) return;
+
+include_spip('inc/verifier');
+include_spip('inc/saisies');
+
+/*
+ * Génère une page d'aide listant toutes les saisies et leurs options
+ */
+function verifier_generer_aide(){
+	// On a déjà la liste par saisie
+	$verifications = verifier_lister_disponibles();
+	
+	// On construit une liste par options
+	$options = array();
+	foreach ($verifications as $type_verif=>$verification){
+		$options_verification = saisies_lister_par_nom($verification['options'], false);
+		foreach ($options_verification as $nom=>$option){
+			// Si l'option n'existe pas encore
+			if (!isset($options[$nom])){
+				$options[$nom] = _T_ou_typo($option['options']);
+			}
+			// On ajoute toujours par qui c'est utilisé
+			$options[$nom]['utilisee_par'][] = $type_verif;
+		}
+		ksort($options_verification);
+		$verifications[$type_verif]['options'] = $options_verification;
+	}
+	ksort($options);
+	
+	return array(
+		'verifications' => $verifications,
+		'options' => $options
+	);
+}
+
+?>
diff --git a/lang/verifier_fr.php b/lang/verifier_fr.php
index cefdf9f..9be8a77 100644
--- a/lang/verifier_fr.php
+++ b/lang/verifier_fr.php
@@ -7,6 +7,12 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
 
 	// E
 	'erreur_code_postal' => 'Ce code postal est incorrect.',
+	'erreur_comparaison_egal' => 'La valeur doit être égale au champ "@nom_champ@"',
+	'erreur_comparaison_egal_type' => 'La valeur doit être égale et de même type que le champ "@nom_champ@"',
+	'erreur_comparaison_grand' => 'La valeur doit être supérieure au champ "@nom_champ@"',
+	'erreur_comparaison_grand_egal' => 'La valeur doit être supérieure ou égale au champ "@nom_champ@"',
+	'erreur_comparaison_petit' => 'La valeur doit être inférieure au champ "@nom_champ@"',
+	'erreur_comparaison_petit_egal' => 'La valeur doit être inférieure ou égale au champ "@nom_champ@"',
 	'erreur_date' => 'La date n\'est pas valide.',
 	'erreur_date_format' => 'Le format de la date n\'est pas accepté.',
 	'erreur_decimal' => 'La valeur doit être un nombre décimal.',
diff --git a/plugin.xml b/plugin.xml
index 4399ea0..aaed1bb 100644
--- a/plugin.xml
+++ b/plugin.xml
@@ -5,7 +5,7 @@
 			[en]Control API
 		</multi>
 	</nom>
-	<auteur>RastaPopoulos</auteur>
+	<auteur>[Les Développements Durables->http://www.ldd.fr]</auteur>
 	<icon>images/verifier-128.png</icon>
 	<licence>GPL v3</licence>
 	<version>0.1.9</version>
diff --git a/verifier/comparaison_champ.php b/verifier/comparaison_champ.php
new file mode 100644
index 0000000..8acde76
--- /dev/null
+++ b/verifier/comparaison_champ.php
@@ -0,0 +1,45 @@
+<?php
+
+// Sécurité
+if (!defined("_ECRIRE_INC_VERSION")) return;
+
+/**
+ * Compare la valeur avec un autre champ du _request().
+ *
+ * @param string $valeur La valeur à vérifier.
+ * @param array $option Un éventuel tableau d'options.
+ * @return string Retourne une chaine vide si c'est valide, sinon une chaine expliquant l'erreur.
+ */
+function verifier_comparaison_champ_dist($valeur, $options=array()){
+	include_spip('inc/filtres');
+	
+	// On vérifie qu'on a bien un champ à comparer
+	if (!$champ = $options['champ'] or !is_scalar($champ)) return true;
+	else $valeur_champ = _request($champ);
+	
+	// On cherche le nom du champ
+	$nom_champ = $options['nom_champ'] ? $options['nom_champ'] : $champ;
+	
+	switch ($options['comparaison']){
+		case 'petit':
+			return $valeur < $valeur_champ ? '' : _T('verifier:erreur_comparaison_petit', array('nom_champ'=>$nom_champ));
+			break;
+		case 'petit_egal':
+			return $valeur <= $valeur_champ ? '' : _T('verifier:erreur_comparaison_petit_egal', array('nom_champ'=>$nom_champ));
+			break;
+		case 'grand':
+			return $valeur > $valeur_champ ? '' : _T('verifier:erreur_comparaison_grand', array('nom_champ'=>$nom_champ));
+			break;
+		case 'grand_egal':
+			return $valeur >= $valeur_champ ? '' : _T('verifier:erreur_comparaison_grand_egal', array('nom_champ'=>$nom_champ));
+			break;
+		case 'egal_type':
+			return $valeur === $valeur_champ ? '' : _T('verifier:erreur_comparaison_egal_type', array('nom_champ'=>$nom_champ));
+			break;
+		case 'egal':
+		case default:
+			return $valeur == $valeur_champ ? '' : _T('verifier:erreur_comparaison_egal', array('nom_champ'=>$nom_champ));
+			break;
+	}
+}
+
-- 
GitLab