Valider c36bd1e6 rédigé par esj's avatar esj
Parcourir les fichiers

ca devient vertigineux ces imbrications

parent 7731956a
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+9 −14
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -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,15 +576,11 @@ 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)
		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) { 
@@ -631,7 +627,6 @@ function calculer_squelette($squelette, $nom, $gram, $sourcefile) {
					 $id);
			}
	}
	}

	// idem pour la racine
	$descr['id_mere'] = '';
+2 −5
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -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;}
+9 −8
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -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 = '';