From 6b0f3a6ede0da0a08ff267d5c31be57f3cd23cd4 Mon Sep 17 00:00:00 2001 From: "uwe.tews@googlemail.com" Date: Wed, 16 Mar 2011 23:57:04 +0000 Subject: [PATCH] - bugfix on default {function} parameters when {function} was used in nocache sections - bugfix on compiler object destruction. compiler_object property was by mistake unset. --- change_log.txt | 4 + .../smarty_internal_function_call_handler.php | 16 +- libs/sysplugins/smarty_internal_template.php | 428 +++++++++--------- 3 files changed, 226 insertions(+), 222 deletions(-) diff --git a/change_log.txt b/change_log.txt index 46cb4a6c..10cfd9b8 100644 --- a/change_log.txt +++ b/change_log.txt @@ -1,4 +1,8 @@ ===== SVN trunk ===== +17/03/2011 +- bugfix on default {function} parameters when {function} was used in nocache sections +- bugfix on compiler object destruction. compiler_object property was by mistake unset. + 09/03/2011 -bugfix a variable filter should run before modifers on an output tag (see change of 23/07/2010) diff --git a/libs/sysplugins/smarty_internal_function_call_handler.php b/libs/sysplugins/smarty_internal_function_call_handler.php index 44039169..928f0447 100644 --- a/libs/sysplugins/smarty_internal_function_call_handler.php +++ b/libs/sysplugins/smarty_internal_function_call_handler.php @@ -1,10 +1,10 @@ smarty->template_functions[$_name]['called_nocache'] = true; } else { $_function = "smarty_template_function_{$_hash}_{$_name}"; - } + } if (!is_callable($_function)) { $_code = "function {$_function}(\$_smarty_tpl,\$params) { \$saved_tpl_vars = \$_smarty_tpl->tpl_vars; - foreach (\$_smarty_tpl->template_functions['{$_name}']['parameter'] as \$key => \$value) {\$_smarty_tpl->tpl_vars[\$key] = new Smarty_variable(trim(\$value,'\''));}; + foreach (\$_smarty_tpl->template_functions['{$_name}']['parameter'] as \$key => \$value) {\$_smarty_tpl->tpl_vars[\$key] = new Smarty_variable(\$value);}; foreach (\$params as \$key => \$value) {\$_smarty_tpl->tpl_vars[\$key] = new Smarty_variable(\$value);}?>"; if ($_nocache) { $_code .= preg_replace(array("!<\?php echo \\'/\*%%SmartyNocache:{$_template->smarty->template_functions[$_name]['nocache_hash']}%%\*/|/\*/%%SmartyNocache:{$_template->smarty->template_functions[$_name]['nocache_hash']}%%\*/\\';\?>!", "!\\\'!"), array('', "'"), $_template->smarty->template_functions[$_name]['compiled']); } else { $_code .= preg_replace("/{$_template->smarty->template_functions[$_name]['nocache_hash']}/", $_template->properties['nocache_hash'], $_template->smarty->template_functions[$_name]['compiled']); - } + } $_code .= "tpl_vars = \$saved_tpl_vars;}"; eval($_code); - } + } $_function($_template, $_params); - } -} + } +} ?> \ No newline at end of file diff --git a/libs/sysplugins/smarty_internal_template.php b/libs/sysplugins/smarty_internal_template.php index 98ea8e97..480fbee6 100644 --- a/libs/sysplugins/smarty_internal_template.php +++ b/libs/sysplugins/smarty_internal_template.php @@ -2,12 +2,12 @@ /** * Smarty Internal Plugin Template - * + * * This file contains the Smarty template engine - * + * * @package Smarty * @subpackage Templates - * @author Uwe Tews + * @author Uwe Tews */ /** @@ -16,7 +16,7 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { // object cache public $compiler_object = null; - public $cacher_object = null; + public $cacher_object = null; // Smarty parameter public $cache_id = null; public $compile_id = null; @@ -24,18 +24,18 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { public $cache_lifetime = null; public $cacher_class = null; public $caching_type = null; - public $forceNocache = false; + public $forceNocache = false; // Template resource public $template_resource = null; public $resource_type = null; public $resource_name = null; // public $resource_object = null; private $isExisting = null; - public $templateUid = ''; + public $templateUid = ''; // Template source public $template_filepath = null; public $template_source = null; - private $template_timestamp = null; + private $template_timestamp = null; // Compiled template private $compiled_filepath = null; public $compiled_template = null; @@ -43,26 +43,26 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { public $mustCompile = null; public $suppressHeader = false; public $suppressFileDependency = false; - public $has_nocache_code = false; - public $write_compiled_code = true; + public $has_nocache_code = false; + public $write_compiled_code = true; // Rendered content - public $rendered_content = null; + public $rendered_content = null; // Cache file private $cached_filepath = null; public $cached_timestamp = null; private $isCached = null; // private $cache_resource_object = null; - private $cacheFileChecked = false; + private $cacheFileChecked = false; // template variables public $tpl_vars = array(); public $parent = null; - public $config_vars = array(); + public $config_vars = array(); // storage for plugin - public $plugin_data = array(); + public $plugin_data = array(); // special properties public $properties = array ('file_dependency' => array(), 'nocache_hash' => '', - 'function' => array()); + 'function' => array()); // required plugins public $required_plugins = array('compiled' => array(), 'nocache' => array()); public $saved_modifier = null; @@ -72,10 +72,10 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { public $wrapper = null; /** * Create template data object - * + * * Some of the global Smarty settings copied to template scope * It load the required template resources and cacher plugins - * + * * @param string $template_resource template resource string * @param object $_parent back pointer to parent object with variables or null * @param mixed $_cache_id cache id or null @@ -83,30 +83,30 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { */ public function __construct($template_resource, $smarty, $_parent = null, $_cache_id = null, $_compile_id = null, $_caching = null, $_cache_lifetime = null) { - $this->smarty = &$smarty; + $this->smarty = &$smarty; // Smarty parameter $this->cache_id = $_cache_id === null ? $this->smarty->cache_id : $_cache_id; $this->compile_id = $_compile_id === null ? $this->smarty->compile_id : $_compile_id; $this->caching = $_caching === null ? $this->smarty->caching : $_caching; if ($this->caching === true) $this->caching = Smarty::CACHING_LIFETIME_CURRENT; $this->cache_lifetime = $_cache_lifetime === null ?$this->smarty->cache_lifetime : $_cache_lifetime; - $this->parent = $_parent; + $this->parent = $_parent; // dummy local smarty variable - $this->tpl_vars['smarty'] = new Smarty_Variable; + $this->tpl_vars['smarty'] = new Smarty_Variable; // Template resource - $this->template_resource = $template_resource; + $this->template_resource = $template_resource; // copy block data of template inheritance if ($this->parent instanceof Smarty_Internal_Template) { $this->block_data = $this->parent->block_data; } - - } + + } /** * Returns the template filepath - * + * * The template filepath is determined by the actual resource handler - * + * * @return string the template filepath */ public function getTemplateFilepath () @@ -114,13 +114,13 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { return $this->template_filepath === null ? $this->template_filepath = $this->resource_object->getTemplateFilepath($this) : $this->template_filepath; - } + } /** * Returns the timpestamp of the template source - * + * * The template timestamp is determined by the actual resource handler - * + * * @return integer the template timestamp */ public function getTemplateTimestamp () @@ -128,13 +128,13 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { return $this->template_timestamp === null ? $this->template_timestamp = $this->resource_object->getTemplateTimestamp($this) : $this->template_timestamp; - } + } /** * Returns the template source code - * + * * The template source is being read by the actual resource handler - * + * * @return string the template source */ public function getTemplateSource () @@ -142,50 +142,50 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { if ($this->template_source === null) { if (!$this->resource_object->getTemplateSource($this)) { throw new SmartyException("Unable to read template {$this->resource_type} '{$this->resource_name}'"); - } - } + } + } return $this->template_source; - } + } /** * Returns if the template is existing - * + * * The status is determined by the actual resource handler - * + * * @return boolean true if the template exists */ public function isExisting ($error = false) { if ($this->isExisting === null) { $this->isExisting = $this->resource_object->isExisting($this); - } + } if (!$this->isExisting && $error) { throw new SmartyException("Unable to load template {$this->resource_type} '{$this->resource_name}'"); - } + } return $this->isExisting; - } + } /** * Returns if the current template must be compiled by the Smarty compiler - * + * * It does compare the timestamps of template source and the compiled templates and checks the force compile configuration - * + * * @return boolean true if the template must be compiled */ public function mustCompile () { $this->isExisting(true); if ($this->mustCompile === null) { - $this->mustCompile = ($this->resource_object->usesCompiler && ($this->smarty->force_compile || $this->resource_object->isEvaluated || $this->getCompiledTimestamp () === false || + $this->mustCompile = ($this->resource_object->usesCompiler && ($this->smarty->force_compile || $this->resource_object->isEvaluated || $this->getCompiledTimestamp () === false || // ($this->smarty->compile_check && $this->getCompiledTimestamp () !== $this->getTemplateTimestamp ()))); ($this->smarty->compile_check && $this->getCompiledTimestamp () < $this->getTemplateTimestamp ()))); - } + } return $this->mustCompile; - } + } /** * Returns the compiled template filepath - * + * * @return string the template filepath */ public function getCompiledFilepath () @@ -193,11 +193,11 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { return $this->compiled_filepath === null ? ($this->compiled_filepath = !$this->resource_object->isEvaluated ? $this->resource_object->getCompiledFilepath($this) : false) : $this->compiled_filepath; - } + } /** * Returns the timpestamp of the compiled template - * + * * @return integer the template timestamp */ public function getCompiledTimestamp () @@ -205,13 +205,13 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { return $this->compiled_timestamp === null ? ($this->compiled_timestamp = (!$this->resource_object->isEvaluated && file_exists($this->getCompiledFilepath())) ? filemtime($this->getCompiledFilepath()) : false) : $this->compiled_timestamp; - } + } /** - * Returns the compiled template - * + * Returns the compiled template + * * It checks if the template must be compiled or just read from the template resource - * + * * @return string the compiled template */ public function getCompiledTemplate () @@ -223,15 +223,15 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { } else { if ($this->compiled_template === null) { $this->compiled_template = !$this->resource_object->isEvaluated && $this->resource_object->usesCompiler ? file_get_contents($this->getCompiledFilepath()) : false; - } - } - } + } + } + } return $this->compiled_template; - } + } /** * Compiles the template - * + * * If the template is not evaluated the compiled template is saved on disk */ public function compileTemplateSource () @@ -239,57 +239,57 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { if (!$this->resource_object->isEvaluated) { $this->properties['file_dependency'] = array(); $this->properties['file_dependency'][$this->templateUid] = array($this->getTemplateFilepath(), $this->getTemplateTimestamp(),$this->resource_type); - } + } if ($this->smarty->debugging) { Smarty_Internal_Debug::start_compile($this); - } + } // compile template if (!is_object($this->compiler_object)) { // load compiler $this->smarty->loadPlugin($this->resource_object->compiler_class); $this->compiler_object = new $this->resource_object->compiler_class($this->resource_object->template_lexer_class, $this->resource_object->template_parser_class, $this->smarty); - } + } // compile locking if ($this->smarty->compile_locking && !$this->resource_object->isEvaluated) { if ($saved_timestamp = $this->getCompiledTimestamp()) { touch($this->getCompiledFilepath()); - } - } + } + } // call compiler try { $this->compiler_object->compileTemplate($this); - } + } catch (Exception $e) { // restore old timestamp in case of error if ($this->smarty->compile_locking && !$this->resource_object->isEvaluated && $saved_timestamp) { touch($this->getCompiledFilepath(), $saved_timestamp); - } + } throw $e; - } + } // compiling succeded if (!$this->resource_object->isEvaluated && $this->write_compiled_code) { // write compiled template Smarty_Internal_Write_File::writeFile($this->getCompiledFilepath(), $this->compiled_template, $this->smarty); - } + } if ($this->smarty->debugging) { Smarty_Internal_Debug::end_compile($this); } // release objects to free memory - Smarty_Internal_TemplateCompilerBase::$_tag_objects = array(); + Smarty_Internal_TemplateCompilerBase::$_tag_objects = array(); unset($this->compiler_object->parser->root_buffer, $this->compiler_object->parser->current_buffer, $this->compiler_object->parser, $this->compiler_object->lex, - $this->compiler_object->template, - $this->compiler_object - ); - } + $this->compiler_object->template + ); + $this->compiler_object = null; + } /** * Returns the filepath of the cached template output - * + * * The filepath is determined by the actual cache resource - * + * * @return string the cache filepath */ public function getCachedFilepath () @@ -297,13 +297,13 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { return $this->cached_filepath === null ? $this->cached_filepath = ($this->resource_object->isEvaluated || !($this->caching == Smarty::CACHING_LIFETIME_CURRENT || $this->caching == Smarty::CACHING_LIFETIME_SAVED)) ? false : $this->cache_resource_object->getCachedFilepath($this) : $this->cached_filepath; - } + } /** * Returns the timpestamp of the cached template output - * + * * The timestamp is determined by the actual cache resource - * + * * @return integer the template timestamp */ public function getCachedTimestamp () @@ -311,11 +311,11 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { return $this->cached_timestamp === null ? $this->cached_timestamp = ($this->resource_object->isEvaluated || !($this->caching == Smarty::CACHING_LIFETIME_CURRENT || $this->caching == Smarty::CACHING_LIFETIME_SAVED)) ? false : $this->cache_resource_object->getCachedTimestamp($this) : $this->cached_timestamp; - } + } /** * Returns the cached template output - * + * * @return string |booelan the template content or false if the file does not exist */ public function getCachedContent () @@ -323,7 +323,7 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { return $this->rendered_content === null ? $this->rendered_content = ($this->resource_object->isEvaluated || !($this->caching == Smarty::CACHING_LIFETIME_CURRENT || $this->caching == Smarty::CACHING_LIFETIME_SAVED)) ? false : $this->cache_resource_object->getCachedContents($this) : $this->rendered_content; - } + } /** * Writes the cached template output @@ -333,21 +333,21 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { if ($this->resource_object->isEvaluated || !($this->caching == Smarty::CACHING_LIFETIME_CURRENT || $this->caching == Smarty::CACHING_LIFETIME_SAVED)) { // don't write cache file return false; - } + } $this->properties['cache_lifetime'] = $this->cache_lifetime; return $this->cache_resource_object->writeCachedContent($this, $this->createPropertyHeader(true) .$content); - } + } /** * Checks of a valid version redered HTML output is in the cache - * + * * If the cache is valid the contents is stored in the template object - * + * * @return boolean true if cache is valid */ public function isCached ($template = null, $cache_id = null, $compile_id = null, $parent = null) { - if ($template === null) { + if ($template === null) { $no_render = true; } elseif ($template === false) { $no_render = false; @@ -363,26 +363,26 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { $cachedTimestamp = $this->getCachedTimestamp(); if ($cachedTimestamp === false || $this->smarty->force_compile || $this->smarty->force_cache) { return $this->isCached; - } + } if ($this->caching === Smarty::CACHING_LIFETIME_SAVED || ($this->caching == Smarty::CACHING_LIFETIME_CURRENT && (time() <= ($cachedTimestamp + $this->cache_lifetime) || $this->cache_lifetime < 0))) { if ($this->smarty->debugging) { Smarty_Internal_Debug::start_cache($this); - } + } $this->rendered_content = $this->cache_resource_object->getCachedContents($this, $no_render); if ($this->smarty->debugging) { Smarty_Internal_Debug::end_cache($this); - } + } if ($this->cacheFileChecked) { $this->isCached = true; return $this->isCached; - } + } $this->cacheFileChecked = true; if ($this->caching === Smarty::CACHING_LIFETIME_SAVED && $this->properties['cache_lifetime'] >= 0 && (time() > ($this->getCachedTimestamp() + $this->properties['cache_lifetime']))) { $this->tpl_vars = array(); - $this->tpl_vars['smarty'] = new Smarty_Variable; + $this->tpl_vars['smarty'] = new Smarty_Variable; $this->rendered_content = null; return $this->isCached; - } + } if (!empty($this->properties['file_dependency']) && $this->smarty->compile_check) { $resource_type = null; $resource_name = null; @@ -393,28 +393,28 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { $this->getResourceTypeName($_file_to_check[0], $resource_type, $resource_name); $resource_handler = $this->loadTemplateResourceHandler($resource_type); $mtime = $resource_handler->getTemplateTimestampTypeName($resource_type, $resource_name); - } + } // If ($mtime > $this->getCachedTimestamp()) { If ($mtime > $_file_to_check[1]) { $this->tpl_vars = array(); - $this->tpl_vars['smarty'] = new Smarty_Variable; + $this->tpl_vars['smarty'] = new Smarty_Variable; $this->rendered_content = null; return $this->isCached; - } - } - } + } + } + } $this->isCached = true; - } - } - } + } + } + } return $this->isCached; - } + } /** * Render the output using the compiled template or the PHP template source - * + * * The rendering process is accomplished by just including the PHP files. - * The only exceptions are evaluated templates (string template). Their code has + * The only exceptions are evaluated templates (string template). Their code has * to be evaluated */ public function renderTemplate () @@ -422,16 +422,16 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { if ($this->resource_object->usesCompiler) { if ($this->mustCompile() && $this->compiled_template === null) { $this->compileTemplateSource(); - } + } if ($this->smarty->debugging) { Smarty_Internal_Debug::start_render($this); - } + } $_smarty_tpl = $this; ob_start(); if ($this->resource_object->isEvaluated) { eval("?>" . $this->compiled_template); } else { - include($this->getCompiledFilepath ()); + include($this->getCompiledFilepath ()); // check file dependencies at compiled code if ($this->smarty->compile_check) { if (!empty($this->properties['file_dependency'])) { @@ -445,72 +445,72 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { $this->getResourceTypeName($_file_to_check[0], $resource_type, $resource_name); $resource_handler = $this->loadTemplateResourceHandler($resource_type); $mtime = $resource_handler->getTemplateTimestampTypeName($resource_type, $resource_name); - } + } // If ($mtime != $_file_to_check[1]) { If ($mtime > $_file_to_check[1]) { $this->mustCompile = true; break; - } - } + } + } if ($this->mustCompile) { // recompile and render again ob_get_clean(); $this->compileTemplateSource(); ob_start(); include($this->getCompiledFilepath ()); - } - } - } - } + } + } + } + } } else { if (is_callable(array($this->resource_object, 'renderUncompiled'))) { if ($this->smarty->debugging) { Smarty_Internal_Debug::start_render($this); - } + } ob_start(); $this->resource_object->renderUncompiled($this); } else { throw new SmartyException("Resource '$this->resource_type' must have 'renderUncompiled' methode"); - } - } + } + } $this->rendered_content = ob_get_clean(); if (!$this->resource_object->isEvaluated && empty($this->properties['file_dependency'][$this->templateUid])) { $this->properties['file_dependency'][$this->templateUid] = array($this->getTemplateFilepath(), $this->getTemplateTimestamp(),$this->resource_type); - } + } if ($this->parent instanceof Smarty_Internal_Template) { $this->parent->properties['file_dependency'] = array_merge($this->parent->properties['file_dependency'], $this->properties['file_dependency']); foreach($this->required_plugins as $code => $tmp1) { foreach($tmp1 as $name => $tmp) { foreach($tmp as $type => $data) { $this->parent->required_plugins[$code][$name][$type] = $data; - } - } - } - } + } + } + } + } if ($this->smarty->debugging) { Smarty_Internal_Debug::end_render($this); - } + } // write to cache when nessecary if (!$this->resource_object->isEvaluated && ($this->caching == Smarty::CACHING_LIFETIME_SAVED || $this->caching == Smarty::CACHING_LIFETIME_CURRENT)) { if ($this->smarty->debugging) { Smarty_Internal_Debug::start_cache($this); - } - $this->properties['has_nocache_code'] = false; + } + $this->properties['has_nocache_code'] = false; // get text between non-cached items - $cache_split = preg_split("!/\*%%SmartyNocache:{$this->properties['nocache_hash']}%%\*\/(.+?)/\*/%%SmartyNocache:{$this->properties['nocache_hash']}%%\*/!s", $this->rendered_content); + $cache_split = preg_split("!/\*%%SmartyNocache:{$this->properties['nocache_hash']}%%\*\/(.+?)/\*/%%SmartyNocache:{$this->properties['nocache_hash']}%%\*/!s", $this->rendered_content); // get non-cached items preg_match_all("!/\*%%SmartyNocache:{$this->properties['nocache_hash']}%%\*\/(.+?)/\*/%%SmartyNocache:{$this->properties['nocache_hash']}%%\*/!s", $this->rendered_content, $cache_parts); - $output = ''; + $output = ''; // loop over items, stitch back together foreach($cache_split as $curr_idx => $curr_split) { // escape PHP tags in template content $output .= preg_replace('/(<%|%>|<\?php|<\?|\?>)/', '', $curr_split); if (isset($cache_parts[0][$curr_idx])) { - $this->properties['has_nocache_code'] = true; + $this->properties['has_nocache_code'] = true; // remove nocache tags from cache output $output .= preg_replace("!/\*/?%%SmartyNocache:{$this->properties['nocache_hash']}%%\*/!", '', $cache_parts[0][$curr_idx]); - } - } + } + } if (isset($this->smarty->autoload_filters['output']) || isset($this->smarty->registered_filters['output'])) { $output = Smarty_Internal_Filter_Handler::runFilter('output', $output, $this); } @@ -518,66 +518,66 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { $_smarty_tpl = $this; ob_start(); eval("?>" . $output); - $this->rendered_content = ob_get_clean(); + $this->rendered_content = ob_get_clean(); // write cache file content $this->writeCachedContent(''. $output. ''); if ($this->smarty->debugging) { Smarty_Internal_Debug::end_cache($this); - } + } } else { // var_dump('renderTemplate', $this->has_nocache_code, $this->template_resource, $this->properties['nocache_hash'], $this->parent->properties['nocache_hash'], $this->rendered_content); if ($this->has_nocache_code && !empty($this->properties['nocache_hash']) && !empty($this->parent->properties['nocache_hash'])) { // replace nocache_hash $this->rendered_content = preg_replace("/{$this->properties['nocache_hash']}/", $this->parent->properties['nocache_hash'], $this->rendered_content); $this->parent->has_nocache_code = $this->has_nocache_code; - } - } - } + } + } + } /** - * Returns the rendered HTML output - * + * Returns the rendered HTML output + * * If the cache is valid the cached content is used, otherwise * the output is rendered from the compiled template or PHP template source - * + * * @return string rendered HTML output */ public function getRenderedTemplate () - { + { // disable caching for evaluated code if ($this->resource_object->isEvaluated) { $this->caching = false; - } + } // checks if template exists - $this->isExisting(true); + $this->isExisting(true); // read from cache or render if ($this->rendered_content === null) { if ($this->isCached) { if ($this->smarty->debugging) { Smarty_Internal_Debug::start_cache($this); - } + } $this->rendered_content = $this->cache_resource_object->getCachedContents($this, false); if ($this->smarty->debugging) { Smarty_Internal_Debug::end_cache($this); } - } - if ($this->isCached === null) { - $this->isCached(false); } - if (!$this->isCached) { + if ($this->isCached === null) { + $this->isCached(false); + } + if (!$this->isCached) { // render template (not loaded and not in cache) $this->renderTemplate(); } - } + } $this->updateParentVariables(); $this->isCached = null; return $this->rendered_content; - } + } /** * Parse a template resource in its name and type * Load required resource handler - * + * * @param string $template_resource template resource specification * @param string $resource_type return resource type * @param string $resource_name return resource name @@ -588,14 +588,14 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { if (empty($template_resource)) return false; $this->getResourceTypeName($template_resource, $resource_type, $resource_name); - $resource_handler = $this->loadTemplateResourceHandler($resource_type); + $resource_handler = $this->loadTemplateResourceHandler($resource_type); // cache template object under a unique ID // do not cache eval resources if ($resource_type != 'eval') { $this->smarty->template_objects[sha1($this->template_resource . $this->cache_id . $this->compile_id)] = $this; - } + } return true; - } + } /** * get system filepath to template @@ -605,12 +605,12 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { if ($file == null) { $file = $this->resource_name; } - // relative file name? + // relative file name? if (!preg_match('/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/', $file)) { foreach((array)$this->smarty->template_dir as $_template_dir) { if (strpos('/\\', substr($_template_dir, -1)) === false) { $_template_dir .= DS; - } + } $_filepath = $_template_dir . $file; if (file_exists($_filepath)) { return $_filepath; @@ -636,11 +636,11 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { return $_return; } elseif ($_return === true) { return $file; - } - } - } + } + } + } return false; - } + } /** * Update Smarty variables in other scopes @@ -652,7 +652,7 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { $_variable_scope = $this->tpl_vars[$_key]->scope; if ($scope == Smarty::SCOPE_LOCAL && $_variable_scope == Smarty::SCOPE_LOCAL) { continue; - } + } if (isset($this->parent) && ($scope == Smarty::SCOPE_PARENT || $_variable_scope == Smarty::SCOPE_PARENT)) { if (isset($this->parent->tpl_vars[$_key])) { // variable is already defined in parent, copy value @@ -661,20 +661,20 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { // create variable in parent $this->parent->tpl_vars[$_key] = clone $_variable; $this->parent->tpl_vars[$_key]->scope = Smarty::SCOPE_LOCAL; - } - } + } + } if ($scope == Smarty::SCOPE_ROOT || $_variable_scope == Smarty::SCOPE_ROOT) { if ($this->parent == null) { continue; - } + } if (!$has_root) { // find root $root_ptr = $this; while ($root_ptr->parent != null) { $root_ptr = $root_ptr->parent; $has_root = true; - } - } + } + } if (isset($root_ptr->tpl_vars[$_key])) { // variable is already defined in root, copy value $root_ptr->tpl_vars[$_key]->value = $this->tpl_vars[$_key]->value; @@ -682,8 +682,8 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { // create variable in root $root_ptr->tpl_vars[$_key] = clone $_variable; $root_ptr->tpl_vars[$_key]->scope = Smarty::SCOPE_LOCAL; - } - } + } + } if ($scope == Smarty::SCOPE_GLOBAL || $_variable_scope == Smarty::SCOPE_GLOBAL) { if (isset(Smarty::$global_tpl_vars[$_key])) { // variable is already defined in root, copy value @@ -691,15 +691,15 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { } else { // create global variable Smarty::$global_tpl_vars[$_key] = clone $_variable; - } + } Smarty::$global_tpl_vars[$_key]->scope = Smarty::SCOPE_LOCAL; - } - } - } + } + } + } /** * Split a template resource in its name and type - * + * * @param string $template_resource template resource specification * @param string $resource_type return resource type * @param string $resource_name return resource name @@ -718,17 +718,17 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { $resource_type = 'file'; $resource_name = $template_resource; } - } - } + } + } /** * Load template resource handler by type - * + * * @param string $resource_type template resource type * @return object resource handler object */ protected function loadTemplateResourceHandler ($resource_type) - { + { // try registered resource if (isset($this->smarty->registered_resources[$resource_type])) { return new Smarty_Internal_Resource_Registered($this); @@ -745,7 +745,7 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { return new $_resource_class($this->smarty); } else { return new Smarty_Internal_Resource_Registered($this, $resource_type); - } + } } else { // try streams $_known_stream = stream_get_wrappers(); @@ -753,22 +753,22 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { // is known stream if (is_object($this->smarty->security_policy)) { $this->smarty->security_policy->isTrustedStream($resource_type); - } + } return new Smarty_Internal_Resource_Stream($this->smarty); } else { throw new SmartyException('Unkown resource type \'' . $resource_type . '\''); - } - } - } - } - } + } + } + } + } + } /** * Create property header */ public function createPropertyHeader ($cache = false) { - $plugins_string = ''; + $plugins_string = ''; // include code for plugins if (!$cache) { if (!empty($this->required_plugins['compiled'])) { @@ -776,27 +776,27 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { foreach($this->required_plugins['compiled'] as $tmp) { foreach($tmp as $data) { $plugins_string .= "if (!is_callable('{$data['function']}')) include '{$data['file']}';\n"; - } - } + } + } $plugins_string .= '?>'; - } + } if (!empty($this->required_plugins['nocache'])) { $this->has_nocache_code = true; $plugins_string .= "properties['nocache_hash']}%%*/required_plugins['nocache'] as $tmp) { foreach($tmp as $data) { $plugins_string .= "if (!is_callable(\'{$data['function']}\')) include \'{$data['file']}\';\n"; - } - } + } + } $plugins_string .= "?>/*/%%SmartyNocache:{$this->properties['nocache_hash']}%%*/';?>\n"; - } - } + } + } // build property code $this->properties['has_nocache_code'] = $this->has_nocache_code; $properties_string = "properties['nocache_hash']}%%*/" ; if ($this->smarty->direct_access_security) { $properties_string .= "if(!defined('SMARTY_DIR')) exit('no direct access allowed');\n"; - } + } if ($cache) { // remove compiled code of{function} definition unset($this->properties['function']); @@ -806,13 +806,13 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { if (isset($function_data['called_nocache'])) { unset($function_data['called_nocache'], $this->smarty->template_functions[$name]['called_nocache']); $this->properties['function'][$name] = $function_data; - } - } - } - } + } + } + } + } $properties_string .= "\$_smarty_tpl->decodeProperties(" . var_export($this->properties, true) . "); /*/%%SmartyHeaderCode%%*/?>\n"; return $properties_string . $plugins_string; - } + } /** * Decode saved properties from compiled template and cache files @@ -823,15 +823,15 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { $this->properties['nocache_hash'] = $properties['nocache_hash']; if (isset($properties['cache_lifetime'])) { $this->properties['cache_lifetime'] = $properties['cache_lifetime']; - } + } if (isset($properties['file_dependency'])) { $this->properties['file_dependency'] = array_merge($this->properties['file_dependency'], $properties['file_dependency']); - } + } if (!empty($properties['function'])) { $this->properties['function'] = array_merge($this->properties['function'], $properties['function']); $this->smarty->template_functions = array_merge($this->smarty->template_functions, $properties['function']); - } - } + } + } /** * creates a local Smarty variable for array assignments @@ -846,13 +846,13 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { $this->tpl_vars[$tpl_var] = clone $tpl_var_inst; if ($scope != Smarty::SCOPE_LOCAL) { $this->tpl_vars[$tpl_var]->scope = $scope; - } - } - } + } + } + } if (!(is_array($this->tpl_vars[$tpl_var]->value) || $this->tpl_vars[$tpl_var]->value instanceof ArrayAccess)) { settype($this->tpl_vars[$tpl_var]->value, 'array'); - } - } + } + } /** * [util function] counts an array, arrayaccess/traversable or PDOStatement object @@ -895,9 +895,9 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { } return $this->smarty->fetch($template, $cache_id, $compile_id, $parent, $display); } - - } - + + } + /** * wrapper for display */ @@ -911,11 +911,11 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { } return $this->smarty->display($template, $cache_id, $compile_id, $parent); } - - } + + } /** - * set Smarty property in template context + * set Smarty property in template context * @param string $property_name property name * @param mixed $value value */ @@ -931,7 +931,7 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { } /** - * get Smarty property in template context + * get Smarty property in template context * @param string $property_name property name */ public function __get($property_name) @@ -944,7 +944,7 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { } return $this->resource_object; } - if ($property_name == 'cache_resource_object') { + if ($property_name == 'cache_resource_object') { // load cache resource $this->cache_resource_object = $this->loadCacheResource(); return $this->cache_resource_object; @@ -961,7 +961,7 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { * Takes unknown class methods and lazy loads sysplugin files for them * class name format: Smarty_Method_MethodName * plugin filename format: method.methodname.php - * + * * @param string $name unknown methode name * @param array $args aurgument array */ @@ -969,13 +969,13 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { { static $camel_func; if (!isset($camel_func)) - $camel_func = create_function('$c', 'return "_" . strtolower($c[1]);'); + $camel_func = create_function('$c', 'return "_" . strtolower($c[1]);'); // see if this is a set/get for a property $first3 = strtolower(substr($name, 0, 3)); if (in_array($first3, array('set', 'get')) && substr($name, 3, 1) !== '_') { // try to keep case correct for future PHP 6.0 case-sensitive class methods // lcfirst() not available < PHP 5.3.0, so improvise - $property_name = strtolower(substr($name, 3, 1)) . substr($name, 4); + $property_name = strtolower(substr($name, 3, 1)) . substr($name, 4); // convert camel case to underscored name $property_name = preg_replace_callback('/([A-Z])/', $camel_func, $property_name); if (property_exists($this, $property_name)) { @@ -989,12 +989,12 @@ class Smarty_Internal_Template extends Smarty_Internal_Data { if (strpos($name,'_') !== false) { if (!isset($this->wrapper)) { $this->wrapper = new Smarty_Internal_Wrapper($this); - } + } return $this->wrapper->convert($name, $args); } - // pass call to Smarty object + // pass call to Smarty object return call_user_func_array(array($this->smarty,$name),$args); - } + } } ?> \ No newline at end of file