mirror of
https://github.com/smarty-php/smarty.git
synced 2025-08-04 10:24:26 +02:00
- compile_id changes
This commit is contained in:
188
Smarty.class.php
188
Smarty.class.php
@@ -194,6 +194,7 @@ class Smarty
|
|||||||
var $_extract = false; // flag for custom functions
|
var $_extract = false; // flag for custom functions
|
||||||
var $_included_tpls = array(); // list of run-time included templates
|
var $_included_tpls = array(); // list of run-time included templates
|
||||||
var $_inclusion_depth = 0; // current template inclusion depth
|
var $_inclusion_depth = 0; // current template inclusion depth
|
||||||
|
var $_compile_id = null; // for different compiled templates
|
||||||
var $_smarty_debug_id = 'SMARTY_DEBUG'; // id in query string to turn on debug mode
|
var $_smarty_debug_id = 'SMARTY_DEBUG'; // id in query string to turn on debug mode
|
||||||
|
|
||||||
|
|
||||||
@@ -382,21 +383,9 @@ class Smarty
|
|||||||
Function: clear_cache()
|
Function: clear_cache()
|
||||||
Purpose: clear cached content for the given template and cache id
|
Purpose: clear cached content for the given template and cache id
|
||||||
\*======================================================================*/
|
\*======================================================================*/
|
||||||
function clear_cache($tpl_file, $cache_id = null)
|
function clear_cache($tpl_file = null, $cache_id = null, $compile_id)
|
||||||
{
|
{
|
||||||
$cache_tpl_md5 = md5(realpath($this->template_dir.'/'.$tpl_file));
|
return $this->_rm_auto($this->cache_dir, $tpl_file, $compile_id . $cache_id);
|
||||||
$cache_dir = $this->cache_dir.'/'.$cache_tpl_md5;
|
|
||||||
|
|
||||||
if (!is_dir($cache_dir))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if (isset($cache_id)) {
|
|
||||||
$cache_id_md5 = md5($cache_id);
|
|
||||||
$cache_id_dir = substr($cache_id_md5, 0, 2);
|
|
||||||
$cache_file = "$cache_dir/$cache_id_dir/{$cache_tpl_md5}_$cache_id_md5.cache";
|
|
||||||
return (bool)(is_file($cache_file) && unlink($cache_file));
|
|
||||||
} else
|
|
||||||
return $this->_clear_tpl_cache_dir($cache_tpl_md5);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -406,20 +395,7 @@ class Smarty
|
|||||||
\*======================================================================*/
|
\*======================================================================*/
|
||||||
function clear_all_cache()
|
function clear_all_cache()
|
||||||
{
|
{
|
||||||
if (!is_dir($this->cache_dir))
|
return $this->_rm_auto($this->cache_dir);
|
||||||
return false;
|
|
||||||
|
|
||||||
$dir_handle = opendir($this->cache_dir);
|
|
||||||
while ($curr_dir = readdir($dir_handle)) {
|
|
||||||
if ($curr_dir == '.' || $curr_dir == '..' ||
|
|
||||||
!is_dir($this->cache_dir.'/'.$curr_dir))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
$this->_clear_tpl_cache_dir($curr_dir);
|
|
||||||
}
|
|
||||||
closedir($dir_handle);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -427,16 +403,12 @@ class Smarty
|
|||||||
Function: is_cached()
|
Function: is_cached()
|
||||||
Purpose: test to see if valid cache exists for this template
|
Purpose: test to see if valid cache exists for this template
|
||||||
\*======================================================================*/
|
\*======================================================================*/
|
||||||
function is_cached($tpl_file, $cache_id = null)
|
function is_cached($tpl_file, $cache_id = null, $compile_id = null)
|
||||||
{
|
{
|
||||||
if (!$this->caching)
|
if (!$this->caching)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// cache name = template path + cache_id
|
$cache_file = $this->_get_auto_filename($this->cache_dir, $tpl_file, $compile_id . $cache_id);
|
||||||
$cache_tpl_md5 = md5(realpath($this->template_dir.'/'.$tpl_file));
|
|
||||||
$cache_id_md5 = md5($cache_id);
|
|
||||||
$cache_id_dir = substr($cache_id_md5, 0, 2);
|
|
||||||
$cache_file = $this->cache_dir."/$cache_tpl_md5/$cache_id_dir/{$cache_tpl_md5}_$cache_id_md5.cache";
|
|
||||||
|
|
||||||
if (file_exists($cache_file) &&
|
if (file_exists($cache_file) &&
|
||||||
($this->cache_lifetime == 0 ||
|
($this->cache_lifetime == 0 ||
|
||||||
@@ -458,36 +430,14 @@ class Smarty
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*======================================================================*\
|
/*======================================================================*\
|
||||||
Function: clear_compile_dir()
|
Function: clear_compiled_tpl()
|
||||||
Purpose: clears compiled version of specified template resource,
|
Purpose: clears compiled version of specified template resource,
|
||||||
or all compiled template files if one is not specified.
|
or all compiled template files if one is not specified.
|
||||||
This function is for advanced use only, not normally needed.
|
This function is for advanced use only, not normally needed.
|
||||||
\*======================================================================*/
|
\*======================================================================*/
|
||||||
function clear_compile_dir($tpl_file = null)
|
function clear_compile_tpl($tpl_file = null, $compile_id = null)
|
||||||
{
|
{
|
||||||
if (!is_dir($this->compile_dir))
|
return $this->_rm_auto($this->compile_dir, $tpl_file, $compile_id);
|
||||||
return false;
|
|
||||||
|
|
||||||
if (isset($tpl_file)) {
|
|
||||||
// remove compiled template file if it exists
|
|
||||||
$tpl_file = urlencode($tpl_file).'.php';
|
|
||||||
if (file_exists($this->compile_dir.'/'.$tpl_file)) {
|
|
||||||
unlink($this->compile_dir.'/'.$tpl_file);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// remove everything in $compile_dir
|
|
||||||
$dir_handle = opendir($this->compile_dir);
|
|
||||||
while ($curr_file = readdir($dir_handle)) {
|
|
||||||
if ($curr_file == '.' || $curr_dir == '..' ||
|
|
||||||
!is_file($this->compile_dir.'/'.$curr_file)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
unlink($this->compile_dir.'/'.$curr_file);
|
|
||||||
}
|
|
||||||
closedir($dir_handle);
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*======================================================================*\
|
/*======================================================================*\
|
||||||
@@ -504,19 +454,20 @@ class Smarty
|
|||||||
Function: display()
|
Function: display()
|
||||||
Purpose: executes & displays the template results
|
Purpose: executes & displays the template results
|
||||||
\*======================================================================*/
|
\*======================================================================*/
|
||||||
function display($tpl_file, $cache_id = null)
|
function display($tpl_file, $cache_id = null, $compile_id = null)
|
||||||
{
|
{
|
||||||
$this->fetch($tpl_file, $cache_id, true);
|
$this->fetch($tpl_file, $cache_id, $compile_id, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*======================================================================*\
|
/*======================================================================*\
|
||||||
Function: fetch()
|
Function: fetch()
|
||||||
Purpose: executes & returns or displays the template results
|
Purpose: executes & returns or displays the template results
|
||||||
\*======================================================================*/
|
\*======================================================================*/
|
||||||
function fetch($tpl_file, $cache_id = null, $display = false)
|
function fetch($tpl_file, $cache_id = null, $compile_id = null, $display = false)
|
||||||
{
|
{
|
||||||
global $HTTP_SERVER_VARS, $QUERY_STRING, $HTTP_COOKIE_VARS;
|
global $HTTP_SERVER_VARS, $QUERY_STRING, $HTTP_COOKIE_VARS;
|
||||||
|
|
||||||
|
$this->_compile_id = $compile_id;
|
||||||
$this->_inclusion_depth = 0;
|
$this->_inclusion_depth = 0;
|
||||||
$this->_included_tpls = array();
|
$this->_included_tpls = array();
|
||||||
|
|
||||||
@@ -524,11 +475,7 @@ class Smarty
|
|||||||
'depth' => 0);
|
'depth' => 0);
|
||||||
|
|
||||||
if ($this->caching) {
|
if ($this->caching) {
|
||||||
// cache name = template path + cache_id
|
$cache_file = $this->_get_auto_filename($this->cache_dir, $tpl_file, $compile_id . $cache_id);
|
||||||
$cache_tpl_md5 = md5(realpath($this->template_dir.'/'.$tpl_file));
|
|
||||||
$cache_id_md5 = md5($cache_id);
|
|
||||||
$cache_id_dir = substr($cache_id_md5, 0, 2);
|
|
||||||
$cache_file = $this->cache_dir."/$cache_tpl_md5/$cache_id_dir/{$cache_tpl_md5}_$cache_id_md5.cache";
|
|
||||||
|
|
||||||
if (file_exists($cache_file) &&
|
if (file_exists($cache_file) &&
|
||||||
($this->cache_lifetime == 0 ||
|
($this->cache_lifetime == 0 ||
|
||||||
@@ -678,7 +625,7 @@ function _generate_debug_output() {
|
|||||||
function _process_template($tpl_file, &$compile_path)
|
function _process_template($tpl_file, &$compile_path)
|
||||||
{
|
{
|
||||||
// get path to where compiled template is (to be) saved
|
// get path to where compiled template is (to be) saved
|
||||||
$this->_fetch_compile_path($tpl_file, $compile_path);
|
$compile_path = $this->_get_auto_filename($this->compile_dir, $tpl_file, $this->_compile_id);
|
||||||
|
|
||||||
// test if template needs to be compiled
|
// test if template needs to be compiled
|
||||||
if (!$this->force_compile && $this->_compiled_template_exists($compile_path)) {
|
if (!$this->force_compile && $this->_compiled_template_exists($compile_path)) {
|
||||||
@@ -711,17 +658,6 @@ function _generate_debug_output() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*======================================================================*\
|
|
||||||
Function: _fetch_compile_path()
|
|
||||||
Purpose: fetch the path to save the comiled template
|
|
||||||
\*======================================================================*/
|
|
||||||
function _fetch_compile_path($tpl_file, &$compile_path)
|
|
||||||
{
|
|
||||||
// everything is in $compile_dir
|
|
||||||
$compile_path = $this->compile_dir.'/'.urlencode($tpl_file).'.php';
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*======================================================================*\
|
/*======================================================================*\
|
||||||
Function: _compiled_template_exists
|
Function: _compiled_template_exists
|
||||||
Purpose:
|
Purpose:
|
||||||
@@ -749,7 +685,7 @@ function _generate_debug_output() {
|
|||||||
function _write_compiled_template($compile_path, $template_compiled)
|
function _write_compiled_template($compile_path, $template_compiled)
|
||||||
{
|
{
|
||||||
// we save everything into $compile_dir
|
// we save everything into $compile_dir
|
||||||
$this->_write_file($compile_path, $template_compiled);
|
$this->_write_file($compile_path, $template_compiled, true);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -872,8 +808,7 @@ function _generate_debug_output() {
|
|||||||
|
|
||||||
array_unshift($this->_config, $this->_config[0]);
|
array_unshift($this->_config, $this->_config[0]);
|
||||||
|
|
||||||
if($this->_process_template($_smarty_include_tpl_file, $compile_path))
|
if ($this->_process_template($_smarty_include_tpl_file, $compile_path, $compile_id)) {
|
||||||
{
|
|
||||||
if ($this->show_info_include) {
|
if ($this->show_info_include) {
|
||||||
echo "\n<!-- SMARTY_BEGIN: ".$_smarty_include_tpl_file." -->\n";
|
echo "\n<!-- SMARTY_BEGIN: ".$_smarty_include_tpl_file." -->\n";
|
||||||
}
|
}
|
||||||
@@ -1039,37 +974,78 @@ function _run_mod_handler()
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*======================================================================*\
|
/*======================================================================*\
|
||||||
Function: _clear_tpl_cache_dir
|
Function: _get_auto_base
|
||||||
Purpose: Clear the specified template cache
|
Purpose: Get a base name for automatic files creation
|
||||||
\*======================================================================*/
|
\*======================================================================*/
|
||||||
function _clear_tpl_cache_dir($cache_tpl_md5)
|
function _get_auto_base($auto_base, $auto_source)
|
||||||
{
|
{
|
||||||
$cache_dir = $this->cache_dir.'/'.$cache_tpl_md5;
|
$source_md5 = md5($auto_source);
|
||||||
|
|
||||||
if (!is_dir($cache_dir))
|
$res = $auto_base . '/' . substr($source_md5, 0, 2) . '/' . $source_md5;
|
||||||
|
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*======================================================================*\
|
||||||
|
Function: _get_auto_filename
|
||||||
|
Purpose: get a concrete filename for automagically created content
|
||||||
|
\*======================================================================*/
|
||||||
|
function _get_auto_filename($auto_base, $auto_source, $auto_id = null)
|
||||||
|
{
|
||||||
|
$res = $this->_get_auto_base($auto_base, $auto_source) .
|
||||||
|
'/' . md5($auto_id) . '.php';
|
||||||
|
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*======================================================================*\
|
||||||
|
Function: _rm_auto
|
||||||
|
Purpose: delete an automagically created file by name and id
|
||||||
|
\*======================================================================*/
|
||||||
|
function _rm_auto($auto_base, $auto_source = null, $auto_id = null)
|
||||||
|
{
|
||||||
|
if (!is_dir($auto_base))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
$dir_handle = opendir($cache_dir);
|
if (!isset($auto_source)) {
|
||||||
while ($curr_dir = readdir($dir_handle)) {
|
$res = $this->_rmdir($auto_base, 0);
|
||||||
$cache_path_dir = $cache_dir.'/'.$curr_dir;
|
} else {
|
||||||
if ($curr_dir == '.' || $curr_dir == '..' ||
|
if (isset($auto_id)) {
|
||||||
!is_dir($cache_path_dir))
|
$tname = $this->_get_auto_filename($auto_base, $auto_source, $auto_id);
|
||||||
continue;
|
$res = is_file($tname) && unlink( $tname);
|
||||||
|
} else {
|
||||||
$dir_handle2 = opendir($cache_path_dir);
|
$tname = $this->_get_auto_base($auto_base, $auto_source);
|
||||||
while ($curr_file = readdir($dir_handle2)) {
|
$res = $this->_rmdir($tname);
|
||||||
if ($curr_file == '.' || $curr_file == '..')
|
|
||||||
continue;
|
|
||||||
|
|
||||||
$cache_file = $cache_path_dir.'/'.$curr_file;
|
|
||||||
if (is_file($cache_file))
|
|
||||||
unlink($cache_file);
|
|
||||||
}
|
}
|
||||||
closedir($dir_handle2);
|
|
||||||
@rmdir($cache_path_dir);
|
|
||||||
}
|
}
|
||||||
closedir($dir_handle);
|
|
||||||
@rmdir($cache_dir);
|
return $res;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*======================================================================*\
|
||||||
|
Function: _rmdir
|
||||||
|
Purpose: delete a dir recursively (level=0 -> keep root)
|
||||||
|
WARNING: no security whatsoever!!
|
||||||
|
\*======================================================================*/
|
||||||
|
function _rmdir($dirname, $level = 1)
|
||||||
|
{
|
||||||
|
$handle = opendir($dirname);
|
||||||
|
|
||||||
|
while ($entry = readdir($handle)) {
|
||||||
|
if ($entry != '.' && $entry != '..') {
|
||||||
|
if (is_dir($dirname . '/' . $entry)) {
|
||||||
|
$this->_rmdir($dirname . '/' . $entry, $level + 1);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
unlink($dirname . '/' . $entry);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
closedir($handle);
|
||||||
|
|
||||||
|
if ($level)
|
||||||
|
rmdir($dirname);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@@ -194,6 +194,7 @@ class Smarty
|
|||||||
var $_extract = false; // flag for custom functions
|
var $_extract = false; // flag for custom functions
|
||||||
var $_included_tpls = array(); // list of run-time included templates
|
var $_included_tpls = array(); // list of run-time included templates
|
||||||
var $_inclusion_depth = 0; // current template inclusion depth
|
var $_inclusion_depth = 0; // current template inclusion depth
|
||||||
|
var $_compile_id = null; // for different compiled templates
|
||||||
var $_smarty_debug_id = 'SMARTY_DEBUG'; // id in query string to turn on debug mode
|
var $_smarty_debug_id = 'SMARTY_DEBUG'; // id in query string to turn on debug mode
|
||||||
|
|
||||||
|
|
||||||
@@ -382,21 +383,9 @@ class Smarty
|
|||||||
Function: clear_cache()
|
Function: clear_cache()
|
||||||
Purpose: clear cached content for the given template and cache id
|
Purpose: clear cached content for the given template and cache id
|
||||||
\*======================================================================*/
|
\*======================================================================*/
|
||||||
function clear_cache($tpl_file, $cache_id = null)
|
function clear_cache($tpl_file = null, $cache_id = null, $compile_id)
|
||||||
{
|
{
|
||||||
$cache_tpl_md5 = md5(realpath($this->template_dir.'/'.$tpl_file));
|
return $this->_rm_auto($this->cache_dir, $tpl_file, $compile_id . $cache_id);
|
||||||
$cache_dir = $this->cache_dir.'/'.$cache_tpl_md5;
|
|
||||||
|
|
||||||
if (!is_dir($cache_dir))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if (isset($cache_id)) {
|
|
||||||
$cache_id_md5 = md5($cache_id);
|
|
||||||
$cache_id_dir = substr($cache_id_md5, 0, 2);
|
|
||||||
$cache_file = "$cache_dir/$cache_id_dir/{$cache_tpl_md5}_$cache_id_md5.cache";
|
|
||||||
return (bool)(is_file($cache_file) && unlink($cache_file));
|
|
||||||
} else
|
|
||||||
return $this->_clear_tpl_cache_dir($cache_tpl_md5);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -406,20 +395,7 @@ class Smarty
|
|||||||
\*======================================================================*/
|
\*======================================================================*/
|
||||||
function clear_all_cache()
|
function clear_all_cache()
|
||||||
{
|
{
|
||||||
if (!is_dir($this->cache_dir))
|
return $this->_rm_auto($this->cache_dir);
|
||||||
return false;
|
|
||||||
|
|
||||||
$dir_handle = opendir($this->cache_dir);
|
|
||||||
while ($curr_dir = readdir($dir_handle)) {
|
|
||||||
if ($curr_dir == '.' || $curr_dir == '..' ||
|
|
||||||
!is_dir($this->cache_dir.'/'.$curr_dir))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
$this->_clear_tpl_cache_dir($curr_dir);
|
|
||||||
}
|
|
||||||
closedir($dir_handle);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -427,16 +403,12 @@ class Smarty
|
|||||||
Function: is_cached()
|
Function: is_cached()
|
||||||
Purpose: test to see if valid cache exists for this template
|
Purpose: test to see if valid cache exists for this template
|
||||||
\*======================================================================*/
|
\*======================================================================*/
|
||||||
function is_cached($tpl_file, $cache_id = null)
|
function is_cached($tpl_file, $cache_id = null, $compile_id = null)
|
||||||
{
|
{
|
||||||
if (!$this->caching)
|
if (!$this->caching)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// cache name = template path + cache_id
|
$cache_file = $this->_get_auto_filename($this->cache_dir, $tpl_file, $compile_id . $cache_id);
|
||||||
$cache_tpl_md5 = md5(realpath($this->template_dir.'/'.$tpl_file));
|
|
||||||
$cache_id_md5 = md5($cache_id);
|
|
||||||
$cache_id_dir = substr($cache_id_md5, 0, 2);
|
|
||||||
$cache_file = $this->cache_dir."/$cache_tpl_md5/$cache_id_dir/{$cache_tpl_md5}_$cache_id_md5.cache";
|
|
||||||
|
|
||||||
if (file_exists($cache_file) &&
|
if (file_exists($cache_file) &&
|
||||||
($this->cache_lifetime == 0 ||
|
($this->cache_lifetime == 0 ||
|
||||||
@@ -458,36 +430,14 @@ class Smarty
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*======================================================================*\
|
/*======================================================================*\
|
||||||
Function: clear_compile_dir()
|
Function: clear_compiled_tpl()
|
||||||
Purpose: clears compiled version of specified template resource,
|
Purpose: clears compiled version of specified template resource,
|
||||||
or all compiled template files if one is not specified.
|
or all compiled template files if one is not specified.
|
||||||
This function is for advanced use only, not normally needed.
|
This function is for advanced use only, not normally needed.
|
||||||
\*======================================================================*/
|
\*======================================================================*/
|
||||||
function clear_compile_dir($tpl_file = null)
|
function clear_compile_tpl($tpl_file = null, $compile_id = null)
|
||||||
{
|
{
|
||||||
if (!is_dir($this->compile_dir))
|
return $this->_rm_auto($this->compile_dir, $tpl_file, $compile_id);
|
||||||
return false;
|
|
||||||
|
|
||||||
if (isset($tpl_file)) {
|
|
||||||
// remove compiled template file if it exists
|
|
||||||
$tpl_file = urlencode($tpl_file).'.php';
|
|
||||||
if (file_exists($this->compile_dir.'/'.$tpl_file)) {
|
|
||||||
unlink($this->compile_dir.'/'.$tpl_file);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// remove everything in $compile_dir
|
|
||||||
$dir_handle = opendir($this->compile_dir);
|
|
||||||
while ($curr_file = readdir($dir_handle)) {
|
|
||||||
if ($curr_file == '.' || $curr_dir == '..' ||
|
|
||||||
!is_file($this->compile_dir.'/'.$curr_file)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
unlink($this->compile_dir.'/'.$curr_file);
|
|
||||||
}
|
|
||||||
closedir($dir_handle);
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*======================================================================*\
|
/*======================================================================*\
|
||||||
@@ -504,19 +454,20 @@ class Smarty
|
|||||||
Function: display()
|
Function: display()
|
||||||
Purpose: executes & displays the template results
|
Purpose: executes & displays the template results
|
||||||
\*======================================================================*/
|
\*======================================================================*/
|
||||||
function display($tpl_file, $cache_id = null)
|
function display($tpl_file, $cache_id = null, $compile_id = null)
|
||||||
{
|
{
|
||||||
$this->fetch($tpl_file, $cache_id, true);
|
$this->fetch($tpl_file, $cache_id, $compile_id, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*======================================================================*\
|
/*======================================================================*\
|
||||||
Function: fetch()
|
Function: fetch()
|
||||||
Purpose: executes & returns or displays the template results
|
Purpose: executes & returns or displays the template results
|
||||||
\*======================================================================*/
|
\*======================================================================*/
|
||||||
function fetch($tpl_file, $cache_id = null, $display = false)
|
function fetch($tpl_file, $cache_id = null, $compile_id = null, $display = false)
|
||||||
{
|
{
|
||||||
global $HTTP_SERVER_VARS, $QUERY_STRING, $HTTP_COOKIE_VARS;
|
global $HTTP_SERVER_VARS, $QUERY_STRING, $HTTP_COOKIE_VARS;
|
||||||
|
|
||||||
|
$this->_compile_id = $compile_id;
|
||||||
$this->_inclusion_depth = 0;
|
$this->_inclusion_depth = 0;
|
||||||
$this->_included_tpls = array();
|
$this->_included_tpls = array();
|
||||||
|
|
||||||
@@ -524,11 +475,7 @@ class Smarty
|
|||||||
'depth' => 0);
|
'depth' => 0);
|
||||||
|
|
||||||
if ($this->caching) {
|
if ($this->caching) {
|
||||||
// cache name = template path + cache_id
|
$cache_file = $this->_get_auto_filename($this->cache_dir, $tpl_file, $compile_id . $cache_id);
|
||||||
$cache_tpl_md5 = md5(realpath($this->template_dir.'/'.$tpl_file));
|
|
||||||
$cache_id_md5 = md5($cache_id);
|
|
||||||
$cache_id_dir = substr($cache_id_md5, 0, 2);
|
|
||||||
$cache_file = $this->cache_dir."/$cache_tpl_md5/$cache_id_dir/{$cache_tpl_md5}_$cache_id_md5.cache";
|
|
||||||
|
|
||||||
if (file_exists($cache_file) &&
|
if (file_exists($cache_file) &&
|
||||||
($this->cache_lifetime == 0 ||
|
($this->cache_lifetime == 0 ||
|
||||||
@@ -678,7 +625,7 @@ function _generate_debug_output() {
|
|||||||
function _process_template($tpl_file, &$compile_path)
|
function _process_template($tpl_file, &$compile_path)
|
||||||
{
|
{
|
||||||
// get path to where compiled template is (to be) saved
|
// get path to where compiled template is (to be) saved
|
||||||
$this->_fetch_compile_path($tpl_file, $compile_path);
|
$compile_path = $this->_get_auto_filename($this->compile_dir, $tpl_file, $this->_compile_id);
|
||||||
|
|
||||||
// test if template needs to be compiled
|
// test if template needs to be compiled
|
||||||
if (!$this->force_compile && $this->_compiled_template_exists($compile_path)) {
|
if (!$this->force_compile && $this->_compiled_template_exists($compile_path)) {
|
||||||
@@ -711,17 +658,6 @@ function _generate_debug_output() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*======================================================================*\
|
|
||||||
Function: _fetch_compile_path()
|
|
||||||
Purpose: fetch the path to save the comiled template
|
|
||||||
\*======================================================================*/
|
|
||||||
function _fetch_compile_path($tpl_file, &$compile_path)
|
|
||||||
{
|
|
||||||
// everything is in $compile_dir
|
|
||||||
$compile_path = $this->compile_dir.'/'.urlencode($tpl_file).'.php';
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*======================================================================*\
|
/*======================================================================*\
|
||||||
Function: _compiled_template_exists
|
Function: _compiled_template_exists
|
||||||
Purpose:
|
Purpose:
|
||||||
@@ -749,7 +685,7 @@ function _generate_debug_output() {
|
|||||||
function _write_compiled_template($compile_path, $template_compiled)
|
function _write_compiled_template($compile_path, $template_compiled)
|
||||||
{
|
{
|
||||||
// we save everything into $compile_dir
|
// we save everything into $compile_dir
|
||||||
$this->_write_file($compile_path, $template_compiled);
|
$this->_write_file($compile_path, $template_compiled, true);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -872,8 +808,7 @@ function _generate_debug_output() {
|
|||||||
|
|
||||||
array_unshift($this->_config, $this->_config[0]);
|
array_unshift($this->_config, $this->_config[0]);
|
||||||
|
|
||||||
if($this->_process_template($_smarty_include_tpl_file, $compile_path))
|
if ($this->_process_template($_smarty_include_tpl_file, $compile_path, $compile_id)) {
|
||||||
{
|
|
||||||
if ($this->show_info_include) {
|
if ($this->show_info_include) {
|
||||||
echo "\n<!-- SMARTY_BEGIN: ".$_smarty_include_tpl_file." -->\n";
|
echo "\n<!-- SMARTY_BEGIN: ".$_smarty_include_tpl_file." -->\n";
|
||||||
}
|
}
|
||||||
@@ -1039,37 +974,78 @@ function _run_mod_handler()
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*======================================================================*\
|
/*======================================================================*\
|
||||||
Function: _clear_tpl_cache_dir
|
Function: _get_auto_base
|
||||||
Purpose: Clear the specified template cache
|
Purpose: Get a base name for automatic files creation
|
||||||
\*======================================================================*/
|
\*======================================================================*/
|
||||||
function _clear_tpl_cache_dir($cache_tpl_md5)
|
function _get_auto_base($auto_base, $auto_source)
|
||||||
{
|
{
|
||||||
$cache_dir = $this->cache_dir.'/'.$cache_tpl_md5;
|
$source_md5 = md5($auto_source);
|
||||||
|
|
||||||
if (!is_dir($cache_dir))
|
$res = $auto_base . '/' . substr($source_md5, 0, 2) . '/' . $source_md5;
|
||||||
|
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*======================================================================*\
|
||||||
|
Function: _get_auto_filename
|
||||||
|
Purpose: get a concrete filename for automagically created content
|
||||||
|
\*======================================================================*/
|
||||||
|
function _get_auto_filename($auto_base, $auto_source, $auto_id = null)
|
||||||
|
{
|
||||||
|
$res = $this->_get_auto_base($auto_base, $auto_source) .
|
||||||
|
'/' . md5($auto_id) . '.php';
|
||||||
|
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*======================================================================*\
|
||||||
|
Function: _rm_auto
|
||||||
|
Purpose: delete an automagically created file by name and id
|
||||||
|
\*======================================================================*/
|
||||||
|
function _rm_auto($auto_base, $auto_source = null, $auto_id = null)
|
||||||
|
{
|
||||||
|
if (!is_dir($auto_base))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
$dir_handle = opendir($cache_dir);
|
if (!isset($auto_source)) {
|
||||||
while ($curr_dir = readdir($dir_handle)) {
|
$res = $this->_rmdir($auto_base, 0);
|
||||||
$cache_path_dir = $cache_dir.'/'.$curr_dir;
|
} else {
|
||||||
if ($curr_dir == '.' || $curr_dir == '..' ||
|
if (isset($auto_id)) {
|
||||||
!is_dir($cache_path_dir))
|
$tname = $this->_get_auto_filename($auto_base, $auto_source, $auto_id);
|
||||||
continue;
|
$res = is_file($tname) && unlink( $tname);
|
||||||
|
} else {
|
||||||
$dir_handle2 = opendir($cache_path_dir);
|
$tname = $this->_get_auto_base($auto_base, $auto_source);
|
||||||
while ($curr_file = readdir($dir_handle2)) {
|
$res = $this->_rmdir($tname);
|
||||||
if ($curr_file == '.' || $curr_file == '..')
|
|
||||||
continue;
|
|
||||||
|
|
||||||
$cache_file = $cache_path_dir.'/'.$curr_file;
|
|
||||||
if (is_file($cache_file))
|
|
||||||
unlink($cache_file);
|
|
||||||
}
|
}
|
||||||
closedir($dir_handle2);
|
|
||||||
@rmdir($cache_path_dir);
|
|
||||||
}
|
}
|
||||||
closedir($dir_handle);
|
|
||||||
@rmdir($cache_dir);
|
return $res;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*======================================================================*\
|
||||||
|
Function: _rmdir
|
||||||
|
Purpose: delete a dir recursively (level=0 -> keep root)
|
||||||
|
WARNING: no security whatsoever!!
|
||||||
|
\*======================================================================*/
|
||||||
|
function _rmdir($dirname, $level = 1)
|
||||||
|
{
|
||||||
|
$handle = opendir($dirname);
|
||||||
|
|
||||||
|
while ($entry = readdir($handle)) {
|
||||||
|
if ($entry != '.' && $entry != '..') {
|
||||||
|
if (is_dir($dirname . '/' . $entry)) {
|
||||||
|
$this->_rmdir($dirname . '/' . $entry, $level + 1);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
unlink($dirname . '/' . $entry);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
closedir($handle);
|
||||||
|
|
||||||
|
if ($level)
|
||||||
|
rmdir($dirname);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user