From 224bbab4274cf9d8e1cdfbcefb6c19ab2fae630a Mon Sep 17 00:00:00 2001
From: "Committo,Ergo:sum" <esj@rezo.net>
Date: Sat, 21 Oct 2006 14:27:07 +0000
Subject: [PATCH] =?UTF-8?q?afficher=5Farticles=20fonce=20et=20s'enrichit.?=
 =?UTF-8?q?=20Les=20diff=C3=A9rents=20param=C3=A8tres=20d'affichage=20?=
 =?UTF-8?q?=C3=A9taient=20en=20fait=20tomb=C3=A9s=20en=20d=C3=A9su=C3=A9tu?=
 =?UTF-8?q?de=20et=20disparaissent.=20Il=20sont=20remplac=C3=A9s=20par=20u?=
 =?UTF-8?q?n=20unique=20param=C3=A8tre=20fontionnel=20optionnel,=20dont=20?=
 =?UTF-8?q?la=20valeur=20par=20d=C3=A9faut=20est=20inc=5Fformater=5Farticl?=
 =?UTF-8?q?e=5Fdist.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Par ailleurs la mise en base des requetes à trancher n'avait pas besoin de distinguer le connecté, $connect_id_auteur étant déjà dans la requete lorsque l'affichage est effectivement différencié. Dans tous les autres cas il est intéressant de ne pas mettre en base autant de requetes statiques que d'auteurs connus du site (on pourrait meme ne pas tenir compte implicitement de leur langue par défaut comme c'est le cas actuellement). Du coup l'entree id_auteur dans la table ajax_fonc est libre, et on n'y met à present le nombre de réponses de la requetes (qui donne le nombre de tranches) plutot que de le recalculer à chaque appel ajax.
---
 ecrire/exec/accueil.php         |   2 +-
 ecrire/exec/articles_page.php   |   2 +-
 ecrire/exec/auteur_infos.php    |   2 +-
 ecrire/exec/memoriser.php       |  15 ++-
 ecrire/exec/mots_edit.php       |   2 +-
 ecrire/exec/naviguer.php        |   2 +-
 ecrire/inc/formater_article.php |  31 +++--
 ecrire/inc/presentation.php     | 205 ++++++++++++--------------------
 8 files changed, 105 insertions(+), 156 deletions(-)

diff --git a/ecrire/exec/accueil.php b/ecrire/exec/accueil.php
index f46be54221..d2cf4440b8 100644
--- a/ecrire/exec/accueil.php
+++ b/ecrire/exec/accueil.php
@@ -36,7 +36,7 @@ else
 	// Les articles a valider
 	//
 
- echo  afficher_articles(_T('info_articles_proposes'), array("WHERE" => "statut='prop'$vos_articles", 'ORDER BY' => "date DESC"));
+ echo  afficher_articles(_T('info_articles_proposes'), array("WHERE" => "statut='prop'", 'ORDER BY' => "date DESC"));
 
 	//
 	// Les breves a valider
diff --git a/ecrire/exec/articles_page.php b/ecrire/exec/articles_page.php
index 912992a3af..29d3940d65 100644
--- a/ecrire/exec/articles_page.php
+++ b/ecrire/exec/articles_page.php
@@ -67,7 +67,7 @@ echo "</p>";
 // Vos articles publies
 //
 
- echo "<p>", afficher_articles(_T('info_publies'),	array("FROM" =>"spip_articles AS articles, spip_auteurs_articles AS lien ", "WHERE" => "articles.id_article=lien.id_article AND lien.id_auteur=\"$connect_id_auteur\" AND articles.statut='publie'", 'ORDER BY' => "articles.date DESC"), true);
+ echo "<p>", afficher_articles(_T('info_publies'),	array("FROM" =>"spip_articles AS articles, spip_auteurs_articles AS lien ", "WHERE" => "articles.id_article=lien.id_article AND lien.id_auteur=\"$connect_id_auteur\" AND articles.statut='publie'", 'ORDER BY' => "articles.date DESC"));
 echo "</p>";
 
 //
diff --git a/ecrire/exec/auteur_infos.php b/ecrire/exec/auteur_infos.php
index 4a66edadcc..fbee7296ea 100644
--- a/ecrire/exec/auteur_infos.php
+++ b/ecrire/exec/auteur_infos.php
@@ -137,7 +137,7 @@ function auteurs_interventions($id_auteur, $statut)
 	else if ($connect_id_auteur == $id_auteur) $aff_art = "'prepa','prop','publie'";
 	else $aff_art = "'prop','publie'";
 
-	echo afficher_articles(_T('info_articles_auteur'),  array('FROM' => "spip_articles AS articles, spip_auteurs_articles AS lien",  "WHERE" => "lien.id_auteur='$id_auteur' AND lien.id_article=articles.id_article AND articles.statut IN ($aff_art)",  'ORDER BY' => "articles.date DESC"), true);
+	echo afficher_articles(_T('info_articles_auteur'),  array('FROM' => "spip_articles AS articles, spip_auteurs_articles AS lien",  "WHERE" => "lien.id_auteur='$id_auteur' AND lien.id_article=articles.id_article AND articles.statut IN ($aff_art)",  'ORDER BY' => "articles.date DESC"));
 
 	if ($id_auteur != $connect_id_auteur
 	    AND ($statut == '0minirezo' OR $statut == '1comite')) {
diff --git a/ecrire/exec/memoriser.php b/ecrire/exec/memoriser.php
index 90c38ad9dc..9fb2a73ba7 100644
--- a/ecrire/exec/memoriser.php
+++ b/ecrire/exec/memoriser.php
@@ -15,9 +15,12 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
 // http://doc.spip.org/@exec_memoriser_dist
 function exec_memoriser_dist()
 {
-	global $connect_id_auteur;
+	$id_ajax = intval(_request('id_ajax_fonc'));
 
-	$res = spip_fetch_array(spip_query("SELECT variables, hash FROM spip_ajax_fonc	WHERE id_ajax_fonc =" . intval(_request('id_ajax_fonc')) . " AND id_auteur=$connect_id_auteur"));
+	// le champ id_auteur sert finalement a memoriser le nombre de lignes
+	// (a renommer)
+
+	$res = spip_fetch_array(spip_query($q = "SELECT variables, id_auteur, hash FROM spip_ajax_fonc WHERE id_ajax_fonc = $id_ajax"));
 
 	if ($res) {
 		
@@ -25,10 +28,10 @@ function exec_memoriser_dist()
 
 	  include_spip('inc/presentation');		
 
-	  if (_request('trad'))
-	    ajax_retour(afficher_articles_trad ($param, $id_ajax_fonc, $titre_table, $requete, $afficher_visites, $afficher_auteurs));
+	  $formater_article = _request('trad') ? '' : charger_fonction('formater_article', 'inc');
+
+	  ajax_retour(afficher_articles_trad($titre_table, $requete, $formater_article, $param, $id_ajax, $res['id_auteur']));
 
-	  else ajax_retour(afficher_articles ($titre_table, $requete, $afficher_visites, $afficher_auteurs));
-	}
+	} else spip_log("memoriser $q vide");
 }
 ?>
diff --git a/ecrire/exec/mots_edit.php b/ecrire/exec/mots_edit.php
index 9afdaac7b2..db51a931a9 100644
--- a/ecrire/exec/mots_edit.php
+++ b/ecrire/exec/mots_edit.php
@@ -205,7 +205,7 @@ if ($id_mot) {
 
 	afficher_rubriques(_T('info_rubriques_liees_mot'), array("FROM" => 'spip_rubriques AS rubrique, spip_mots_rubriques AS lien', 'WHERE' => "lien.id_mot='$id_mot' AND lien.id_rubrique=rubrique.id_rubrique", 'ORDER BY' => "rubrique.titre"));
 
-	echo afficher_articles(_T('info_articles_lies_mot'),	array('FROM' => "spip_articles AS articles, spip_mots_articles AS lien", 'WHERE' => "lien.id_mot='$id_mot' AND lien.id_article=articles.id_article AND articles.statut IN ($aff_articles)", 'ORDER BY' => "articles.date DESC"), true);
+	echo afficher_articles(_T('info_articles_lies_mot'),	array('FROM' => "spip_articles AS articles, spip_mots_articles AS lien", 'WHERE' => "lien.id_mot='$id_mot' AND lien.id_article=articles.id_article AND articles.statut IN ($aff_articles)", 'ORDER BY' => "articles.date DESC"));
 
 	afficher_breves(_T('info_breves_liees_mot'), array("FROM" => 'spip_breves AS breves, spip_mots_breves AS lien', 'WHERE' => "lien.id_mot='$id_mot' AND lien.id_breve=breves.id_breve", 'ORDER BY' => "breves.date_heure DESC"));
 
diff --git a/ecrire/exec/naviguer.php b/ecrire/exec/naviguer.php
index 4016ecbfaa..997b4ae328 100644
--- a/ecrire/exec/naviguer.php
+++ b/ecrire/exec/naviguer.php
@@ -322,7 +322,7 @@ if ($relief) {
 //////////  Les articles publies
 /////////////////////////
 
-	  echo afficher_articles(_T('info_tous_articles_presents'), array("WHERE" => "statut='publie' AND id_rubrique='$id_rubrique'", 'ORDER BY' => "date DESC"), true);
+	  echo afficher_articles(_T('info_tous_articles_presents'), array("WHERE" => "statut='publie' AND id_rubrique='$id_rubrique'", 'ORDER BY' => "date DESC"));
 
 
 
diff --git a/ecrire/inc/formater_article.php b/ecrire/inc/formater_article.php
index a59460f63c..9415147ac3 100644
--- a/ecrire/inc/formater_article.php
+++ b/ecrire/inc/formater_article.php
@@ -14,11 +14,11 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
 
 // Fonction appelee dans une boucle, calculer les invariants au premier appel.
 
-function inc_formater_article($id_article, $row, $afficher_auteurs, $afficher_langue, $langue_defaut)
+function inc_formater_article($row )
 {
 	global $dir_lang, $options, $spip_lang_right, $spip_display;
 	static $pret = false;
-	static $chercher_logo, $img_admin, $formater_auteur, $nb;
+	static $chercher_logo, $img_admin, $formater_auteur, $nb, $langue_defaut, $afficher_langue;
 
 	if (!$pret) {
 		$chercher_logo = ($spip_display != 1 AND $spip_display != 4 AND $GLOBALS['meta']['image_process'] != "non");
@@ -29,9 +29,17 @@ function inc_formater_article($id_article, $row, $afficher_auteurs, $afficher_la
 		$nb = ($options != "avancees")
 		  ? ''
 		  : _T('info_numero_abbreviation');
+		if (($GLOBALS['meta']['multi_rubriques'] == 'oui' AND (!isset($GLOBALS['id_rubrique']))) OR $GLOBALS['meta']['multi_articles'] == 'oui') {
+			$afficher_langue = true;
+			$langue_defaut = isset($GLOBALS['langue_rubrique'])
+			  ? $GLOBALS['meta']['langue_site']
+			  : $GLOBALS['langue_rubrique'];
+		}
 		$pret = true;
 	}
 
+	$id_article = $row['id_article'];
+
 	if ($chercher_logo) {
 		if ($logo = $chercher_logo($id_article, 'id_article', 'on')) {
 			list($fid, $dir, $nom, $format) = $logo;
@@ -62,22 +70,19 @@ function inc_formater_article($id_article, $row, $afficher_auteurs, $afficher_la
 	. (!$logo ? '' :
 	   ("<div style='float: $spip_lang_right; margin-top: -2px; margin-bottom: -2px;'>" . $logo . "</div>"))
 	. typo($titre)
-	. (!($afficher_langue AND $lang != $langue_defaut) ? '' :
+	. (!($afficher_langue AND $lang != $GLOBALS['meta']['langue_site']) ? '' :
 	   (" <font size='1' color='#666666'$dir_lang>(".traduire_nom_langue($lang).")</font>"))
 	. (!$row['petition'] ? '' : (" <font size=1 color='red'>"._T('lien_petitions')."</font>"))
 	. "</a>"
 	. "</div>";
 	
-	if ($afficher_auteurs) {
-
-		$result = auteurs_article($id_article);
-		$les_auteurs = "";
-		while ($r = spip_fetch_array($result)) {
-			list($s, $mail, $nom, $w, $p) = $formater_auteur($r['id_auteur']);
-			$les_auteurs .= "$mail&nbsp;$nom, ";
-		}
-		$vals[] = substr($les_auteurs, 0, -2);
-	} else $vals[]= '&nbsp;';
+	$result = auteurs_article($id_article);
+	$les_auteurs = "";
+	while ($r = spip_fetch_array($result)) {
+		list($s, $mail, $nom, $w, $p) = $formater_auteur($r['id_auteur']);
+		$les_auteurs .= "$mail&nbsp;$nom, ";
+	}
+	$vals[] = substr($les_auteurs, 0, -2);
 
 	$s = affdate_jourcourt($date);
 	$vals[] = $s ? $s : '&nbsp;';
diff --git a/ecrire/inc/presentation.php b/ecrire/inc/presentation.php
index 9f6d88cd63..87cee9e233 100644
--- a/ecrire/inc/presentation.php
+++ b/ecrire/inc/presentation.php
@@ -685,191 +685,120 @@ function afficher_script_statut($id, $type, $n, $img, $statut, $title, $act)
 // Afficher tableau d'articles
 //
 // http://doc.spip.org/@afficher_articles
-function afficher_articles($titre_table, $requete, $afficher_visites = false, $afficher_auteurs = true, $obligatoire = false, $afficher_cadre = true, $afficher_descriptif = true) {
+function afficher_articles($titre_table, $requete, $formater_article='') {
 
-	global $connect_id_auteur, $connect_statut, $dir_lang;
-	global $options, $spip_display;
-	global $spip_lang_left, $spip_lang_right;
+	global $options;
 
 	if (!isset($requete['FROM']))  $requete['FROM'] = 'spip_articles AS articles';
+
+	if (!isset($requete['SELECT'])) {
+		$requete['SELECT'] = "articles.id_article, articles.titre, articles.id_rubrique, articles.statut, articles.date, articles.lang, articles.id_trad, articles.descriptif";
+	}
+	
+	if (!isset($requete['GROUP BY'])) $requete['GROUP BY'] = '';
+
 	// memo des arguments en base pour gérer l'affichage par tranche
 	// et/ou par langues.
 
-	$hash = "0x".substr(md5($connect_id_auteur. serialize($requete) . $titre_table), 0, 31);
+	$hash = "0x".substr(md5(serialize($requete) . $GLOBALS['meta']['gerer_trad'] . $titre_table), 0, 31);
 	$tmp_var = 't' . substr($hash, 2, 7);
 
-	$res_proch = spip_query("SELECT id_ajax_fonc FROM spip_ajax_fonc WHERE hash=$hash AND id_auteur=$connect_id_auteur LIMIT 1");
+	// le champ id_auteur sert finalement a memoriser le nombre de lignes
+	// (a renommer)
+
+	$res_proch = spip_query("SELECT id_ajax_fonc, id_auteur FROM spip_ajax_fonc WHERE hash=$hash LIMIT 1");
 	if ($row = spip_fetch_array($res_proch)) {
 		$id_ajax = $row["id_ajax_fonc"];
+		$cpt = $row["id_auteur"];
 	} else  {
 		include_spip ('base/abstract_sql');
 		$variables = serialize(array(
 			"param" => $tmp_var,
 			"requete" => $requete,
 			"titre_table" => $titre_table,
-			"afficher_visites" => $afficher_visites,
-			"afficher_auteurs" => $afficher_auteurs
 			));
 
-		$id_ajax = spip_abstract_insert("spip_ajax_fonc", "(id_auteur, variables, hash, date)", "($connect_id_auteur, " . spip_abstract_quote($variables) . ", $hash, NOW())");
-		}
-
-	$activer_statistiques = $GLOBALS['meta']["activer_statistiques"];
-	$afficher_visites = ($afficher_visites AND $connect_statut == "0minirezo" AND $activer_statistiques != "non");
-	$afficher_langue = false;
-	$langue_defaut = $GLOBALS['meta']['langue_site'];
-	// Preciser la requete (alleger les requetes)
-	if (!isset($requete['SELECT'])) {
-		$requete['SELECT'] = "articles.id_article, articles.titre, articles.id_rubrique, articles.statut, articles.date, articles.lang";
-
-		if (($GLOBALS['meta']['multi_rubriques'] == 'oui' AND (!isset($GLOBALS['id_rubrique']))) OR $GLOBALS['meta']['multi_articles'] == 'oui') {
-			$afficher_langue = true;
-			if (isset($GLOBALS['langue_rubrique'])) $langue_defaut = $GLOBALS['langue_rubrique'];
-			$requete['SELECT'] .= ", articles.lang";
+		$cpt = spip_fetch_array(spip_query("SELECT COUNT(*) AS n FROM " . $requete['FROM'] . ($requete['WHERE'] ? (' WHERE ' . $requete['WHERE']) : '') . ($requete['GROUP BY'] ? (' GROUP BY ' . $requete['GROUP BY']) : '')));
+		if (!$cpt = $cpt['n']) return '' ;
+		
+		if (isset($requete['LIMIT'])) $cpt = min($requete['LIMIT'], $cpt);
+		$id_ajax = spip_abstract_insert("spip_ajax_fonc", "(variables, hash, id_auteur, date)", "(" . spip_abstract_quote($variables) . ", $hash, $cpt, NOW())");
 		}
-		if ($afficher_visites)
-			$requete['SELECT'] .= ", articles.visites, articles.popularite";
-		if ($afficher_descriptif)
-			$requete['SELECT'] .= ", articles.descriptif";
-	}
-	
-	if ($options == "avancees")  $ajout_col = 1;
-	else $ajout_col = 0;
-
-	if (!isset($requete['GROUP BY'])) $requete['GROUP BY'] = '';
-
-	$cpt = spip_fetch_array(spip_query("SELECT COUNT(*) AS n FROM " . $requete['FROM'] . ($requete['WHERE'] ? (' WHERE ' . $requete['WHERE']) : '') . ($requete['GROUP BY'] ? (' GROUP BY ' . $requete['GROUP BY']) : '')));
-	if (! ($obligatoire OR ($cpt = $cpt['n']))) return '' ;
-	if (isset($requete['LIMIT'])) $cpt = min($requete['LIMIT'], $cpt);
 
 	$nb_aff = floor(1.5 * _TRANCHES);
 	$deb_aff = intval(_request($tmp_var));
 
-
 	$requete['FROM'] = preg_replace("/(spip_articles AS \w*)/", "\\1 LEFT JOIN spip_petitions AS petitions USING (id_article)", $requete['FROM']);
 
 	$requete['SELECT'] .= ", petitions.id_article AS petition ";
 
-	if ($cpt > $nb_aff) {
-		$nb_aff = (_TRANCHES); 
-		$tranches = afficher_tranches_requete($cpt, $afficher_auteurs ? 4 + $ajout_col : 3 + $ajout_col, $tmp_var, generer_url_ecrire('memoriser',"id_ajax_fonc=$id_ajax"), $nb_aff);
-
-	} else 	$tranches = '';
-
-	$result = spip_query("SELECT " . $requete['SELECT'] . " FROM " . $requete['FROM'] . ($requete['WHERE'] ? (' WHERE ' . $requete['WHERE']) : '') . ($requete['GROUP BY'] ? (' GROUP BY ' . $requete['GROUP BY']) : '') . ($requete['ORDER BY'] ? (' ORDER BY ' . $requete['ORDER BY']) : '') . " LIMIT " . ($deb_aff >= 0 ? "$deb_aff, $nb_aff" : ($requete['LIMIT'] ? $requete['LIMIT'] : "99999")));
-
+	if (!function_exists($formater_article))
+		$formater_article = charger_fonction('formater_article', 'inc');
+	return afficher_articles_trad($titre_table, $requete, $formater_article, $tmp_var, $id_ajax, $cpt);
+}
 
-	$table = array();
-	$formater_article = charger_fonction('formater_article', 'inc');
+// http://doc.spip.org/@afficher_articles_trad
+function afficher_articles_trad($titre_table, $requete, $formater_article, $tmp_var, $id_ajax, $cpt) {
 
-	while ($row = spip_fetch_array($result)) {
-	  	$id = $row['id_article'];
-		$table[]= $formater_article($id, $row, $afficher_auteurs, $afficher_langue, $langue_defaut);
-	}
-	spip_free_result($result);
+	global $options, $spip_lang_right;
 
-	if ($options == "avancees") { // Afficher le numero (JMB)
-		if ($afficher_auteurs) {
-			$largeurs = array(11, '', 80, 100, 50);
-			$styles = array('', 'arial2', 'arial1', 'arial1', 'arial1');
-		} else {
-			$largeurs = array(11, '', 100, 50);
-			$styles = array('', 'arial2', 'arial1', 'arial1');
-		}
+	if (!$formater_article) {
+	  $formater_article = 'afficher_articles_trad_boucle';
+	  $largeurs = array(11, 24, '', '1');
+	  $styles = array('', 'arial1', 'arial1', '');
+	  $icone = "langues-off-12.gif";
+	  $trad =0;
 	} else {
-		if ($afficher_auteurs) {
-			$largeurs = array(11, '', 100, 100);
-			$styles = array('', 'arial2', 'arial1', 'arial1');
+		if ($options == "avancees") { // Afficher le numero (JMB)
+		  $largeurs = array(11, '', 80, 100, 50);
+		  $styles = array('', 'arial2', 'arial1', 'arial1', 'arial1');
 		} else {
-			$largeurs = array(11, '', 100);
-			$styles = array('', 'arial2', 'arial1');
+		  $largeurs = array(11, '', 100, 100);
+		  $styles = array('', 'arial2', 'arial1', 'arial1');
 		}
+		$icone = 'langues-12.gif';
+		$trad = 1;
 	}
 
-	$res = afficher_article_logo_trad($titre_table, $tranches, $largeurs, $table, $styles, $tmp_var, $id_ajax, 1); 
+	$nb_aff = floor(1.5 * _TRANCHES);
+	$deb_aff = intval(_request($tmp_var));
 
-	return ajax_action_greffe($tmp_var,$res);
-}
+	if ($cpt > $nb_aff) {
+		$nb_aff = (_TRANCHES); 
+		$tranches = afficher_tranches_requete($cpt,  count($largeurs), $tmp_var, generer_url_ecrire('memoriser', "id_ajax_fonc=$id_ajax&trad=$trad"), $nb_aff);
+	} else 	$tranches = '';
+
+	$q = spip_query("SELECT " . $requete['SELECT'] . " FROM " . $requete['FROM'] . ($requete['WHERE'] ? (' WHERE ' . $requete['WHERE']) : '') . ($requete['GROUP BY'] ? (' GROUP BY ' . $requete['GROUP BY']) : '') . ($requete['ORDER BY'] ? (' ORDER BY ' . $requete['ORDER BY']) : '') . " LIMIT " . ($deb_aff >= 0 ? "$deb_aff, $nb_aff" : ($requete['LIMIT'] ? $requete['LIMIT'] : "99999")));
+	$t = array();
+	while ($r = spip_fetch_array($q)) $t[]= $formater_article($r);
+	spip_free_result($q);
 
-function afficher_article_logo_trad($titre, $tranches, $largeurs, $table, $styles, $tmp_var, $id_ajax, $queltrad)
-{
-	global  $spip_lang_right;
-	$icone = $queltrad ? "langues-off-12.gif" : 'langues-12.gif';
 	$style = "style='visibility: hidden; float: $spip_lang_right'";
 
 	$texte = http_img_pack("searching.gif", "*", $style . " id='img_$tmp_var'");
 
 	if (($GLOBALS['meta']['gerer_trad'] == "oui")) {
-		$url= generer_url_ecrire('memoriser',"id_ajax_fonc=$id_ajax&trad=$queltrad");
+		$url= generer_url_ecrire('memoriser',"id_ajax_fonc=$id_ajax&trad=$trad");
 		$texte .= 
 		 "\n<div style='float: $spip_lang_right;'><a href=\"#\"\nonclick=\"return charger_id_url('$url','$tmp_var');\">"
 		. "<img\nsrc='". _DIR_IMG_PACK . $icone ."' /></a></div>";
 	}
-	$texte .=  '<b>' . $titre  . '</b>';
+	$texte .=  '<b>' . $titre_table  . '</b>';
 
-	return  "\n<div style='height: 12px;'></div>"
+	$res =  "\n<div style='height: 12px;'></div>"
 	. "\n<div class='liste'>"
 	. bandeau_titre_boite2($texte, "article-24.gif", 'white', 'black',false)
 	. afficher_liste_debut_tableau()
 	. $tranches
-	. afficher_liste($largeurs, $table, $styles)
+	. afficher_liste($largeurs, $t, $styles)
 	. afficher_liste_fin_tableau()
 	. "</div>\n";
 
-}
-
-// http://doc.spip.org/@afficher_articles_trad
-function afficher_articles_trad($tmp_var, $id_ajax, $titre_table,
-				$requete, $afficher_visites = false,
-$afficher_auteurs= true,  $obligatoire = false, $afficher_cadre = true, $afficher_descriptif = true) {
-
-	global $connect_id_auteur, $connect_statut, $dir_lang;
-	global $options, $spip_lang_left, $spip_lang_right;
-
-	if (!$requete['FROM']) $requete['FROM']=  'spip_articles AS articles';
-
-	$langues_site = explode(',', $GLOBALS['meta']['langues_multilingue']);
-	$activer_statistiques = $GLOBALS['meta']["activer_statistiques"];
-	$afficher_visites = ($afficher_visites AND $connect_statut == "0minirezo" AND $activer_statistiques != "non");
-
-	// Preciser la requete (alleger les requetes)
-	if (!$requete['SELECT']) {
-		$requete['SELECT'] = "articles.id_article, articles.titre, articles.id_rubrique, articles.statut, articles.date, articles.id_trad, articles.lang";
-	}
-	
-	if ($options == "avancees")  $ajout_col = 1;
-	else $ajout_col = 0;
-	
-	$cpt = spip_fetch_array(spip_query("SELECT COUNT(*) AS n FROM " . $requete['FROM'] . ($requete['WHERE'] ? (' WHERE ' . $requete['WHERE']) : '') . ($requete['GROUP BY'] ? (' GROUP BY ' . $requete['GROUP BY']) : '')));
-	if (! ($obligatoire OR ($cpt = $cpt['n']))) return '';
-	if ($requete['LIMIT']) $cpt = min($requete['LIMIT'], $cpt);
-
-	$nb_aff = floor(1.5 * _TRANCHES);
-	$deb_aff = intval(_request($tmp_var));
-
-	if ($cpt > $nb_aff) {
-		$nb_aff = (_TRANCHES); 
-		$tranches = afficher_tranches_requete($cpt,  4, $tmp_var, generer_url_ecrire('memoriser', "id_ajax_fonc=$id_ajax&trad=1"), $nb_aff);
-	} else 	$tranches = '';
-
-	$result = spip_query("SELECT " . $requete['SELECT'] . " FROM " . $requete['FROM'] . ($requete['WHERE'] ? (' WHERE ' . $requete['WHERE']) : '') . ($requete['GROUP BY'] ? (' GROUP BY ' . $requete['GROUP BY']) : '') . ($requete['ORDER BY'] ? (' ORDER BY ' . $requete['ORDER BY']) : '') . " LIMIT " . ($deb_aff >= 0 ? "$deb_aff, $nb_aff" : ($requete['LIMIT'] ? $requete['LIMIT'] : "99999")));
-
-	$table = array();
-	while ($row = spip_fetch_array($result)) {
-		$table[]=afficher_articles_trad_boucle($row, $afficher_langue, $langue_defaut, $langues_site);
-	}
-	spip_free_result($result);
-
-	$largeurs = array(11, 24, '', '1');
-	$styles = array('', 'arial1', 'arial1', '');
-
-	$res = afficher_article_logo_trad($titre_table, $tranches, $largeurs, $table, $styles, $tmp_var, $id_ajax, 0);
-	
-	return $res;
+	return ajax_action_greffe($tmp_var,$res);
 }
 
 // http://doc.spip.org/@afficher_articles_trad_boucle
-function afficher_articles_trad_boucle($row, $afficher_langue, $langue_defaut, $langues_site)
+function afficher_articles_trad_boucle($row)
 {
 	global $dir_lang,  $spip_lang_right;
 
@@ -883,7 +812,6 @@ function afficher_articles_trad_boucle($row, $afficher_langue, $langue_defaut, $
 	$id_trad = $row['id_trad'];
 	$lang = $row['lang'];
 
-
 	// La petite puce de changement de statut
 	$vals[] = puce_statut_article($id_article, $statut, $id_rubrique);
 
@@ -892,20 +820,32 @@ function afficher_articles_trad_boucle($row, $afficher_langue, $langue_defaut, $
 	$langues_art = "";
 	$dates_art = "";
 	$l = "";
+
 	$res_trad = spip_query("SELECT id_article, lang, date_modif  FROM spip_articles WHERE id_trad = $id_trad AND id_trad > 0");
+
 	while ($row_trad = spip_fetch_array($res_trad)) {
+
 		$id_article_trad = $row_trad["id_article"];
 		$lang_trad = $row_trad["lang"];
 		$date_trad = $row_trad["date_modif"];
-		
 		$dates_art[$lang_trad] = $date_trad;
 		$langues_art[$lang_trad] = $id_article_trad;
 		if ($id_article_trad == $id_trad) $date_ref = $date;
 	}
 
-	reset($langues_site);
+
+	// faudrait sortir ces invariants de boucle
+
+	if (($GLOBALS['meta']['multi_rubriques'] == 'oui' AND (!isset($GLOBALS['id_rubrique']))) OR $GLOBALS['meta']['multi_articles'] == 'oui') {
+			$afficher_langue = true;
+			$langue_defaut = isset($GLOBALS['langue_rubrique'])
+			  ? $GLOBALS['meta']['langue_site']
+			  : $GLOBALS['langue_rubrique'];
+	}
+
 	$span_lang = false;
-	while (list(,$k) = each($langues_site)) {
+
+	foreach(explode(',', $GLOBALS['meta']['langues_multilingue']) as $k){
 		if ($langues_art[$k]) {
 			if ($langues_art[$k] == $id_trad) {
 				$span_lang = "<a href='" . generer_url_ecrire("articles","id_article=".$langues_art[$k]) . "'><span class='lang_base'>$k</span></a>";
@@ -938,6 +878,7 @@ function afficher_articles_trad_boucle($row, $afficher_langue, $langue_defaut, $
 	if ($id_article == $id_trad) $titre = "<b>$titre</b>";
 			
 	$s .= typo($titre);
+
 	if ($afficher_langue AND $lang != $langue_defaut)
 		$s .= " <font size='1' color='#666666'$dir_lang>(".traduire_nom_langue($lang).")</font>";
 
-- 
GitLab