From 220ae1f19c7d57ae509198d6310e0743beae96bf Mon Sep 17 00:00:00 2001 From: "Committo,Ergo:sum" <esj@rezo.net> Date: Mon, 20 Aug 2007 17:13:51 +0000 Subject: [PATCH] =?UTF-8?q?Correction=20de=20#954:=20bien=20g=C3=A9rer=20l?= =?UTF-8?q?e=20crit=C3=A8re=20'''doublons'''=20dans=20une=20table=20extern?= =?UTF-8?q?e.=20La=20fonction=20'''trouver=5Fdef=5Ftable'''=20n'=C3=A9tait?= =?UTF-8?q?=20pas=20utilis=C3=A9e=20=C3=A0=20l'initialisation=20du=20compi?= =?UTF-8?q?lateur=20c'=C3=A9tait=20incoh=C3=A9rent=20avec=20la=20suite.=20?= =?UTF-8?q?Mais=20il=20reste=20une=20dizaine=20d'occurrences=20du=20pr?= =?UTF-8?q?=C3=A9fixe=20de=20table=20"'spip=5F'"=20qu'il=20faudrait=20revo?= =?UTF-8?q?ir,=20il=20y=20a=20peut-=C3=AAtre=20le=20m=C3=AAme=20bug=20derr?= =?UTF-8?q?i=C3=A8re.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecrire/public/compiler.php | 40 ++++++++++++++++++-------------------- ecrire/public/criteres.php | 3 ++- 2 files changed, 21 insertions(+), 22 deletions(-) diff --git a/ecrire/public/compiler.php b/ecrire/public/compiler.php index 79b475cfcf..aeed166489 100644 --- a/ecrire/public/compiler.php +++ b/ecrire/public/compiler.php @@ -695,31 +695,29 @@ function public_compiler_dist($squelette, $nom, $gram, $sourcefile) { // tableau des informations sur le squelette $descr = array('nom' => $nom, 'sourcefile' => $sourcefile); - // une boucle documents est conditionnee par tout le reste! + // Initialiser les champs necessaires a la compilation + // et signaler une boucle documents (les autres influent dessus) foreach($boucles as $id => $boucle) { $type = $boucle->type_requete; if ($type != 'boucle') { - $boucles[$id]->descr = &$descr; - if (isset($table_des_tables[$type])) { - $boucles[$id]->id_table = $x = $table_des_tables[$type]; - $boucles[$id]->primary = $tables_principales["spip_$x"]['key']["PRIMARY KEY"]; - if ((!$boucles[$id]->jointures) - AND (is_array($x = $tables_jointures['spip_' . $x]))) - $boucles[$id]->jointures = $x; - } else if (isset($tables_auxiliaires['spip_' .$type])) { - // table auxiliaire - $boucles[$id]->id_table = $type; - $boucles[$id]->primary = $tables_auxiliaires['spip_' . $type]['key']["PRIMARY KEY"]; - } else { - // table non Spip. - $boucles[$id]->id_table = $type; - $serveur = $boucle->sql_serveur; - $x = $tables_des_serveurs_sql[$serveur ? $serveur : 'localhost'][$type]['key']; - $boucles[$id]->primary = ($x["PRIMARY KEY"] ? $x["PRIMARY KEY"] : $x["KEY"]); - } + $table = isset($table_des_tables[$type]) + ? $table_des_tables[$type] + : $type; + $show = trouver_def_table($table, $boucles[$id]); + if ($show) { + $nom_table = $show[0]; + $show = $show[1]['key']; + $boucles[$id]->descr = &$descr; + $boucles[$id]->id_table = $table; + $boucles[$id]->primary = $show["PRIMARY KEY"]; + if ((!$boucles[$id]->jointures) + AND (is_array($x = $tables_jointures[$nom_table]))) + $boucles[$id]->jointures = $x; + spip_log("j $nom_table $x $table"); + if (($type == 'documents') && $boucle->doublons) + { $descr['documents'] = true; } + } } - if (($boucle->type_requete == 'documents') && $boucle->doublons) - { $descr['documents'] = true; } } // Commencer par reperer les boucles appelees explicitement // car elles indexent les arguments de maniere derogatoire diff --git a/ecrire/public/criteres.php b/ecrire/public/criteres.php index 335d790995..87e81a25b2 100644 --- a/ecrire/public/criteres.php +++ b/ecrire/public/criteres.php @@ -1048,7 +1048,8 @@ function trouver_def_table($nom, &$boucle) } erreur_squelette(_T('zbug_table_inconnue', array('table' => $nom)), $boucle->id_boucle); - } + return false; +} // http://doc.spip.org/@trouver_champ_exterieur function trouver_champ_exterieur($cle, $joints, &$boucle, $checkarrivee = false) -- GitLab