From 0fa6fe337bafe981659c1972c6a7c5a6051ad00e Mon Sep 17 00:00:00 2001
From: Cerdic <cedric@yterium.com>
Date: Sat, 14 Jun 2014 09:23:51 +0000
Subject: [PATCH] Report de r21399 : le critere {recherche} necessite une cle
 primaire non composee, generer une erreur si ce n'est pas le cas + chaine de
 langue pour ce type d'erreur + correction erreur critere doublons

---
 ecrire/lang/spip_fr.php    | 1 +
 ecrire/public/criteres.php | 8 +++++++-
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/ecrire/lang/spip_fr.php b/ecrire/lang/spip_fr.php
index 800fd9955f..f35e043802 100644
--- a/ecrire/lang/spip_fr.php
+++ b/ecrire/lang/spip_fr.php
@@ -687,6 +687,7 @@ et vous reconnecter au site.
 	'zbug_champ_hors_motif' => 'Champ @champ@ hors d’un contexte @motif@',
 	'zbug_code' => 'code',
 	'zbug_critere_inconnu' => 'Critère inconnu @critere@',
+	'zbug_critere_sur_table_sans_cle_primaire' => '{@critere@} sur une table sans clef primaire atomique',
 	'zbug_distant_interdit' => 'Externe interdit', # Contexte : une base de données "externe", pas gérée par SPIP, mais que SPIP 1.8 sait utiliser dans ses boucles -- seul problèmes certaines manipulations sont interdites sur ces bases-là.
 	'zbug_doublon_table_sans_cle_primaire' => 'Doublons sur une table sans clef primaire atomique',
 	'zbug_doublon_table_sans_index' => 'Doublons sur une table sans index',
diff --git a/ecrire/public/criteres.php b/ecrire/public/criteres.php
index e1dd782795..dae32b167e 100644
--- a/ecrire/public/criteres.php
+++ b/ecrire/public/criteres.php
@@ -310,6 +310,11 @@ function critere_recherche_dist($idb, &$boucles, $crit){
 
 	$boucle = &$boucles[$idb];
 
+	if (!$boucle->primary OR strpos($boucle->primary, ',')){
+		erreur_squelette(_T('zbug_critere_sur_table_sans_cle_primaire',array('critere'=>'recherche')), $boucle);
+		return;
+	}
+
 	if (isset($crit->param[0]))
 		$quoi = calculer_liste($crit->param[0], array(), $boucles, $boucles[$idb]->id_parent);
 	else
@@ -328,6 +333,7 @@ function critere_recherche_dist($idb, &$boucles, $crit){
 	}
 	';
 
+
 	$t = $boucle->id_table.'.'.$boucle->primary;
 	if (!in_array($t, $boucles[$idb]->select))
 		$boucle->select[] = $t; # pour postgres, neuneu ici
@@ -2306,7 +2312,7 @@ function critere_noeud_dist($idb, &$boucles, $crit){
 	$primary = $boucle->primary;
 
 	if (!$primary OR strpos($primary, ',')){
-		erreur_squelette(_T('zbug_doublon_sur_table_sans_cle_primaire'), "BOUCLE$idb");
+		erreur_squelette(_T('zbug_doublon_sur_table_sans_cle_primaire'), $boucle);
 		return;
 	}
 	$table = $boucle->type_requete;
-- 
GitLab