From 533e8602c0be3aed7becc74002c58a7d1cf400c3 Mon Sep 17 00:00:00 2001 From: thomascube <thomas@roundcube.net> Date: Tue, 09 Jun 2009 04:08:00 -0400 Subject: [PATCH] Add cache-buster to scripts and linked files in skin templates --- program/include/rcube_html_page.php | 24 ++++++++++++++++++------ 1 files changed, 18 insertions(+), 6 deletions(-) diff --git a/program/include/rcube_html_page.php b/program/include/rcube_html_page.php index ab8eba5..d56b5ce 100644 --- a/program/include/rcube_html_page.php +++ b/program/include/rcube_html_page.php @@ -5,7 +5,7 @@ | program/include/rcube_html_page.php | | | | This file is part of the RoundCube PHP suite | - | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland | + | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | | CONTENTS: | @@ -31,8 +31,8 @@ protected $scripts = array(); protected $charset = 'UTF-8'; - protected $script_tag_file = "<script type=\"text/javascript\" src=\"%s%s\"></script>\n"; - protected $script_tag = "<script type=\"text/javascript\">\n<!--\n%s\n\n//-->\n</script>\n"; + protected $script_tag_file = "<script type=\"text/javascript\" src=\"%s\"></script>\n"; + protected $script_tag = "<script type=\"text/javascript\">\n/* <![CDATA[ */\n%s\n/* ]]> */\n</script>"; protected $default_template = "<html>\n<head><title></title></head>\n<body></body>\n</html>"; protected $title = ''; @@ -53,6 +53,9 @@ public function include_script($file, $position='head') { static $sa_files = array(); + + if (!preg_match('|^https?://|i', $file) && $file[0] != '/') + $file = $this->scripts_path . $file . (($fs = @filesize($this->scripts_path . $file)) ? '?s='.$fs : ''); if (in_array($file, $sa_files)) { return; @@ -165,7 +168,7 @@ // definition of the code to be placed in the document header and footer if (is_array($this->script_files['head'])) { foreach ($this->script_files['head'] as $file) { - $__page_header .= sprintf($this->script_tag_file, $this->scripts_path, $file); + $__page_header .= sprintf($this->script_tag_file, $file); } } @@ -180,7 +183,7 @@ if (is_array($this->script_files['foot'])) { foreach ($this->script_files['foot'] as $file) { - $__page_footer .= sprintf($this->script_tag_file, $this->scripts_path, $file); + $__page_footer .= sprintf($this->script_tag_file, $file); } } @@ -246,10 +249,19 @@ $__page_header = $__page_footer = ''; // correct absolute paths in images and other tags - $output = preg_replace('/(src|href|background)=(["\']?)(\/[a-z0-9_\-]+)/Ui', "\\1=\\2$base_path\\3", $output); + $output = preg_replace('!(src|href|background)=(["\']?)(/[a-z0-9_-]+)!i', "\\1=\\2$base_path\\3", $output); + $output = preg_replace_callback('!(src|href)=(["\']?)([a-z0-9/_.-]+.(css|js))(["\'\s>])!i', array($this, 'add_filesize'), $output); $output = str_replace('$__skin_path', $base_path, $output); echo rcube_charset_convert($output, 'UTF-8', $this->charset); } + + /** + * Callback function for preg_replace_callback in write() + */ + public function add_filesize($matches) + { + return sprintf("%s=%s%s?s=%d%s", $matches[1], $matches[2], $matches[3], @filesize($matches[3]), $matches[5]); + } } -- Gitblit v1.9.1