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