
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.
127 lines
3.6 KiB
PHP
127 lines
3.6 KiB
PHP
<?php
|
|
/**
|
|
* Smarty Internal Plugin Resource Extends
|
|
*
|
|
* @package Smarty
|
|
* @subpackage TemplateResources
|
|
* @author Uwe Tews
|
|
* @author Rodney Rehm
|
|
*/
|
|
|
|
/**
|
|
* Smarty Internal Plugin Resource Extends
|
|
* Implements the file system as resource for Smarty which {extend}s a chain of template files templates
|
|
*
|
|
* @package Smarty
|
|
* @subpackage TemplateResources
|
|
*/
|
|
class Smarty_Internal_Resource_Extends extends Smarty_Resource
|
|
{
|
|
/**
|
|
* mbstring.overload flag
|
|
*
|
|
* @var int
|
|
*/
|
|
public $mbstring_overload = 0;
|
|
|
|
/**
|
|
* populate Source Object with meta data from Resource
|
|
*
|
|
* @param Smarty_Template_Source $source source object
|
|
* @param Smarty_Internal_Template $_template template object
|
|
*
|
|
* @throws SmartyException
|
|
*/
|
|
public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null)
|
|
{
|
|
$uid = '';
|
|
$sources = array();
|
|
$components = explode('|', $source->name);
|
|
$smarty = &$source->smarty;
|
|
$exists = true;
|
|
foreach ($components as $component) {
|
|
/* @var \Smarty_Template_Source $_s */
|
|
$_s = Smarty_Template_Source::load(null, $smarty, $component);
|
|
if ($_s->type === 'php') {
|
|
throw new SmartyException("Resource type {$_s->type} cannot be used with the extends resource type");
|
|
}
|
|
$sources[ $_s->uid ] = $_s;
|
|
$uid .= $_s->filepath;
|
|
if ($_template) {
|
|
$exists = $exists && $_s->exists;
|
|
}
|
|
}
|
|
$source->components = $sources;
|
|
$source->filepath = $_s->filepath;
|
|
$source->uid = sha1($uid . $source->smarty->_joined_template_dir);
|
|
$source->exists = $exists;
|
|
if ($_template) {
|
|
$source->timestamp = $_s->timestamp;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* populate Source Object with timestamp and exists from Resource
|
|
*
|
|
* @param Smarty_Template_Source $source source object
|
|
*/
|
|
public function populateTimestamp(Smarty_Template_Source $source)
|
|
{
|
|
$source->exists = true;
|
|
/* @var \Smarty_Template_Source $_s */
|
|
foreach ($source->components as $_s) {
|
|
$source->exists = $source->exists && $_s->exists;
|
|
}
|
|
$source->timestamp = $source->exists ? $_s->getTimeStamp() : false;
|
|
}
|
|
|
|
/**
|
|
* Load template's source from files into current template object
|
|
*
|
|
* @param Smarty_Template_Source $source source object
|
|
*
|
|
* @return string template source
|
|
* @throws SmartyException if source cannot be loaded
|
|
*/
|
|
public function getContent(Smarty_Template_Source $source)
|
|
{
|
|
if (!$source->exists) {
|
|
throw new SmartyException("Unable to load template '{$source->type}:{$source->name}'");
|
|
}
|
|
$_components = array_reverse($source->components);
|
|
$_content = '';
|
|
/* @var \Smarty_Template_Source $_s */
|
|
foreach ($_components as $_s) {
|
|
// read content
|
|
$_content .= $_s->getContent();
|
|
}
|
|
return $_content;
|
|
}
|
|
|
|
/**
|
|
* Determine basename for compiled filename
|
|
*
|
|
* @param Smarty_Template_Source $source source object
|
|
*
|
|
* @return string resource's basename
|
|
*/
|
|
public function getBasename(Smarty_Template_Source $source)
|
|
{
|
|
return str_replace(':', '.', basename($source->filepath));
|
|
}
|
|
|
|
/*
|
|
* Disable timestamp checks for extends resource.
|
|
* The individual source components will be checked.
|
|
*
|
|
* @return bool
|
|
*/
|
|
/**
|
|
* @return bool
|
|
*/
|
|
public function checkTimestamps()
|
|
{
|
|
return false;
|
|
}
|
|
}
|