From 1fae9bed0ee635fc8d69c3d82539256d6044d556 Mon Sep 17 00:00:00 2001
From: "Committo,Ergo:sum" <esj@rezo.net>
Date: Sat, 10 May 2008 07:10:22 +0000
Subject: [PATCH] =?UTF-8?q?Suite=20de=20[11625]:=20ne=20pas=20retomber=20s?=
 =?UTF-8?q?ur=20un=20cache=20d'une=20tranche=20issu=20d'un=20autre=20tri?=
 =?UTF-8?q?=20quand=20on=20utilise=20=C3=A0=20la=20fois=20le=20changement?=
 =?UTF-8?q?=20de=20tri=20et=20les=20tranches=20dans=20les=20listes=20d'art?=
 =?UTF-8?q?icles=20ajax=C3=A9e.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 ecrire/exec/memoriser.php      | 12 +++++-----
 ecrire/inc/afficher_objets.php | 40 +++++++++++++++++++++++-----------
 2 files changed, 34 insertions(+), 18 deletions(-)

diff --git a/ecrire/exec/memoriser.php b/ecrire/exec/memoriser.php
index 0e75618dfc..5def63e1e5 100644
--- a/ecrire/exec/memoriser.php
+++ b/ecrire/exec/memoriser.php
@@ -20,19 +20,21 @@ function exec_memoriser_dist()
 	$hash = _request('hash');
 	$order = _request('order');
 	$by = _request('by');
+	$trad = _request('trad');
 	lire_fichier(_DIR_SESSIONS.'ajax_fonctions.txt', $ajax_fonctions);
 	$ajax_fonctions = @unserialize($ajax_fonctions);
 
 	if ($res = $ajax_fonctions[$hash]) {
-		list(,$t,$r,$p,$f) = $res;
+		include_spip('inc/afficher_objets');
+		list(,$t,$r,$f) = $res;
 		if (preg_match('/^[a-z0-9+.,]+$/', $by)
-		AND preg_match('/^\w*$/', $order)) 
+		AND preg_match('/^\w*$/', $order)) {
 			$r['ORDER BY'] = str_replace(',', " $order, ", $by) .  " $order";
+			sauver_requete($t, $r, $f);
+		}
 		$cpt = sql_countsel($r['FROM'], $r['WHERE'], $r['GROUP BY']);
 		include_spip('inc/presentation');
-		include_spip('inc/afficher_objets');
-		$res = afficher_articles_trad($t, $r, $f, $p, $hash, $cpt, _request('trad'));
-
+		$res = afficher_articles_trad($t, $r, $f, $hash, $cpt, $trad);
 	} else spip_log("memoriser $q vide");
 	ajax_retour($res);
 }
diff --git a/ecrire/inc/afficher_objets.php b/ecrire/inc/afficher_objets.php
index 073b365d64..a1a649966d 100644
--- a/ecrire/inc/afficher_objets.php
+++ b/ecrire/inc/afficher_objets.php
@@ -370,20 +370,29 @@ function inc_afficher_articles_dist($titre, $requete, $formater='') {
 	// memorisation des arguments pour gerer l'affichage par tranche
 	// et/ou par langues.
 
-	$hash = substr(md5(serialize($requete) . $GLOBALS['meta']['gerer_trad'] . $titre), 0, 31);
-	$tmp_var = 't' . substr($hash, 0, 7);
 
-	//
-	// Stocke la fonction ajax dans le fichier temp pour exec=memoriser
-	//
+	$hash = sauver_requete($titre, $requete, $formater);
+
+	if (isset($requete['LIMIT'])) $cpt = min($requete['LIMIT'], $cpt);
+	return afficher_articles_trad($titre, $requete, $formater, $hash, $cpt);
+}
+
+//
+// Stocke la fonction ajax dans le fichier temp pour exec=memoriser
+//
+
+function sauver_requete($titre, $requete, $formater)
+{
+	$r = $requete;
+	unset($r['ORDER BY']);
+	$hash = substr(md5(serialize($r) . $GLOBALS['meta']['gerer_trad'] . $titre), 0, 31);
 
 	// on lit l'existant
 	lire_fichier(_DIR_SESSIONS.'ajax_fonctions.txt', $ajax_fonctions);
 	$ajax_fonctions = @unserialize($ajax_fonctions);
 
 	// on ajoute notre fonction
-
-	$v = array(time(), $titre, $requete, $tmp_var, $formater);
+	$v = array(time(), $titre, $requete, $formater);
 	$ajax_fonctions[$hash] = $v;
 
 	// supprime les fonctions trop vieilles
@@ -395,15 +404,16 @@ 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);
-}
+	return $hash;
 
+}
 // http://doc.spip.org/@afficher_articles_trad
-function afficher_articles_trad($titre_table, $requete, $formater, $tmp_var, $hash, $cpt, $trad=0) {
+function afficher_articles_trad($titre_table, $requete, $formater, $hash, $cpt, $trad=0) {
 
 	global $spip_lang_right;
 
+	$tmp_var = 't' . substr($hash, 0, 7);
+
 	if ($trad) {
 		$formater = 'afficher_articles_trad_boucle';
 		$icone = "langues-off-12.gif";
@@ -417,8 +427,12 @@ function afficher_articles_trad($titre_table, $requete, $formater, $tmp_var, $ha
 
 	$texte =  '<b>' . $titre_table  . '</b>';
 
+	// Le parametre o sert a empecher le navigateur de reutiliser
+	// un cache de tranche issu d'un autre tri
+
+	$arg = "hash=$hash&o=" . $requete['ORDER BY'];
 	if (($GLOBALS['meta']['gerer_trad'] == "oui")) {
-		$url = generer_url_ecrire('memoriser',"hash=$hash&trad=" . (1-$trad));
+		$url = generer_url_ecrire('memoriser',"$arg&trad=" . (1-$trad));
 		$texte .=
 		"\n<span style='float: $spip_lang_right;'><a href=\"#\""
 		  . generer_onclic_ajax($url, $tmp_var, 0)
@@ -434,7 +448,7 @@ function afficher_articles_trad($titre_table, $requete, $formater, $tmp_var, $ha
 	$presenter_liste = charger_fonction('presenter_liste', 'inc');
 	$styles = array(array('', 11), array('arial2','', $url_t), array('arial1', 80), array('arial1', 100, $url_d), array('arial1', 50));
 	$tableau = array();
-	$url = generer_url_ecrire('memoriser', "hash=$hash&trad=$trad");
+	$url = generer_url_ecrire('memoriser', "$arg&trad=$trad");
 	$res = $presenter_liste($requete, $formater, $tableau, array(), false, $styles, $tmp_var, $texte, "article-24.gif", $url, $cpt);
 
 	return ajax_action_greffe($tmp_var, '', $res);
-- 
GitLab