From ff52bee1a2c1b3f6654c8bfe41d1a3d8630e2b55 Mon Sep 17 00:00:00 2001
From: thomascube <thomas@roundcube.net>
Date: Thu, 01 Mar 2007 15:40:00 -0500
Subject: [PATCH] Solved wrong caching of message preview (#1484153, #1484236)

---
 program/include/rcube_shared.inc |   37 ++++++++++++++++++++++++++++++++++---
 1 files changed, 34 insertions(+), 3 deletions(-)

diff --git a/program/include/rcube_shared.inc b/program/include/rcube_shared.inc
index ba63c82..558fbf7 100644
--- a/program/include/rcube_shared.inc
+++ b/program/include/rcube_shared.inc
@@ -1216,17 +1216,48 @@
 
 
 // send header with expire date 30 days in future
-function send_future_expire_header()
+function send_future_expire_header($offset=2600000)
   {
   if (headers_sent())
     return;
 
-  header("Expires: ".gmdate("D, d M Y H:i:s", mktime()+2600000)." GMT");
-  header("Cache-Control: ");
+  header("Expires: ".gmdate("D, d M Y H:i:s", mktime()+$offset)." GMT");
+  header("Cache-Control: max-age=$offset");
   header("Pragma: ");
   }
 
 
+// check request for If-Modified-Since and send an according response
+function send_modified_header($mdate, $etag=null)
+{
+  if (headers_sent())
+    return;
+    
+  $iscached = false;
+  if ($_SERVER['HTTP_IF_MODIFIED_SINCE'] && strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) >= $mdate)
+    $iscached = true;
+  
+  $etag = $etag ? "\"$etag\"" : null;
+  if ($etag && $_SERVER['HTTP_IF_NONE_MATCH'] == $etag)
+    $iscached = true;
+  
+  if ($iscached)
+    header("HTTP/1.x 304 Not Modified");
+  else
+    header("Last-Modified: ".gmdate("D, d M Y H:i:s", $mdate)." GMT");
+  
+  header("Cache-Control: max-age=0");
+  header("Expires: ");
+  header("Pragma: ");
+  
+  if ($etag)
+    header("Etag: $etag");
+  
+  if ($iscached)
+    exit;
+}
+
+
 // function to convert an array to a javascript array
 function array2js($arr, $type='')
   {

--
Gitblit v1.9.1