
Comparing changes: https://github.com/smarty-php/smarty/compare/v4.3.1...v4.4.1 It is noticeable that Smarty 4.3.1 does not officially support PHP 8.3. Is only supported with 4.4.0. Remark: During tests with Smarty 4.5.1, it was noticed that the following warning occurs: Deprecated: Using the unregistered function "function_exists" in a template is deprecated and will be removed in a future version. Use Smarty::registerPlugin to explicitly register a custom modifier. As of Smarty 5.X.X, templates must be revised again. The Smarty release 5.0.2 is already officially available. However, integration into FlatPress is not entirely trivial.
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);
|
|
}
|
|
}
|