You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
postfixadmin/smarty/libs/sysplugins/smarty_template_resource_ba...

156 lines
3.6 KiB
PHP

<?php
/**
* Smarty Template Resource Base Object
*
* @package Smarty
* @subpackage TemplateResources
* @author Rodney Rehm
*/
abstract class Smarty_Template_Resource_Base
{
/**
* Compiled Filepath
*
* @var string
*/
public $filepath = null;
/**
* Compiled Timestamp
*
* @var integer
*/
public $timestamp = null;
/**
* Compiled Existence
*
* @var boolean
*/
public $exists = false;
/**
* Template Compile Id (Smarty_Internal_Template::$compile_id)
*
* @var string
*/
public $compile_id = null;
/**
* Compiled Content Loaded
*
* @var boolean
*/
public $processed = false;
/**
* unique function name for compiled template code
*
* @var string
*/
public $unifunc = '';
/**
* flag if template does contain nocache code sections
*
* @var bool
*/
public $has_nocache_code = false;
/**
* resource file dependency
*
* @var array
*/
public $file_dependency = array();
/**
* Content buffer
*
* @var string
*/
public $content = null;
/**
* required plugins
*
* @var array
*/
public $required_plugins = array();
/**
* Included subtemplates
*
* @var array
*/
public $includes = array();
/**
* Process resource
*
* @param Smarty_Internal_Template $_template template object
*/
abstract public function process(Smarty_Internal_Template $_template);
/**
* get rendered template content by calling compiled or cached template code
*
* @param string $unifunc function with template code
*
* @return string
* @throws \Exception
*/
public function getRenderedTemplateCode(Smarty_Internal_Template $_template, $unifunc = null)
{
$unifunc = isset($unifunc) ? $unifunc : $this->unifunc;
$level = ob_get_level();
try {
if (empty($unifunc) || !is_callable($unifunc)) {
throw new SmartyException("Invalid compiled template for '{$_template->template_resource}'");
}
if (isset($_template->smarty->security_policy)) {
$_template->smarty->security_policy->startTemplate($_template);
}
//
// render compiled or saved template code
//
if (!isset($_template->_cache['capture_stack'])) {
$_template->_cache['capture_stack'] = array();
}
$_saved_capture_level = count($_template->_cache['capture_stack']);
$unifunc($_template);
// any unclosed {capture} tags ?
if ($_saved_capture_level != count($_template->_cache['capture_stack'])) {
$_template->capture_error();
}
if (isset($_template->smarty->security_policy)) {
$_template->smarty->security_policy->exitTemplate();
}
return null;
}
catch (Exception $e) {
while (ob_get_level() > $level) {
ob_end_clean();
}
if (isset($_template->smarty->security_policy)) {
$_template->smarty->security_policy->exitTemplate();
}
throw $e;
}
}
/**
* Get compiled time stamp
*
* @return int
*/
public function getTimeStamp()
{
if ($this->exists && !isset($this->timestamp)) {
$this->timestamp = @filemtime($this->filepath);
}
return $this->timestamp;
}
}