Jeremy Newman : last modified header support
Jeremy Newman
jnewman at winehq.org
Tue Jun 7 11:24:04 CDT 2022
Module: website
Branch: master
Commit: 4a98d2a130f6d220583b8fae8caae5afae10c38b
URL: https://source.winehq.org/git/website.git/?a=commit;h=4a98d2a130f6d220583b8fae8caae5afae10c38b
Author: Jeremy Newman <jnewman at codeweavers.com>
Date: Tue Jun 7 10:38:54 2022 -0500
last modified header support
dynamically build last modified based off on content
update headers for cacheing
---
include/html.php | 105 ++++++++++++++++++++++++++++++++++---------------------
1 file changed, 65 insertions(+), 40 deletions(-)
diff --git a/include/html.php b/include/html.php
index ca744580..46c95f46 100644
--- a/include/html.php
+++ b/include/html.php
@@ -29,6 +29,7 @@ class html
private $template_cache = array(); // cache for template data
private $template_vars = array(); // vars to pass to EXEC script from template
private $trans_table = array(); // translation table data
+ private $last_modified = 0; // default last modified for header
// header code in showpage()
private $header_code = array('pre' => '', 'post' => '');
@@ -423,6 +424,29 @@ class html
}
}
+ // SET LAST MODIFIED
+ public function set_last_modified ($time = 0, $convert = false)
+ {
+ // set to current time
+ if ($time === -1)
+ {
+ debug("global", "last-modified: " . gmdate("D, d M Y H:i:s", time()) . " GMT");
+ $this->last_modified = time();
+ return;
+ }
+
+ // convert time from string
+ if ($convert)
+ $time = strtotime($time);
+
+ // if time is newer, then update last modified
+ if ($time <= time() and $time > $this->last_modified)
+ {
+ debug("global", "last-modified: " . gmdate("D, d M Y H:i:s", $time) . " GMT");
+ $this->last_modified = $time;
+ }
+ }
+
// HTML BR
public function br ($count = 1)
{
@@ -981,52 +1005,53 @@ class html
{
global $config;
- // if no theme, use default theme from config
- if (!$theme)
- $theme = $config->theme;
-
// debug
debug("template", "loading template: theme:[{$theme}] lang: [{$this->lang}] template:[{$template}]");
- // load from cache if we have already loaded before
- if (isset($this->template_cache[$template]))
+ $file = '';
+ $in = '';
+
+ // theme determines where template is loaded from
+ switch ($theme)
{
+ // load from global
+ case "global":
+ if (file_exists("{$this->_file_root}/templates/global/{$template}.template"))
+ $file = "{$this->_file_root}/templates/global/{$template}.template";
+ break;
+
+ // load template from theme
+ default:
+ if (file_exists("{$this->_file_root}/templates/{$this->lang}/{$template}.template"))
+ $file = "{$this->_file_root}/templates/{$this->lang}/{$template}.template";
+ else if (($config->lang != $this->lang) and file_exists("{$this->_file_root}/templates/{$config->lang}/{$template}.template"))
+ $file = "{$this->_file_root}/templates/{$config->lang}/{$template}.template";
+ break;
+ }
+
+ // set last mofified if newer
+ if (!empty($file))
+ {
+ $this->set_last_modified(filemtime($file));
+ }
+
+ // where to load data from for template
+ if (!empty($this->template_cache[$template]))
+ {
+ // from cache
$in = $this->template_cache[$template];
}
- else
+ else if (!empty($file))
{
- // theme determines where template is loaded from
- switch ($theme)
- {
- // load from local template repository
- case "base":
- case "local":
- if (file_exists("{$this->_file_root}/templates/{$this->lang}/{$template}.template"))
- $in = join("",file("{$this->_file_root}/templates/{$this->lang}/{$template}.template"));
- else if (($config->lang != $this->lang) and file_exists("{$this->_file_root}/templates/{$config->lang}/{$template}.template"))
- $in = join("",file("{$this->_file_root}/templates/{$config->lang}/{$template}.template"));
- break;
-
- // load from global
- case "global":
- if (file_exists("{$this->_file_root}/templates/global/{$template}.template"))
- $in = join("",file("{$this->_file_root}/templates/global/{$template}.template"));
- break;
-
- // load template from theme
- default:
- if (file_exists("{$this->_file_root}/templates/{$this->lang}/global/themes/{$theme}/{$template}.template"))
- $in = join("",file("{$this->_file_root}/templates/{$this->lang}/global/themes/{$theme}/{$template}.template"));
- else if (($config->lang != $this->lang) and file_exists("{$this->_file_root}/templates/{$config->lang}/global/themes/{$theme}/{$template}.template"))
- $in = join("",file("{$this->_file_root}/templates/{$config->lang}/global/themes/{$theme}/{$template}.template"));
- }
+ // from file
+ $in = join("",file($file));
}
// oops not found, load 404 template
if (empty($in))
{
- $in = '';
$this->in404 = 1;
+ $this->set_last_modified(-1);
if (file_exists("{$this->_file_root}/templates/{$this->lang}/global/404.template"))
$in .= join("",file("{$this->_file_root}/templates/{$this->lang}/global/404.template"));
else if (file_exists("{$this->_file_root}/templates/{$config->lang}/global/404.template"))
@@ -1036,7 +1061,8 @@ class html
}
// cache this template to save on i/o
- $this->template_cache[$template] = $in;
+ if (empty($this->template_cache[$template]))
+ $this->template_cache[$template] = $in;
// return the text with the vars replaced
return $this->template_replace($in, $vars, $noremovetags);
@@ -1579,15 +1605,14 @@ class html
}
}
- // HTTP HEADER (better header)
+ // HTTP HEADER
public function http_header ($type = "text/html")
{
+ if (empty($this->last_modified))
+ $this->set_last_modified(-1);
header("Content-type: ".$type."; charset=UTF-8");
- header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
- header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
- header("Cache-Control: no-store, no-cache, must-revalidate");
- header("Cache-Control: post-check=0, pre-check=0", false);
- header("Pragma: no-cache");
+ header("Cache-Control: public, max-age=86400");
+ header("Last-Modified: " . gmdate("D, d M Y H:i:s", $this->last_modified . " GMT"));
}
// REDIRECT (simple httpd header redirect)
More information about the wine-cvs
mailing list