214 lines
5.2 KiB
PHP
214 lines
5.2 KiB
PHP
|
<?php
|
||
|
|
||
|
/**
|
||
|
* Smarty Resource Data Object
|
||
|
* Meta Data Container for Template Files
|
||
|
*
|
||
|
* @package Smarty
|
||
|
* @subpackage TemplateResources
|
||
|
* @author Rodney Rehm
|
||
|
*/
|
||
|
class Smarty_Template_Source
|
||
|
{
|
||
|
/**
|
||
|
* Unique Template ID
|
||
|
*
|
||
|
* @var string
|
||
|
*/
|
||
|
public $uid = null;
|
||
|
|
||
|
/**
|
||
|
* Template Resource (Smarty_Internal_Template::$template_resource)
|
||
|
*
|
||
|
* @var string
|
||
|
*/
|
||
|
public $resource = null;
|
||
|
|
||
|
/**
|
||
|
* Resource Type
|
||
|
*
|
||
|
* @var string
|
||
|
*/
|
||
|
public $type = null;
|
||
|
|
||
|
/**
|
||
|
* Resource Name
|
||
|
*
|
||
|
* @var string
|
||
|
*/
|
||
|
public $name = null;
|
||
|
|
||
|
/**
|
||
|
* Source Filepath
|
||
|
*
|
||
|
* @var string
|
||
|
*/
|
||
|
public $filepath = null;
|
||
|
|
||
|
/**
|
||
|
* Source Timestamp
|
||
|
*
|
||
|
* @var integer
|
||
|
*/
|
||
|
public $timestamp = null;
|
||
|
|
||
|
/**
|
||
|
* Source Existence
|
||
|
*
|
||
|
* @var boolean
|
||
|
*/
|
||
|
public $exists = false;
|
||
|
|
||
|
/**
|
||
|
* Source File Base name
|
||
|
*
|
||
|
* @var string
|
||
|
*/
|
||
|
public $basename = null;
|
||
|
|
||
|
/**
|
||
|
* The Components an extended template is made of
|
||
|
*
|
||
|
* @var \Smarty_Template_Source[]
|
||
|
*/
|
||
|
public $components = null;
|
||
|
|
||
|
/**
|
||
|
* Resource Handler
|
||
|
*
|
||
|
* @var \Smarty_Resource
|
||
|
*/
|
||
|
public $handler = null;
|
||
|
|
||
|
/**
|
||
|
* Smarty instance
|
||
|
*
|
||
|
* @var Smarty
|
||
|
*/
|
||
|
public $smarty = null;
|
||
|
|
||
|
/**
|
||
|
* Resource is source
|
||
|
*
|
||
|
* @var bool
|
||
|
*/
|
||
|
public $isConfig = false;
|
||
|
|
||
|
/**
|
||
|
* Template source content eventually set by default handler
|
||
|
*
|
||
|
* @var string
|
||
|
*/
|
||
|
public $content = null;
|
||
|
|
||
|
/**
|
||
|
* Name of the Class to compile this resource's contents with
|
||
|
*
|
||
|
* @var string
|
||
|
*/
|
||
|
public $compiler_class = 'Smarty_Internal_SmartyTemplateCompiler';
|
||
|
|
||
|
/**
|
||
|
* Name of the Class to tokenize this resource's contents with
|
||
|
*
|
||
|
* @var string
|
||
|
*/
|
||
|
public $template_lexer_class = 'Smarty_Internal_Templatelexer';
|
||
|
|
||
|
/**
|
||
|
* Name of the Class to parse this resource's contents with
|
||
|
*
|
||
|
* @var string
|
||
|
*/
|
||
|
public $template_parser_class = 'Smarty_Internal_Templateparser';
|
||
|
|
||
|
/**
|
||
|
* create Source Object container
|
||
|
*
|
||
|
* @param Smarty $smarty Smarty instance this source object belongs to
|
||
|
* @param string $resource full template_resource
|
||
|
* @param string $type type of resource
|
||
|
* @param string $name resource name
|
||
|
*
|
||
|
* @throws \SmartyException
|
||
|
* @internal param \Smarty_Resource $handler Resource Handler this source object communicates with
|
||
|
*/
|
||
|
public function __construct(Smarty $smarty, $resource, $type, $name)
|
||
|
{
|
||
|
$this->handler =
|
||
|
isset($smarty->_cache[ 'resource_handlers' ][ $type ]) ? $smarty->_cache[ 'resource_handlers' ][ $type ] :
|
||
|
Smarty_Resource::load($smarty, $type);
|
||
|
$this->smarty = $smarty;
|
||
|
$this->resource = $resource;
|
||
|
$this->type = $type;
|
||
|
$this->name = $name;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* initialize Source Object for given resource
|
||
|
* Either [$_template] or [$smarty, $template_resource] must be specified
|
||
|
*
|
||
|
* @param Smarty_Internal_Template $_template template object
|
||
|
* @param Smarty $smarty smarty object
|
||
|
* @param string $template_resource resource identifier
|
||
|
*
|
||
|
* @return Smarty_Template_Source Source Object
|
||
|
* @throws SmartyException
|
||
|
*/
|
||
|
public static function load(
|
||
|
Smarty_Internal_Template $_template = null,
|
||
|
Smarty $smarty = null,
|
||
|
$template_resource = null
|
||
|
) {
|
||
|
if ($_template) {
|
||
|
$smarty = $_template->smarty;
|
||
|
$template_resource = $_template->template_resource;
|
||
|
}
|
||
|
if (empty($template_resource)) {
|
||
|
throw new SmartyException('Source: Missing name');
|
||
|
}
|
||
|
// parse resource_name, load resource handler, identify unique resource name
|
||
|
if (preg_match('/^([A-Za-z0-9_\-]{2,})[:]([\s\S]*)$/', $template_resource, $match)) {
|
||
|
$type = $match[ 1 ];
|
||
|
$name = $match[ 2 ];
|
||
|
} else {
|
||
|
// no resource given, use default
|
||
|
// or single character before the colon is not a resource type, but part of the filepath
|
||
|
$type = $smarty->default_resource_type;
|
||
|
$name = $template_resource;
|
||
|
}
|
||
|
// create new source object
|
||
|
$source = new Smarty_Template_Source($smarty, $template_resource, $type, $name);
|
||
|
$source->handler->populate($source, $_template);
|
||
|
if (!$source->exists && isset($_template->smarty->default_template_handler_func)) {
|
||
|
Smarty_Internal_Method_RegisterDefaultTemplateHandler::_getDefaultTemplate($source);
|
||
|
$source->handler->populate($source, $_template);
|
||
|
}
|
||
|
return $source;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get source time stamp
|
||
|
*
|
||
|
* @return int
|
||
|
*/
|
||
|
public function getTimeStamp()
|
||
|
{
|
||
|
if (!isset($this->timestamp)) {
|
||
|
$this->handler->populateTimestamp($this);
|
||
|
}
|
||
|
return $this->timestamp;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get source content
|
||
|
*
|
||
|
* @return string
|
||
|
* @throws \SmartyException
|
||
|
*/
|
||
|
public function getContent()
|
||
|
{
|
||
|
return isset($this->content) ? $this->content : $this->handler->getContent($this);
|
||
|
}
|
||
|
}
|