From b825d4a3b0a9f0409dbdf65ce9018fc4bcb1c21f Mon Sep 17 00:00:00 2001
From: "Committo,Ergo:sum" <esj@rezo.net>
Date: Thu, 8 May 2008 20:33:56 +0000
Subject: [PATCH] =?UTF-8?q?Suite=20de=20[11602]:=20Tous=20les=20appels=20?=
 =?UTF-8?q?=C3=A0=20{{{afficher=5Ftranches=5Frequete}}}=20migrent=20dans?=
 =?UTF-8?q?=20{{{affiche=5Ftranche=5Fbandeau}}}=20=20et=20tous=20les=20app?=
 =?UTF-8?q?els=20=C3=A0=20{{{affiche=5Ftranche=5Fbandeau}}}=20=20migrent?=
 =?UTF-8?q?=20dans=20{{{presenter=5Fliste}}}=20ainsi=20que=20le=20GIF=20an?=
 =?UTF-8?q?im=C3=A9=20invisible=20hors=20appel=20Ajax.=20Cette=20fonction?=
 =?UTF-8?q?=20dispose=20ainsi=20de=20l'ID=20du=20bloc=20appelable=20en=20A?=
 =?UTF-8?q?jax=20s'il=20existe.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 ecrire/inc/afficher_objets.php | 38 +++++++-----------------
 ecrire/inc/editer_auteurs.php  | 20 ++++---------
 ecrire/inc/grouper_mots.php    | 17 +++--------
 ecrire/inc/message_select.php  | 13 ++-------
 ecrire/inc/presenter_liste.php | 53 ++++++++++++++++++++--------------
 5 files changed, 52 insertions(+), 89 deletions(-)

diff --git a/ecrire/inc/afficher_objets.php b/ecrire/inc/afficher_objets.php
index 44deec532d..ae4971ceb3 100644
--- a/ecrire/inc/afficher_objets.php
+++ b/ecrire/inc/afficher_objets.php
@@ -232,24 +232,18 @@ function inc_afficher_objets_dist($type, $titre,$requete,$formater='', $force=fa
 		else $langue_defaut = $GLOBALS['meta']['langue_site'];
 	} else $afficher_langue = $langue_defaut = '';
 
-	$tmp_var = 't_' . substr(md5(join('', $requete)), 0, 4);
-
 	$arg = array( $afficher_langue, false, $langue_defaut);
 	if (!function_exists($skel = "afficher_{$type}s_boucle")){
 		$skel = "afficher_objet_boucle";
 		$arg = array($type,id_table_objet($type),$afficher_langue, false, $langue_defaut);
 	}
 	$presenter_liste = charger_fonction('presenter_liste', 'inc');
-	$tranches = affiche_tranche_bandeau($requete, $tmp_var, $force, $skel, $arg);
+	$tmp_var = 't_' . substr(md5(join('', $requete)), 0, 4);
 	$largeurs = array('7','', '', '', '100', '38');
 	$styles = array('arial11', 'arial11', 'arial1', 'arial1', 'arial1 centered', 'arial1');
 
-	if ($deb_aff > 0)
-		$requete['LIMIT'] = "$deb_aff, $nb_aff" ;
-	else if (empty($requete['LIMIT'])) $requete['LIMIT'] = "99999";
-
 	$tableau = array(); // ne sert pas ici
-	return $presenter_liste($requete, $skel, $tableau, $arg, $force, $largeurs, $styles, $tranches, $titre, icone_table($type));
+	return $presenter_liste($requete, $skel, $tableau, $arg, $force, $largeurs, $styles, $tmp_var, $titre, icone_table($type));
 }
 
 function charger_fonction_logo_if()
@@ -381,8 +375,6 @@ function inc_afficher_articles_dist($titre, $requete, $formater='') {
 
 	$hash = substr(md5(serialize($requete) . $GLOBALS['meta']['gerer_trad'] . $titre), 0, 31);
 	$tmp_var = 't' . substr($hash, 0, 7);
-	$nb_aff = floor(1.5 * _TRANCHES);
-	$deb_aff = intval(_request($tmp_var));
 
 	//
 	// Stocke la fonction ajax dans le fichier temp pour exec=memoriser
@@ -393,7 +385,7 @@ function inc_afficher_articles_dist($titre, $requete, $formater='') {
 	$ajax_fonctions = @unserialize($ajax_fonctions);
 
 	// on ajoute notre fonction
-	if (isset($requete['LIMIT'])) $cpt = min($requete['LIMIT'], $cpt);
+
 	$v = array(time(), $titre, $requete, $tmp_var, $formater);
 	$ajax_fonctions[$hash] = $v;
 
@@ -406,6 +398,7 @@ function inc_afficher_articles_dist($titre, $requete, $formater='') {
 	ecrire_fichier(_DIR_SESSIONS.'ajax_fonctions.txt',
 		serialize($ajax_fonctions));
 
+	if (isset($requete['LIMIT'])) $cpt = min($requete['LIMIT'], $cpt);
 	return afficher_articles_trad($titre, $requete, $formater, $tmp_var, $hash, $cpt);
 }
 
@@ -426,34 +419,23 @@ function afficher_articles_trad($titre_table, $requete, $formater, $tmp_var, $ha
 		$alt = _T('afficher_trad');
 	}
 
-	$nb_aff = ($cpt  > floor(1.5 * _TRANCHES)) ? _TRANCHES : floor(1.5 * _TRANCHES) ;
-	$deb_aff = intval(_request($tmp_var));
-
-	if ($deb_aff >= 0)
-		$requete['LIMIT'] = "$deb_aff, $nb_aff" ;
-	else if (empty($requete['LIMIT'])) $requete['LIMIT'] = "99999";
-
-	$style = "style='visibility: hidden; float: $spip_lang_right'";
-
-	$texte = http_img_pack("searching.gif", "", $style . " id='img_$tmp_var'");
+	$texte =  '<b>' . $titre_table  . '</b>';
 
 	if (($GLOBALS['meta']['gerer_trad'] == "oui")) {
 		$url = generer_url_ecrire('memoriser',"hash=$hash&trad=" . (1-$trad));
 		$texte .=
 		 "\n<span style='float: $spip_lang_right;'><a href=\"#\"\nonclick=\"return charger_id_url('$url','$tmp_var');\">"
-		. "<img\nsrc='". chemin_image($icone) ."' alt='$alt' /></a></span>";
+		  . "<img\nsrc='". chemin_image($icone) ."' alt='$alt' /></a></span>";
+
 	}
-	$texte .=  '<b>' . $titre_table  . '</b>';
+
 
 	$presenter_liste = charger_fonction('presenter_liste', 'inc');
 	$largeurs = array(11, '', 80, 100, 50);
 	$styles = array('', 'arial2', 'arial1', 'arial1', 'arial1');
 	$tableau = array();
-
-	$tranches = ($cpt <= $nb_aff) ? ''
-	  : afficher_tranches_requete($cpt, $tmp_var, generer_url_ecrire('memoriser', "hash=$hash&trad=$trad"), $nb_aff);
-
-	$res = 	$presenter_liste($requete, $formater, $tableau, array(), false, $largeurs, $styles, $tranches, $texte, "article-24.gif");
+	$url = generer_url_ecrire('memoriser', "hash=$hash&trad=$trad");
+	$res = 	$presenter_liste($requete, $formater, $tableau, array(), false, $largeurs, $styles, $tmp_var, $texte, "article-24.gif", $url, $cpt);
 
 	return ajax_action_greffe($tmp_var, '', $res);
 }
diff --git a/ecrire/inc/editer_auteurs.php b/ecrire/inc/editer_auteurs.php
index 2d99f2c379..8765deec0c 100644
--- a/ecrire/inc/editer_auteurs.php
+++ b/ecrire/inc/editer_auteurs.php
@@ -199,23 +199,13 @@ function afficher_auteurs_objet($type, $id, $flag_editable, $cond, $script_edit,
 
 	$presenter_liste = charger_fonction('presenter_liste', 'inc');
 
-	$result = sql_select("id_auteur", $from, $where);
-	$cpt = sql_count($result);
+	$requete = array('SELECT' => "id_auteur", 'FROM' => $from, 'WHERE' => $where);
 	$tmp_var = "editer_auteurs-$id";
-	$nb_aff = floor(1.5 * _TRANCHES);
-	if ($cpt > $nb_aff) {
-		$nb_aff = _TRANCHES; 
-		$tranches = afficher_tranches_requete($cpt, $tmp_var, generer_url_ecrire('editer_auteurs',$arg_ajax), $nb_aff);
-	} else $tranches = '';
-	
-	$deb_aff = _request($tmp_var);
-	$deb_aff = ($deb_aff !== NULL ? intval($deb_aff) : 0);
-	
-	$limit = (($deb_aff < 0) ? '' : "$deb_aff, $nb_aff");
-	$requete = array('SELECT' => "id_auteur", 'FROM' => $from, 'WHERE' => $where, 'LIMIT' => $limit);
+	$url = generer_url_ecrire('editer_auteurs',$arg_ajax);
 
 	// charger ici meme si pas d'auteurs
-	// car inc_formater_auteur peut aussi redefinir determiner_non_auteurs qui sert plus loin
+	// car inc_formater_auteur peut aussi redefinir 
+	// determiner_non_auteurs qui sert plus loin
 	if (!$formater = charger_fonction("formater_auteur_$type", 'inc',true))
 		$formater = charger_fonction('formater_auteur', 'inc');
 
@@ -225,7 +215,7 @@ function afficher_auteurs_objet($type, $id, $flag_editable, $cond, $script_edit,
 	$styles = array('arial11', 'arial2', 'arial11', 'arial11', 'arial11', 'arial1');
 
 	$tableau = array(); // ne sert pas
-	return 	$presenter_liste($requete, 'ajouter_auteur_un', $tableau, array($formater, $retirer, $arg_ajax, $flag_editable, $id, $type, $script_edit), false, $largeurs, $styles, $tranche);
+	return 	$presenter_liste($requete, 'ajouter_auteur_un', $tableau, array($formater, $retirer, $arg_ajax, $flag_editable, $id, $type, $script_edit), false, $largeurs, $styles, $tmp_var, '','', $url);
 }
 
 // http://doc.spip.org/@ajouter_auteur_un
diff --git a/ecrire/inc/grouper_mots.php b/ecrire/inc/grouper_mots.php
index c8711b5817..4ea969349c 100644
--- a/ecrire/inc/grouper_mots.php
+++ b/ecrire/inc/grouper_mots.php
@@ -17,7 +17,7 @@ include_spip('inc/actions');
 include_spip('base/abstract_sql');
 
 // http://doc.spip.org/@inc_grouper_mots_dist
-function inc_grouper_mots_dist($id_groupe, $cpt) {
+function inc_grouper_mots_dist($id_groupe, $total) {
 	global $connect_statut, $spip_lang_right, $spip_lang;
 
 	$presenter_liste = charger_fonction('presenter_liste', 'inc');
@@ -27,19 +27,12 @@ function inc_grouper_mots_dist($id_groupe, $cpt) {
 	// - a donner un ID a la balise ou greffer le retour d'Ajax
 	// tant pour la prochaine tranche que pour le retrait de mot
 	$tmp_var = "editer_mots-$id_groupe";
-	$nb_aff = floor(1.5 * _TRANCHES);
-	if ($cpt > $nb_aff) {
-		$nb_aff = _TRANCHES; 
-		$tranches = afficher_tranches_requete($cpt, $tmp_var, generer_url_ecrire('grouper_mots',"id_groupe=$id_groupe&total=$cpt"), $nb_aff);
-	} else $tranches = '';
+	$url = generer_url_ecrire('grouper_mots',"id_groupe=$id_groupe");
 
-
-	$deb_aff = _request($tmp_var);
-	$deb_aff = ($deb_aff !== NULL ? intval($deb_aff) : 0);
 	$select = 'id_mot, id_groupe, titre, descriptif, '
 	. sql_multi ("titre", $spip_lang);
 
-	$requete = array('SELECT' => $select, 'FROM' => 'spip_mots', 'WHERE' => "id_groupe=$id_groupe", 'ORDER BY' => 'multi', 'LIMIT' => (($deb_aff < 0) ? '' : "$deb_aff, $nb_aff"));
+	$requete = array('SELECT' => $select, 'FROM' => 'spip_mots', 'WHERE' => "id_groupe=$id_groupe", 'ORDER BY' => 'multi');
 
 	$tableau = array();
 	$occurrences = calculer_liens_mots($id_groupe);
@@ -50,9 +43,7 @@ function inc_grouper_mots_dist($id_groupe, $cpt) {
 			$largeurs = array('', 100);
 			$styles = array('arial11', 'arial1');
 	}
-
-	return http_img_pack("searching.gif", "*", "style='visibility: hidden; position: absolute; $spip_lang_right: 0px; top: -20px;' id='img_$tmp_var'") 
-	  . 	$presenter_liste($requete, 'afficher_groupe_mots_boucle', $tableau, array($occurrences, $total, $deb_aff), false, $largeurs, $styles, $tranches);
+	return $presenter_liste($requete, 'afficher_groupe_mots_boucle', $tableau, array($occurrences, $total, $deb_aff), false, $largeurs, $styles, $tmp_var, '', '', $url);
 }
 
 // http://doc.spip.org/@afficher_groupe_mots_boucle
diff --git a/ecrire/inc/message_select.php b/ecrire/inc/message_select.php
index a7da79ad46..31d2f3754f 100644
--- a/ecrire/inc/message_select.php
+++ b/ecrire/inc/message_select.php
@@ -17,8 +17,6 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
 // http://doc.spip.org/@afficher_messages
 function afficher_messages($titre, $from, $where, &$messages_vus, $afficher_auteurs = true, $important = false) {
 
-	$tmp_var = 't_' . substr(md5($where.$from), 0, 4);
-
 	$requete = array('SELECT' => 'messages.id_message, messages.date_heure, messages.date_fin, messages.titre, messages.type, messages.rv', 'FROM' => "spip_messages AS messages$from", 'WHERE' => $where .(!$messages_vus ? '' : ' AND messages.id_message NOT IN ('.join(',', $messages_vus).')'), 'ORDER BY'=> 'date_heure DESC');
 
 	if ($afficher_auteurs) {
@@ -30,18 +28,11 @@ function afficher_messages($titre, $from, $where, &$messages_vus, $afficher_aute
 	}
 
 	$presenter_liste = charger_fonction('presenter_liste', 'inc');
-	$tranches =  affiche_tranche_bandeau($requete, $tmp_var, false, 'afficher_message_boucles', $afficher_auteurs);
-
-	if ($deb_aff > 0)
-		$requete['LIMIT'] = "$deb_aff, $nb_aff" ;
-	else if (empty($requete['LIMIT'])) $requete['LIMIT'] = "99999";
-
-
-#	$result = sql_select((isset($requete["SELECT"]) ? $requete["SELECT"] : "*"), $requete['FROM'], $requete['WHERE'], $requete['GROUP BY'], $requete['ORDER BY'], ($deb_aff > 0 ? "$deb_aff, $nb_aff" : ($requete['LIMIT'] ? $requete['LIMIT'] : "99999")));
+	$tmp_var = 't_' . substr(md5(join('', $requete)), 0, 4);
 
 	// cette variable est passe par reference et recevra les valeurs du champ indique 
 	$les_messages = 'id_message'; 
-	$res = 	$presenter_liste($requete, 'afficher_message_boucles', $les_messages, $afficher_auteur, $important, $largeurs, $styles, $tranches, $titre,  "messagerie-24.gif");
+	$res = 	$presenter_liste($requete, 'afficher_message_boucles', $les_messages, $afficher_auteur, $important, $largeurs, $styles, $tmp_var, $titre,  "messagerie-24.gif");
 	$messages_vus =  array_merge($messages_vus, $les_messages);
 
 	if (!$res) return '';
diff --git a/ecrire/inc/presenter_liste.php b/ecrire/inc/presenter_liste.php
index 9b2fdd01aa..fb52ca71c3 100644
--- a/ecrire/inc/presenter_liste.php
+++ b/ecrire/inc/presenter_liste.php
@@ -12,10 +12,20 @@
 
 if (!defined("_ECRIRE_INC_VERSION")) return;
 
-function inc_presenter_liste_dist($requete, $fonc, &$prims, $own, $force, $largeurs, $styles, $tranches = '', $title='', $icone='')
+// Cette fonction prend un argument un tableau decrivant une requete Select
+// et une fonction formatant chaque ligne du resultat de la requete
+// Elle renvoie une enumeration HTML de ces lignes formatees, 
+// avec une pagination appelable en Ajax si $idom et $url sont fournis
+
+function inc_presenter_liste_dist($requete, $fonc, &$prims, $own, $force, $largeurs, $styles, $idom='', $title='', $icone='', $url='', $cpt=NULL)
 {
 	global $spip_display, $spip_lang_left;
 
+	// $requete est passe par reference, pour modifier l'index LIMIT
+	if ($idom)
+		$tranches = affiche_tranche_bandeau($requete, $idom, $url, $cpt);
+	else $tranches = '';
+
 	$prim = $prims;
 	$prims = array();
 	$result = sql_select((isset($requete["SELECT"]) ? $requete["SELECT"] : "*"), $requete['FROM'], $requete['WHERE'], $requete['GROUP BY'], $requete['ORDER BY'], $requete['LIMIT']);
@@ -73,29 +83,31 @@ function inc_presenter_liste_dist($requete, $fonc, &$prims, $own, $force, $large
 }
 
 // http://doc.spip.org/@afficher_tranches_requete
-function afficher_tranches_requete($num_rows, $tmp_var, $url='', $nb_aff = 10, $old_arg=NULL) {
+function afficher_tranches_requete($num_rows, $idom, $url='', $nb_aff = 10, $old_arg=NULL) {
 	static $ancre = 0;
 	global $browser_name, $spip_lang_right, $spip_display;
 	if ($old_arg!==NULL){ // eviter de casser la compat des vieux appels $cols_span ayant disparu ...
-		$tmp_var = $url;		$url = $nb_aff; $nb_aff=$old_arg;
+		$idom = $url;		$url = $nb_aff; $nb_aff=$old_arg;
 	}
 
 	$ancre++;
 	$self = self();
 	$ie_style = ($browser_name == "MSIE") ? "height:1%" : '';
+	$style = "style='visibility: hidden; float: $spip_lang_right'";
+	$texte = http_img_pack("searching.gif", "*", "$style id='img_$idom'")
 
-	$texte = "\n<div style='$ie_style;' class='arial1 tranches' id='a$ancre'>";
-	$texte .= navigation_pagination($num_rows, $nb_aff, $url, $onclick=true, $tmp_var);
+	  . "\n<div style='$ie_style;' class='arial1 tranches' id='a$ancre'>"
+	  . navigation_pagination($num_rows, $nb_aff, $url, $onclick=true, $idom);
 
 	$on ='';
-	$script = parametre_url($self, $tmp_var, -1);
+	$script = parametre_url($self, $idom, -1);
 	if ($url) {
 				$on = "\nonclick=\"return charger_id_url('"
 				. $url
 				. "&amp;"
-				. $tmp_var
+				. $idom
 				. "=-1','"
-				. $tmp_var
+				. $idom
 				. '\');"';
 	}
 	$l = htmlentities(_T('lien_tout_afficher'));
@@ -106,28 +118,25 @@ function afficher_tranches_requete($num_rows, $tmp_var, $url='', $nb_aff = 10, $
 }
 
 // http://doc.spip.org/@affiche_tranche_bandeau
-function affiche_tranche_bandeau($requete, $tmp_var, $force, $skel, $own='')
+function affiche_tranche_bandeau(&$requete, $idom, $url='', $cpt=NULL)
 {
-	global $spip_display ;
-	$res = "";
-
 	if (!isset($requete['GROUP BY'])) $requete['GROUP BY'] = '';
 
-	$cpt = sql_countsel($requete['FROM'], $requete['WHERE'], $requete['GROUP BY']);
-
-	if (!($cpt OR $force)) return '';
+	if ($cpt === NULL)
+		$cpt = sql_countsel($requete['FROM'], $requete['WHERE'], $requete['GROUP BY']);
 
+	$deb_aff = intval(_request($idom));
 	$nb_aff = floor(1.5 * _TRANCHES);
 
 	if (isset($requete['LIMIT'])) $cpt = min($requete['LIMIT'], $cpt);
-
-	else if (!($deb_aff = intval(_request($tmp_var))))
-		 $requete['LIMIT'] = $nb_aff;
-
 	if ($cpt > $nb_aff) {
 		$nb_aff = (_TRANCHES); 
-		return afficher_tranches_requete($cpt, $tmp_var, '', $nb_aff);
-	}
-	return '';
+		$res = afficher_tranches_requete($cpt, $idom, $url, $nb_aff);
+	} else $res = '';
+
+	if (!isset($requete['LIMIT']))
+		$requete['LIMIT'] = "$deb_aff, $nb_aff";
+
+	return $res;
 }
 ?>
-- 
GitLab