diff --git a/ecrire/lang/spip_fr.php b/ecrire/lang/spip_fr.php index 800fd9955facee74a4bc86e583951c9affe153df..f35e043802c7c5faea250eeca6e333929872ebc9 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 e1dd782795f801c23cf522744bd2ddac49dbd8fa..dae32b167e22afc09b01933b6363363da6a24873 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;