From 08a0af34c3fb35a08585b5473c1fa6c3eb8bd7a1 Mon Sep 17 00:00:00 2001
From: Fil <fil@rezo.net>
Date: Sat, 21 Aug 2004 15:35:03 +0000
Subject: [PATCH] =?UTF-8?q?balises=20d=C3=A9finies=20de=20mani=C3=A8re=20n?=
 =?UTF-8?q?ew=20style=20(Pierre=20Andrews)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 inc-bcl-squel.php3   |   4 +-
 inc-index-squel.php3 |   3 +-
 inc-logo-squel.php3  |  97 ++++---
 inc-vrac-squel.php3  | 642 ++++++++++++++++++++++++-------------------
 4 files changed, 413 insertions(+), 333 deletions(-)

diff --git a/inc-bcl-squel.php3 b/inc-bcl-squel.php3
index 451b3d5bd9..4ca69f3bb9 100644
--- a/inc-bcl-squel.php3
+++ b/inc-bcl-squel.php3
@@ -61,9 +61,11 @@ class ParamChamp {
 	var $boucles;
 	var $id_mere;
 	var $code;
+	var $entete;
 
 	function retour() {
-		return applique_filtres($this->fonctions, $this->code, $this->id_boucle, $this->boucles, $this->id_mere);
+	  list($code_filtre,$entete_filtre) = applique_filtres($this->fonctions, $this->code, $this->id_boucle, $this->boucles, $this->id_mere);
+	  return array($code_filtre,$this->entete.$entete_filtre);
 	}
 }
 
diff --git a/inc-index-squel.php3 b/inc-index-squel.php3
index f08b187e68..6573c45fd3 100644
--- a/inc-index-squel.php3
+++ b/inc-index-squel.php3
@@ -121,7 +121,8 @@ function calculer_champ($fonctions, $nom_champ, $id_boucle, &$boucles, $id_mere)
 	// si index_pile a ramene le choix par defaut, 
 	// ca doit plutot etre un champ SPIP non SQL,
 	// ou ni l'un ni l'autre
-	return calculer_champ_divers($fonctions, $nom_champ, $id_boucle, $boucles, $id_mere);
+	$code = "'#$nom_champ'";
+		return applique_filtres($fonctions, $code, $id_boucle, $boucles, $id_mere);
 }
 
 
diff --git a/inc-logo-squel.php3 b/inc-logo-squel.php3
index 8d4bbaa6eb..b783b9533c 100644
--- a/inc-logo-squel.php3
+++ b/inc-logo-squel.php3
@@ -98,15 +98,15 @@ function balise_DATE_dist ($p) {
 
 # Fonction commune aux logos (rubriques, articles...)
 
-function calculer_champ_LOGO($fonctions, $nom_champ, $id_boucle, &$boucles, $id_mere)
+function calculer_champ_LOGO($params)
 {
-  ereg("^LOGO_(([a-zA-Z]+).*)$", $nom_champ, $regs);
+  ereg("^LOGO_(([a-zA-Z]+).*)$", $params->nom_champ, $regs);
   $type_logo = $regs[1];
   $type_objet = strtolower($regs[2]);
   $flag_fichier = 0;  // compatibilite ascendante
   $filtres = '';
-  if ($fonctions) {
-    while (list(, $nom) = each($fonctions)) {
+  if (is_array($params->fonctions)) {
+    foreach($params->fonctions as $nom) {
       if (ereg('^(left|right|center|top|bottom)$', $nom))
 	$align = $nom;
       else if ($nom == 'lien') {
@@ -129,137 +129,137 @@ function calculer_champ_LOGO($fonctions, $nom_champ, $id_boucle, &$boucles, $id_
 	}
     }
     // recuperer les filtres s'il y en a
-    $fonctions = $filtres;
+    $params->fonctions = $filtres;
   }
   if ($flag_lien_auto && !$lien) {
-    $milieu .= "\n\t\$lien = generer_url_$type_objet(" .
-      index_pile($id_boucle,  'id_$type_objet', $boucles) .
+    $params->entete .= "\n\t\$lien = generer_url_$type_objet(" .
+      champ_sql("id_$type_objet", $params) .
       ");\n";
   }
   else
     {
-      $milieu .= "\n\t\$lien = ";
+      $params->entete .= "\n\t\$lien = ";
       $a = $lien;
       while (ereg("^([^#]*)#([A-Za-z_]+)(.*)$", $a, $match))
 	{
-	  list($c,$m) = calculer_champ(array(), $match[2], $id_boucle, $boucles, $id_mere);
+	  list($c,$m) = calculer_champ(array(), $match[2], $params->id_boucle, $params->boucles, $params->id_mere);
 	  // $m est nul dans les cas pre'vus
-	  $milieu .= ((!$match[1]) ? "" :"'$match[1]' .") . " $c .";
+	  $params->entete .= ((!$match[1]) ? "" :"'$match[1]' .") . " $c .";
 	  $a = $match[3];
 	}
-      if ($a) $milieu .= "'$lien';"; 
+      if ($a) $params->entete .= "'$lien';"; 
       else 
 	{
-	  if ($lien) $milieu = substr($milieu,1,-1) .";";
-	  else $milieu .= "'';";
+	  if ($lien) $params->entete = substr($params->entete,1,-1) .";";
+	  else $params->entete .= "'';";
 	}
     }
   
   if ($type_logo == 'RUBRIQUE') {
-    $milieu .= '
+    $params->entete .= '
 			list($logon, $logoff) = image_rubrique(' .
-      index_pile($id_boucle,  "id_rubrique", $boucles) . ", $flag_fichier);
+      champ_sql('id_rubrique', $params) . ", $flag_fichier);
 			";
   }
   else if ($type_logo == 'RUBRIQUE_NORMAL') {
-    $milieu .= '
+    $params->entete .= '
 			list($logon,) = image_rubrique(' .
-      index_pile($id_boucle,  "id_rubrique", $boucles) . ", $flag_fichier); ". '
+      champ_sql('id_rubrique', $params) . ", $flag_fichier); ". '
 			$logoff = "";
 			';
   }
   else if ($type_logo == 'RUBRIQUE_SURVOL') {
-    $milieu .= '
+    $params->entete .= '
 			list(,$logon) = image_rubrique(' .
-      index_pile($id_boucle,  "id_rubrique", $boucles) . ", $flag_fichier); ". '
+      champ_sql('id_rubrique', $params) . ", $flag_fichier); ". '
 			$logoff = "";
 			';
   }
   else if ($type_logo == 'DOCUMENT'){
     // Recours a une globale pour compatibilite avec l'ancien code. 
     // Il faudra reprendre inc_documents entierement (tu parles !)
-    $milieu .= ' 
+    $params->entete .= ' 
 		$logoff = ' .
-      index_pile($id_boucle,  "id_document", $boucles) . 
+      champ_sql('id_document', $params) . 
       '; 
 		$logon = integre_image($logoff,"","fichier_vignette");
 		$logoff = "";
 			';
   }
   else if ($type_logo == 'AUTEUR') {
-    $milieu .= '
+    $params->entete .= '
 			list($logon, $logoff) = image_auteur(' .
-      index_pile($id_boucle,  "id_auteur", $boucles) . ", $flag_fichier);
+      champ_sql('id_auteur', $params) . ", $flag_fichier);
 			";
   }
   else if ($type_logo == 'AUTEUR_NORMAL') {
-    $milieu .= '
+    $params->entete .= '
 			list($logon,) = image_auteur(' .
-      index_pile($id_boucle,  "id_auteur", $boucles) . ", $flag_fichier);".'
+      champ_sql('id_auteur', $params) . ", $flag_fichier);".'
 			$logoff = "";
 			';
   }
   else if ($type_logo == 'AUTEUR_SURVOL') {
-    $milieu .= '
+    $params->entete .= '
 			list(,$logon) = image_auteur(' .
-      index_pile($id_boucle,  "id_auteur", $boucles) . ", $flag_fichier);".'
+      champ_sql('id_auteur', $params) . ", $flag_fichier);".'
 			$logoff = "";
 			';
   }
   else if ($type_logo == 'BREVE') {
-    $milieu .= '
+    $params->entete .= '
 			list($logon, $logoff) = image_breve(' .
-      index_pile($id_boucle,  "id_breve", $boucles) . ", $flag_fichier);
+      champ_sql('id_breve', $params) . ", $flag_fichier);
 			";
   }
   else if ($type_logo == 'BREVE_RUBRIQUE') {
-    $milieu .= '
+    $params->entete .= '
 			list($logon, $logoff) = image_breve(' .
-      index_pile($id_boucle,  "id_breve", $boucles) . ", $flag_fichier);".'
+      champ_sql('id_breve', $params) . ", $flag_fichier);".'
 			if (!$logon)
 				list($logon, $logoff) = image_rubrique(' .
-      index_pile($id_boucle,  "id_rubrique", $boucles) . ", $flag_fichier);
+      champ_sql('id_rubrique', $params) . ", $flag_fichier);
 		  ";
   }
   else if ($type_logo == 'SITE') {
-    $milieu .= '
+    $params->entete .= '
 			list($logon, $logoff) = image_site(' .
-      index_pile($id_boucle,  "id_syndic", $boucles) . ", $flag_fichier);
+      champ_sql('id_syndic', $params) . ", $flag_fichier);
 			";
   }
   else if ($type_logo == 'MOT') {
-    $milieu .= '
+    $params->entete .= '
 			list($logon, $logoff) = image_mot(' .
-      index_pile($id_boucle,  "id_mot", $boucles) . ", $flag_fichier);
+      champ_sql('id_mot', $params) . ", $flag_fichier);
 			";
   }
   else if ($type_logo == 'ARTICLE') {
-    $milieu .= '
+    $params->entete .= '
 			list($logon, $logoff) = image_article(' .
-      index_pile($id_boucle,  "id_article", $boucles) . ", $flag_fichier);
+      champ_sql('id_article', $params) . ", $flag_fichier);
 			";
   }
   else if ($type_logo == 'ARTICLE_NORMAL') {
-    $milieu .= '
+    $params->entete .= '
 			list($logon,) = image_article(' .
-		index_pile($id_boucle,  "id_article", $boucles) . ", $flag_fichier);".'
+      champ_sql('id_article', $params) . ", $flag_fichier);".'
 			$logoff = "";
 			';
   }
   else if ($type_logo == 'ARTICLE_SURVOL') {
-    $milieu .= '
+    $params->entete .= '
 			list(,$logon) = image_article(' .
-      index_pile($id_boucle,  "id_article", $boucles) . ", $flag_fichier);".'
+      champ_sql('id_article', $params) . ", $flag_fichier);".'
 			$logoff = "";
 			';
   }
   else if ($type_logo == 'ARTICLE_RUBRIQUE') {
-    $milieu .= '
+    $params->entete .= '
 			list($logon, $logoff) = image_article(' .
-      index_pile($id_boucle,  "id_article", $boucles) . ", $flag_fichier);".'
+      champ_sql('id_article', $params) . ", $flag_fichier);".'
 			if (!$logon)
 				list($logon, $logoff) = image_rubrique(' .
-      index_pile($id_boucle,  "id_rubrique", $boucles) . ", $flag_fichier);
+      champ_sql('id_rubrique', $params) . ", $flag_fichier);
 			";
   }
 
@@ -268,13 +268,12 @@ function calculer_champ_LOGO($fonctions, $nom_champ, $id_boucle, &$boucles, $id_
 	// remarquable, mais a conserver pour compatibilite ascendante.
 	// -> http://www.spip.net/fr_article901.html
 	if ($flag_fichier)
-		$code = 'ereg_replace("^IMG/","",$logon)';
+		$params->code = 'ereg_replace("^IMG/","",$logon)';
 	else
-		$code = "affiche_logos(\$logon, \$logoff, \$lien, '".
+		$params->code = "affiche_logos(\$logon, \$logoff, \$lien, '".
 		addslashes($align) . "')";
 
-	list($c,$m) = applique_filtres($fonctions, $code, $id_boucle, $boucles, $id_mere);
-	return array($c,$milieu . $m);
+	return $params;
 }
 
 ?>
diff --git a/inc-vrac-squel.php3 b/inc-vrac-squel.php3
index 36f236d4dd..dfcbc347be 100644
--- a/inc-vrac-squel.php3
+++ b/inc-vrac-squel.php3
@@ -1,297 +1,375 @@
 <?php
 
 //
-// Fonction de traduction des champs Spip basiques
-// A terme, elle devrait etre remplace'e par autant de fonctions que de 'case'
+// Fonctions new style
 //
 
-function calculer_champ_divers($fonctions, $nom_champ, $id_boucle, &$boucles, $id_mere) {
-	global  $flag_pcre, $table_primary;
-	switch($nom_champ) {
-
-	// Introduction (d'un article, d'une breve ou d'un message de forum)
-
-	case 'NOM_SITE_SPIP':
-		$code = "lire_meta('nom_site')";
-		break;
-
-	case 'EMAIL_WEBMASTER':
-		$code = "lire_meta('email_webmaster')";
-		break;
-
-	case 'CHARSET':
-		$code = "lire_meta('charset')";
-		break;
-
-
-	case 'LANG_LEFT':
-		$code = "lang_dir(\$GLOBALS['spip_lang'],'left','right')";
-		break;
-
-	case 'LANG_RIGHT':
-		$code = "lang_dir(\$GLOBALS['spip_lang'],'right','left')";
-		break;
-
-	case 'LANG_DIR':
-		$code = "lang_dir(\$GLOBALS['spip_lang'],'ltr','rtl')";
-		break;
-
-	case 'PUCE':
-		$code = "propre('- ')";
-		break;
-
-
-	case 'DATE_NOUVEAUTES':
-		$code = "((lire_meta('quoi_de_neuf') == 'oui' AND lire_meta('majnouv')) ? normaliser_date(lire_meta('majnouv')) : \"'0000-00-00'\")";
-		break;
-
-	case 'URL_SITE_SPIP':
-		$code = "lire_meta('adresse_site')";
-		break;
-
-	case 'URL_ARTICLE':
-		$code = "generer_url_article(" . 
-			index_pile($id_boucle, 'id_article', $boucles) . 
-			")" ;
-		if ($boucles[$id_boucle]->hash)
-			$code = "url_var_recherche(" . $code . ")";
-		break;
-
-	case 'URL_RUBRIQUE':
-		$code = "generer_url_rubrique(" . 
-			index_pile($id_boucle, 'id_rubrique', $boucles) . 
-			")" ;
-		if ($boucles[$id_boucle]->hash)
-			$code = "url_var_recherche(" . $code . ")";
-		break;
-
-	case 'URL_BREVE':
-		$code = "generer_url_breve(" .
-			index_pile($id_boucle, 'id_breve', $boucles) . 
-			")";
-		if ($boucles[$id_boucle]->hash)
-			$code = "url_var_recherche(" . $code . ")";
-		break;
-
-	case 'URL_MOT':
-		$code = "generer_url_mot(" .
-			index_pile($id_boucle, 'id_mot', $boucles) .
-			")";
-		$code = "url_var_recherche(" . $code . ")";
-		break;
-
-	case 'URL_FORUM':
-		$code = "generer_url_forum(" .
-			index_pile($id_boucle, 'id_forum', $boucles) .")";
-		break;
-
-	case 'URL_DOCUMENT':
-		$code = "generer_url_document(" .
-			index_pile($id_boucle, 'id_document', $boucles) . ")";
-		break;
-
-	case 'URL_AUTEUR': # 1.7.2
-		$code = "generer_url_auteur(" .
-			index_pile($id_boucle, 'id_auteur', $boucles) .")";
-		if ($boucles[$id_boucle]->hash)
-			$code = "url_var_recherche(" . $code . ")";
-		break;
-
-	case 'NOTES':
-		$milieu = '$lacible = $GLOBALS["les_notes"];
-			$GLOBALS["les_notes"] = "";
-			$GLOBALS["compt_note"] = 0;
-			$GLOBALS["marqueur_notes"] ++;
-			';
-		$code = '$lacible';
-		break;
-
-	case 'RECHERCHE':
-		$code = 'htmlspecialchars($GLOBALS["recherche"])';
-		break;
-
-	case 'COMPTEUR_BOUCLE':
-		$code = '$compteur_boucle';
-		break;
-
-	case 'TOTAL_BOUCLE':
-		if ($id_mere === '') {
-			include_local("inc-debug-squel.php3");
-			erreur_squelette(_L("Champ #TOTAL_BOUCLE hors boucle"), '', $id_boucle);
-		}
-		$code = "\$Numrows['$id_mere']";
-		$boucles[$id_mere]->numrows = true;
-		break;
-
-	case 'POINTS':
-		$n = 0;
-		$b = $id_boucle;
-		$code = '';
-		while ($b != '') {
-			if ($s = $boucles[$b]->param) {
-				foreach($s as $v) {
-					if (strpos($v,'recherche') !== false) {
-						$code = '$Pile[$SP' . (($n==0) ? "" : "-$n") .
-							'][points]';
-					$b = '';
-					break;
-					}
-				}
-			}
-			$n++;
-			$b = $boucles[$b]->id_parent;
-		}
-		if (!$code) {
-			include_local("inc-debug-squel.php3");
-			erreur_squelette(_L("Champ #POINTS hors d'une recherche"), '', $idb);
-		}
-		break;
-
-	case 'POPULARITE_ABSOLUE':
-		$code = 'ceil(' .
-			index_pile($id_boucle, "popularite", $boucles) .
-			')';
-		break;
-
-	case 'POPULARITE_SITE':
-		$code = 'ceil(lire_meta(\'popularite_total\'))';
-		break;
-
-	case 'POPULARITE_MAX':
-		$code = 'ceil(lire_meta(\'popularite_max\'))';
-		break;
-
-	case 'EXPOSER':
-		$on = 'on';
-		$off= '';
-		if ($fonctions) {
-			// Gerer la notation [(#EXPOSER|on,off)]
-			reset($fonctions);
-			list(, $onoff) = each($fonctions);
-			ereg("([^,]*)(,(.*))?", $onoff, $regs);
-			$on = addslashes($regs[1]);
-			$off = addslashes($regs[3]);
-
-			// autres filtres
-			$filtres=Array();
-			while (list(, $nom) = each($fonctions))
-				$filtres[] = $nom;
-			$fonctions = $filtres;
-		}
+function balise_NOM_SITE_SPIP_dist($params) {
+  $params->code = "lire_meta('nom_site')";
+  return $params;
+}
+
+function balise_EMAIL_WEBMASTER_dist($params) {
+  $params->code = "lire_meta('email_webmaster')";
+  return $params;
+}
+
+function balise_CHARSET_dist($params) {
+  $params->code = "lire_meta('charset')";
+  return $params;
+}
+
+
+function balise_LANG_LEFT_dist($params) {
+  $params->code = "lang_dir(\$GLOBALS['spip_lang'],'left','right')";
+  return $params;
+}
+
+function balise_LANG_RIGHT_dist($params) {
+  $params->code = "lang_dir(\$GLOBALS['spip_lang'],'right','left')";
+  return $params;
+}
+
+function balise_LANG_DIR_dist($params) {
+  $params->code = "lang_dir(\$GLOBALS['spip_lang'],'ltr','rtl')";
+  return $params;
+}
+
+function balise_PUCE_dist($params) {
+  $params->code = "propre('- ')";
+  return $params;
+}
+
+
+function balise_DATE_NOUVEAUTES_dist($params) {
+  $params->code = "((lire_meta('quoi_de_neuf') == 'oui' AND lire_meta('majnouv')) ? normaliser_date(lire_meta('majnouv')) : \"'0000-00-00'\")";
+  return $params;
+}
+
+function balise_URL_SITE_SPIP_dist($params) {
+  $params->code = "lire_meta('adresse_site')";
+  return $params;
+}
+
+
+function balise_URL_ARTICLE_dist($params) {
+	$_type = $params->boucles[$params->id_boucle]->type_requete;
+	if ($_type == 'articles') {
+		$_id_article = champ_sql('id_article', $params);
+		$params->code = "generer_url_article($_id_article)";
+	} else if ($_type == 'syndic_articles') {
+		$params->code = champ_sql('url', $params);
+	}
+
+	if ($params->boucles[$params->id_boucle]->hash)
+		$params->code = "url_var_recherche(" . $params->code . ")";
 
-		$type_boucle = $boucles[$id_boucle]->type_requete;
-		$primary_key = $table_primary[$type_boucle];
-
-		$code = '(calcul_exposer('
-		.index_pile($id_boucle, $primary_key, $boucles)
-		.', "'.$primary_key.'", $Pile[0]) ?'." '$on': '$off')";
-		break;
-
-
-	//
-	// Inserer directement un document dans le squelette
-	//
-	case 'EMBED_DOCUMENT':
-		$milieu = '
-		$lacible = '
-		. index_pile($id_boucle, 'id_document', $boucles)
-		. ';
-		$lacible = embed_document($lacible, \'' .
-		($fonctions ? join($fonctions, "|") : "") .
-		'\', false);';
-		$fonctions = "";
-		$code = '$lacible';
-		break;
-
-	// Debut et fin de surlignage auto des mots de la recherche
-	// on insere une balise Span avec une classe sans spec:
-	// c'est transparent s'il n'y a pas de recherche,
-	// sinon elles seront remplacees par les fontions de inc_surligne
-	// flag_pcre est juste une flag signalant que preg_match est dispo.
-
-	case 'DEBUT_SURLIGNE':
-		$code = ($flag_pcre ? ('\'<span class="spip_surligneconditionnel">\'') : '');
-		break;
-	case 'FIN_SURLIGNE':
-		$code = ($flag_pcre ? ('\'</span class="spip_surligneconditionnel">\'') : '');
-		break;
-
-    // Formulaire de changement de langue
-	case 'MENU_LANG':
-		$code = '"<"."?php
-			include_ecrire(\"inc_lang.php3\");
-			echo menu_langues(\"var_lang\", \$menu_lang);
-			?".">"';
-		break;
-
-    // Formulaire de changement de langue / page de login
-	case 'MENU_LANG_ECRIRE':
-		$code = '"<"."?php
-			include_ecrire(\"inc_lang.php3\");
-			echo menu_langues(\"var_lang_ecrire\", \$menu_lang);
-			?".">"';
-		break;
-
-	//
-	// Formulaires de login
-	//
-	case 'LOGIN_PRIVE':
-		$code = '"<"."?php include(\'inc-login.php3\'); login(\'\', \'prive\'); ?".">"'; 
-		break;
-
-	case 'LOGIN_PUBLIC':
-		if ($nom = $fonctions[0])
-			$lacible = "new Link('".$nom."')";
-		else
-			$lacible = '\$GLOBALS[\'clean_link\']';
-		$code = '"<"."?php include(\'inc-login.php3\'); login(' . $lacible . ', false); ?".">"';
-		$fonctions = array();
-		break;
-
-	case 'URL_LOGOUT':
-		if ($fonctions) {
-			$url = "&url=".$fonctions[0];
-			$fonctions = array();
-		} else {
-			$url = '&url=\'.urlencode(\$clean_link->getUrl()).\'';
+	return $params;
+}
+
+function balise_URL_RUBRIQUE_dist($params) {
+  $params->code = "generer_url_rubrique(" . 
+	champ_sql('id_rubrique',$params) . 
+	")" ;
+  if ($params->boucles[$params->id_boucle]->hash)
+	$params->code = "url_var_recherche(" . $params->code . ")";
+  return $params;
+}
+
+function balise_URL_BREVE_dist($params) {
+  $params->code = "generer_url_breve(" .
+	champ_sql('id_breve',$params) . 
+	")";
+  if ($params->boucles[$params->id_boucle]->hash)
+	$params->code = "url_var_recherche(" . $params->code . ")";
+  return $params;
+}
+
+function balise_URL_MOT_dist($params) {
+  $params->code = "generer_url_mot(" .
+	champ_sql('id_mot',$params) .
+	")";
+  $params->code = "url_var_recherche(" . $params->code . ")";
+  return $params;
+}
+
+function balise_URL_FORUM_dist($params) {
+  $params->code = "generer_url_forum(" .
+	champ_sql('id_forum',$params) .")";
+  return $params;
+}
+
+function balise_URL_DOCUMENT_dist($params) {
+  $params->code = "generer_url_document(" .
+	champ_sql('id_document',$params) . ")";
+  return $params;
+}
+
+function balise_URL_AUTEUR_dist($params) {
+  $params->code = "generer_url_auteur(" .
+	champ_sql('id_auteur',$params) .")";
+  if ($params->boucles[$params->id_boucle]->hash)
+	$params->code = "url_var_recherche(" . $params->code . ")";
+  return $params;
+}
+
+function balise_NOTES_dist($params) {
+  $params->entete = '$lacible = $GLOBALS["les_notes"];
+$GLOBALS["les_notes"] = "";
+$GLOBALS["compt_note"] = 0;
+$GLOBALS["marqueur_notes"] ++;
+';
+  $params->code = '$lacible';
+  return $params;
+}
+
+function balise_RECHERCHE_dist($params) {
+  $params->code = 'htmlspecialchars($GLOBALS["recherche"])';
+  return $params;
+}
+
+function balise_COMPTEUR_BOUCLE_dist($params) {
+  $params->code = '$compteur_boucle';
+  return $params;
+}
+
+function balise_TOTAL_BOUCLE_dist($params) {
+  if ($params->id_mere === '') {
+	include_local("inc-debug-squel.php3");
+	erreur_squelette(_L("Champ #TOTAL_BOUCLE hors boucle"), '', $params->id_boucle);
+  }
+  $params->code = "\$Numrows['$params->id_mere']";
+  $params->boucles[$params->id_mere]->numrows = true;
+  return $params;
+}
+
+function balise_POINTS_dist($params) {
+  $n = 0;
+  $b = $params->id_boucle;
+  $params->code = '';
+  while ($b != '') {
+	if ($s = $params->boucles[$b]->param) {
+	  foreach($s as $v) {
+		if (strpos($v,'recherche') !== false) {
+		  $params->code = '$Pile[$SP' . (($n==0) ? "" : "-$n") .
+			'][points]';
+		  $b = '';
+		  break;
 		}
-		$code = '"<"."?php if (\$GLOBALS[\'auteur_session\'][\'login\'])
- { echo \'spip_cookie.php3?logout_public=\'.\$GLOBALS[\'auteur_session\'][\'login\'].\'' . $url . '\'; } ?".">"';
-		break;
-
-	case 'LOGO_ARTICLE':
-	case 'LOGO_ARTICLE_NORMAL':
-	case 'LOGO_ARTICLE_RUBRIQUE':
-	case 'LOGO_ARTICLE_SURVOL':
-	case 'LOGO_AUTEUR':
-	case 'LOGO_AUTEUR_NORMAL':
-	case 'LOGO_AUTEUR_SURVOL':
-	case 'LOGO_SITE':
-	case 'LOGO_BREVE':
-	case 'LOGO_BREVE_RUBRIQUE':
-	case 'LOGO_MOT':
-	case 'LOGO_RUBRIQUE':
-	case 'LOGO_RUBRIQUE_NORMAL':
-	case 'LOGO_RUBRIQUE_SURVOL':
-	case 'LOGO_DOCUMENT' :
-		// retour immediat: filtres derogatoires traites dans la fonction
-		return calculer_champ_LOGO($fonctions, $nom_champ, $id_boucle, $boucles, $id_mere);
-		break; 
-
-	default:
-		// champ inconnu. Il s'autodenote.
-		$code = "'#$nom_champ'";
-		break;
-	} // switch
-
-	list($c,$m) = applique_filtres($fonctions, $code, $id_boucle, $boucles, $id_mere);
-	return array($c,$milieu . $m);
+	  }
+	}
+	$n++;
+	$b = $params->boucles[$b]->id_parent;
+  }
+  if (!$params->code) {
+	include_local("inc-debug-squel.php3");
+	erreur_squelette(_L("Champ #POINTS hors d'une recherche"), '', $params->id_boucle);
+  }
+  return $params;
+}
+
+function balise_POPULARITE_ABSOLUE_dist($params) {
+  $params->code = 'ceil(' .
+	champ_sql('popularite', $params) .
+	')';
+  return $params;
+}
+
+function balise_POPULARITE_SITE_dist($params) {
+  $params->code = 'ceil(lire_meta(\'popularite_total\'))';
+  return $params;
 }
 
+function balise_POPULARITE_MAX_dist($params) {
+  $params->code = 'ceil(lire_meta(\'popularite_max\'))';
+  return $params;
+}
+
+function balise_EXPOSER_dist($params) {
+  global  $table_primary;
+  $on = 'on';
+  $off= '';
+  if ($params->fonctions) {
+	// Gerer la notation [(#EXPOSER|on,off)]
+	reset($params->fonctions);
+	list(, $onoff) = each($params->fonctions);
+	ereg("([^,]*)(,(.*))?", $onoff, $regs);
+	$on = addslashes($regs[1]);
+	$off = addslashes($regs[3]);
+	
+	// autres filtres
+	$filtres=Array();
+	while (list(, $nom) = each($params->fonctions))
+	  $filtres[] = $nom;
+	$params->fonctions = $filtres;
+  }
+
+  $type_boucle = $params->boucles[$params->id_boucle]->type_requete;
+  $primary_key = $table_primary[$type_boucle];
+
+  $params->code = '(calcul_exposer('
+	.champ_sql($primary_key, $params)
+	.', "'.$primary_key.'", $Pile[0]) ?'." '$on': '$off')";
+  return $params;
+}
+
+
+//
+// Inserer directement un document dans le squelette
+//
+function balise_EMBED_DOCUMENT_dist($params) {
+  $params->entete = '
+$lacible = '
+	. champ_sql('id_document',$params)
+	. ';
+$lacible = embed_document($lacible, \'' .
+	($fonctions ? join($fonctions, "|") : "") .
+	'\', false);';
+  $fonctions = "";
+  $params->code = '$lacible';
+  return $params;
+}
+
+// Debut et fin de surlignage auto des mots de la recherche
+// on insere une balise Span avec une classe sans spec:
+// c'est transparent s'il n'y a pas de recherche,
+// sinon elles seront remplacees par les fontions de inc_surligne
+// flag_pcre est juste une flag signalant que preg_match est dispo.
+
+function balise_DEBUT_SURLIGNE_dist($params) {
+  global $flag_pcre;
+  $params->code = ($flag_pcre ? ('\'<span class="spip_surligneconditionnel">\'') : "''");
+  return $params;
+}
+function balise_FIN_SURLIGNE_dist($params) {
+  global $flag_pcre;
+  $params->code = ($flag_pcre ? ('\'</span class="spip_surligneconditionnel">\'') : "''");
+  return $params;
+}
+
+// Formulaire de changement de langue
+function balise_MENU_LANG_dist($params) {
+  $params->code = '"<"."?php
+include_ecrire(\"inc_lang.php3\");
+echo menu_langues(\"var_lang\", \$menu_lang);
+?".">"';
+  return $params;
+}
+
+// Formulaire de changement de langue / page de login
+function balise_MENU_LANG_ECRIRE_dist($params) {
+  $params->code = '"<"."?php
+include_ecrire(\"inc_lang.php3\");
+echo menu_langues(\"var_lang_ecrire\", \$menu_lang);
+?".">"';
+  return $params;
+}
 
 //
-// Fonctions OK
+// Formulaires de login
 //
+function balise_LOGIN_PRIVE_dist($params) {
+  $params->code = '"<"."?php include(\'inc-login.php3\'); login(\'\', \'prive\'); ?".">"'; 
+  return $params;
+}
+
+function balise_LOGIN_PUBLIC_dist($params) {
+  if ($nom = $params->fonctions[0])
+	$lacible = "new Link('".$nom."')";
+  else
+	$lacible = '\$GLOBALS[\'clean_link\']';
+  $params->code = '"<"."?php include(\'inc-login.php3\'); login(' . $lacible . ', false); ?".">"';
+  $params->fonctions = array();
+  return $params;
+}
+
+function balise_URL_LOGOUT_dist($params) {
+  if ($params->fonctions) {
+	$url = "&url=".$params->fonctions[0];
+	$params->fonctions = array();
+  } else {
+	$url = '&url=\'.urlencode(\$clean_link->getUrl()).\'';
+  }
+  $params->code = '"<"."?php if (\$GLOBALS[\'auteur_session\'][\'login\'])
+{ echo \'spip_cookie.php3?logout_public=\'.\$GLOBALS[\'auteur_session\'][\'login\'].\'' . $url . '\'; } ?".">"';
+  return $params;
+}
+
+function balise_LOGO_ARTICLE_dist($params) {
+  // retour immediat: filtres derogatoires traites dans la fonction
+  return calculer_champ_LOGO($params);
+}
+
+function balise_LOGO_ARTICLE_NORMAL_dist($params) {
+  // retour immediat: filtres derogatoires traites dans la fonction
+  return calculer_champ_LOGO($params);
+}
+
+function balise_LOGO_ARTICLE_RUBRIQUE_dist($params) {
+  // retour immediat: filtres derogatoires traites dans la fonction
+  return calculer_champ_LOGO($params);
+}
+
+function balise_LOGO_ARTICLE_SURVOL_dist($params) {
+  // retour immediat: filtres derogatoires traites dans la fonction
+  return calculer_champ_LOGO($params);
+}
+
+function balise_LOGO_AUTEUR_dist($params) {
+  // retour immediat: filtres derogatoires traites dans la fonction
+  return calculer_champ_LOGO($params);
+}
+
+function balise_LOGO_AUTEUR_NORMAL_dist($params) {
+  // retour immediat: filtres derogatoires traites dans la fonction
+  return calculer_champ_LOGO($params);
+}
+
+function balise_LOGO_AUTEUR_SURVOL_dist($params) {
+  // retour immediat: filtres derogatoires traites dans la fonction
+  return calculer_champ_LOGO($params);
+}
+
+function balise_LOGO_SITE_dist($params) {
+  // retour immediat: filtres derogatoires traites dans la fonction
+  return calculer_champ_LOGO($params);
+}
+
+function balise_LOGO_BREVE_dist($params) {
+  // retour immediat: filtres derogatoires traites dans la fonction
+  return calculer_champ_LOGO($params);
+}
+
+function balise_LOGO_BREVE_RUBRIQUE_dist($params) {
+  // retour immediat: filtres derogatoires traites dans la fonction
+  return calculer_champ_LOGO($params);
+}
+
+function balise_LOGO_MOT_dist($params) {
+  // retour immediat: filtres derogatoires traites dans la fonction
+  return calculer_champ_LOGO($params);
+}
+
+function balise_LOGO_RUBRIQUE_dist($params) {
+  // retour immediat: filtres derogatoires traites dans la fonction
+  return calculer_champ_LOGO($params);
+}
+
+function balise_LOGO_RUBRIQUE_NORMAL_dist($params) {
+  // retour immediat: filtres derogatoires traites dans la fonction
+  return calculer_champ_LOGO($params);
+}
+
+function balise_LOGO_RUBRIQUE_SURVOL_dist($params) {
+  // retour immediat: filtres derogatoires traites dans la fonction
+  return calculer_champ_LOGO($params);
+}
+
+function balise_LOGO_DOCUMENT_dist($params) {
+  // retour immediat: filtres derogatoires traites dans la fonction
+  return calculer_champ_LOGO($params);
+}
+
 
 function balise_INTRODUCTION_dist ($p) {
 	$_type = $p->boucles[$p->id_boucle]->type_requete;
-- 
GitLab