From c36bd1e6ea91ff72438e42af9b9c4e3e2557abbc Mon Sep 17 00:00:00 2001 From: "Committo,Ergo:sum" <esj@rezo.net> Date: Mon, 6 Jun 2005 19:38:43 +0000 Subject: [PATCH] ca devient vertigineux ces imbrications --- inc-compilo.php3 | 23 +++++++++-------------- inc-criteres.php3 | 7 ++----- inc-html-squel.php3 | 17 +++++++++-------- 3 files changed, 20 insertions(+), 27 deletions(-) diff --git a/inc-compilo.php3 b/inc-compilo.php3 index 8b071c33bc..660260d47e 100644 --- a/inc-compilo.php3 +++ b/inc-compilo.php3 @@ -566,7 +566,7 @@ function calculer_squelette($squelette, $nom, $gram, $sourcefile) { global $table_primary, $table_des_tables, $tables_des_serveurs_sql; // Phraser le squelette, selon sa grammaire // pour le moment: "html" seul connu (HTML+balises BOUCLE) - $boucles = ''; + $boucles = array(); spip_timer('calcul_skel'); include_local("inc-$gram-squel.php3"); @@ -576,18 +576,14 @@ function calculer_squelette($squelette, $nom, $gram, $sourcefile) { // tableau des informations sur le squelette $descr = array('nom' => $nom, 'documents' => false, 'sourcefile' => $sourcefile); - if ($boucles) { - // une boucle documents est conditionnee par tout le reste! - foreach($boucles as $idb => $boucle) { - if ($boucle->param) { - if (($boucle->type_requete == 'documents') && - $boucle->doublons) - { $descr['documents'] = true; break; } - } - } + // une boucle documents est conditionnee par tout le reste! + foreach($boucles as $idb => $boucle) { + if (($boucle->type_requete == 'documents') && $boucle->doublons) + { $descr['documents'] = true; break; } + } // Commencer par reperer les boucles appelees explicitement // car elles indexent les arguments de maniere derogatoire - foreach($boucles as $id => $boucle) { + foreach($boucles as $id => $boucle) { if ($boucle->type_requete == 'boucle') { $rec = &$boucles[$boucle->param[0]]; if (!$rec) { @@ -604,8 +600,8 @@ function calculer_squelette($squelette, $nom, $gram, $sourcefile) { $boucle->param); } } - } - foreach($boucles as $id => $boucle) { + } + foreach($boucles as $id => $boucle) { $type = $boucle->type_requete; if ($type != 'boucle') { $boucles[$id]->id_table = $table_des_tables[$type]; @@ -630,7 +626,6 @@ function calculer_squelette($squelette, $nom, $gram, $sourcefile) { $boucles, $id); } - } } // idem pour la racine diff --git a/inc-criteres.php3 b/inc-criteres.php3 index 7d9a1be33f..6e47b7b898 100644 --- a/inc-criteres.php3 +++ b/inc-criteres.php3 @@ -407,11 +407,10 @@ function calculer_critere_DEFAUT($idb, &$boucles, $crit) { $j = count($last)-1; $last = $last[$j]; $n = strlen($last->texte); - if (($deb->texte[0] == '(') && - ($last->texte[$n-1] == ')')) + if (($deb->texte[0] == '(') && ($last->texte[$n-1] == ')')) { $params[0][0]->texte = substr($deb->texte,1); - $params[$k][$j]->texte = substr($last->texte,0,$n); + $params[$k][$j]->texte = substr($last->texte,0,$n-1); } } $val = array(); @@ -593,9 +592,7 @@ function calculer_critere_repete(&$boucle, $col, $val) { foreach ($boucle->where as $k => $v) { if (ereg(" *$col *(=|IN) *\(?'(.*)(\".*)[')]$",$v, $m)) { - spip_log($boucle->where[$k]); $boucle->where[$k] = "$col IN ('$m[2] \"','\" . $val . $m[3])"; - spip_log($boucle->where[$k]); // esperons que c'est le meme ! $boucle->having++; return true;} diff --git a/inc-html-squel.php3 b/inc-html-squel.php3 index 393f820fe3..baf9de0297 100644 --- a/inc-html-squel.php3 +++ b/inc-html-squel.php3 @@ -203,16 +203,17 @@ function phraser_args($texte, $fin, $sep, $result, &$pointeur_champ) { $collecte[] = $champ; $args = ltrim($regs[count($regs)-1]); } else { - if (!ereg("^(.*)" . NOM_DE_CHAMP ."[{|]", $arg, $r)) { + if (!ereg(NOM_DE_CHAMP ."[{|]", $arg, $r)) { $arg = phraser_champs_exterieurs($arg, $sep, $result); $args = ltrim($regs[count($regs)-1]); $collecte = array_merge($collecte, $arg); $result = array_merge($result, $arg); } else { - $pred = $r[1]; + $n = strpos($args,$r[0]); + $pred = substr($args, 0, $n); $par = ',}'; - if (ereg('(.*)\($', $pred, $m)) + if (ereg('^(.*)\($', $pred, $m)) {$pred = $m[1]; $par =')';} if ($pred) { $champ = new Texte; @@ -221,11 +222,11 @@ function phraser_args($texte, $fin, $sep, $result, &$pointeur_champ) { $result[] = $champ; $collecte[] = $champ; } - $rec = substr($args, strpos($r[0],$args)+strlen($r[0])-1); + $rec = substr($args, $n + strlen($r[3])+1); $champ = new Champ; - $champ->nom_boucle = $r[3]; - $champ->nom_champ = $r[4]; - $champ->etoile = $r[6]; + $champ->nom_boucle = $r[2]; + $champ->nom_champ = $r[3]; + $champ->etoile = $r[5]; phraser_args($rec, $par, $sep, array(), $champ); $args = $champ->apres ; $champ->apres = ''; @@ -384,7 +385,7 @@ function phraser_criteres($params, &$result) { $crit->not = $m[1]; $crit->cond = $m[3]; } - else + else erreur_squelette(_T('zbug_critere_inconnu', array('critere' => $param))); $args[] = $crit; -- GitLab