From 5c7eafb214c0b73a11610c41d1d2654fe8ac907d Mon Sep 17 00:00:00 2001
From: Fil <fil@rezo.net>
Date: Sun, 5 Feb 2006 22:22:17 +0000
Subject: [PATCH] =?UTF-8?q?correction=20d'un=20bug=20sur=20#CACHE,=20qui?=
 =?UTF-8?q?=20n'=C3=A9tait=20pas=20utilis=C3=A9=20pour=20d=C3=A9terminer?=
 =?UTF-8?q?=20si=20le=20cache=20restait=20ou=20non=20valide=20;=20on=20int?=
 =?UTF-8?q?roduit=20un=20entete=20propri=C3=A9taire=20(=C3=A0=20nommer=20c?=
 =?UTF-8?q?omme=20on=20veut)=20pour=20stocker=20cette=20valeur=20ailleurs?=
 =?UTF-8?q?=20que=20dans=20cache-control,=20car=20on=20peut=20tr=C3=A8s=20?=
 =?UTF-8?q?bien=20vouloir=20mettre=20en=20cache=20pendant=20longtemps=20#C?=
 =?UTF-8?q?ACHE{10000}=20une=20page=20dynamique=20#HTTP=5FHEADER{Cache-Con?=
 =?UTF-8?q?trol:=20no-cache=20etc}?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 inc-balises.php3 | 11 +++++++++--
 inc-cache.php3   | 12 +++++-------
 inc-calcul.php3  | 10 ++++++----
 3 files changed, 20 insertions(+), 13 deletions(-)

diff --git a/inc-balises.php3 b/inc-balises.php3
index be76428160..fa48ee1058 100644
--- a/inc-balises.php3
+++ b/inc-balises.php3
@@ -805,12 +805,19 @@ function balise_HTTP_HEADER_dist($p) {
 // #CACHE{24*3600}
 function balise_CACHE_dist($p) {
 	$duree = valeur_numerique($p->param[0][1][0]->texte);
+
+	// noter la duree du cache dans un entete proprietaire
+	$p->code .= '\'<'.'?php header("X-Spip-Cache: '
+		. $duree
+		. '"); ?'.'>\'';
+
+	// remplir le header Cache-Control
 	if ($duree > 0)
-		$p->code = '\'<'.'?php header("Cache-Control: max-age='
+		$p->code .= '.\'<'.'?php header("Cache-Control: max-age='
 			. $duree
 			. '"); ?'.'>\'';
 	else
-		$p->code = '\'<'
+		$p->code .= '.\'<'
 		.'?php header("Cache-Control: no-store, no-cache, must-revalidate"); ?'
 		.'><'
 		.'?php header("Pragma: no-cache"); ?'
diff --git a/inc-cache.php3 b/inc-cache.php3
index d54b6891cc..199bbfa3e5 100644
--- a/inc-cache.php3
+++ b/inc-cache.php3
@@ -136,15 +136,13 @@ function cache_valide($chemin_cache, $contenu, $date) {
 
 // gestion des delais par specification a l'interieur du squelette
 
-function cache_valide_autodetermine($chemin_cache, $contenu, $date) {
+function cache_valide_autodetermine($chemin_cache, $page, $date) {
 
-	if (!$contenu) return 1;
+	if (!$page) return 1;
+
+	if (strlen($duree = $page['entetes']['X-Spip-Cache']))
+		return ($date + $duree > time()) ? 0 : $t;
 
-	if (preg_match('/max-age\s*=\s*(\d+)/', 
-		       $page['entetes']['Cache-Control'],
-		       $r)) 
-	  return ($r[1] > (time() - $date)) ? 0 : $r[1];
-	
 	// squelette ancienne maniere, on se rabat sur le vieux modele
 	return cache_valide($chemin_cache, $contenu, $date);
 }
diff --git a/inc-calcul.php3 b/inc-calcul.php3
index ca4902e95c..b208d60ad4 100644
--- a/inc-calcul.php3
+++ b/inc-calcul.php3
@@ -273,10 +273,12 @@ function analyse_resultat_skel($nom, $Cache, $corps) {
 	}
 
 	return array('texte' => $corps,
-		     'squelette' => $nom,
-		     'process_ins' => ((strpos($corps,'<'.'?')=== false)?'html':'php'),
-		     'invalideurs' => $Cache,
-		     'entetes' => $headers);
+		'squelette' => $nom,
+		'process_ins' => ((strpos($corps,'<'.'?')=== false)?'html':'php'),
+		'invalideurs' => $Cache,
+		'entetes' => $headers,
+		'duree' => $headers['X-Spip-Cache']
+	);
 }
 
 ?>
-- 
GitLab