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