<?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); } }