
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.
175 lines
4.1 KiB
PHP
175 lines
4.1 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Runtime Extension Capture
|
|
*
|
|
* @package Smarty
|
|
* @subpackage PluginsInternal
|
|
* @author Uwe Tews
|
|
*/
|
|
class Smarty_Internal_Runtime_Capture
|
|
{
|
|
/**
|
|
* Flag that this instance will not be cached
|
|
*
|
|
* @var bool
|
|
*/
|
|
public $isPrivateExtension = true;
|
|
|
|
/**
|
|
* Stack of capture parameter
|
|
*
|
|
* @var array
|
|
*/
|
|
private $captureStack = array();
|
|
|
|
/**
|
|
* Current open capture sections
|
|
*
|
|
* @var int
|
|
*/
|
|
private $captureCount = 0;
|
|
|
|
/**
|
|
* Count stack
|
|
*
|
|
* @var int[]
|
|
*/
|
|
private $countStack = array();
|
|
|
|
/**
|
|
* Named buffer
|
|
*
|
|
* @var string[]
|
|
*/
|
|
private $namedBuffer = array();
|
|
|
|
/**
|
|
* Flag if callbacks are registered
|
|
*
|
|
* @var bool
|
|
*/
|
|
private $isRegistered = false;
|
|
|
|
/**
|
|
* Open capture section
|
|
*
|
|
* @param \Smarty_Internal_Template $_template
|
|
* @param string $buffer capture name
|
|
* @param string $assign variable name
|
|
* @param string $append variable name
|
|
*/
|
|
public function open(Smarty_Internal_Template $_template, $buffer, $assign, $append)
|
|
{
|
|
if (!$this->isRegistered) {
|
|
$this->register($_template);
|
|
}
|
|
$this->captureStack[] = array(
|
|
$buffer,
|
|
$assign,
|
|
$append
|
|
);
|
|
$this->captureCount++;
|
|
ob_start();
|
|
}
|
|
|
|
/**
|
|
* Register callbacks in template class
|
|
*
|
|
* @param \Smarty_Internal_Template $_template
|
|
*/
|
|
private function register(Smarty_Internal_Template $_template)
|
|
{
|
|
$_template->startRenderCallbacks[] = array(
|
|
$this,
|
|
'startRender'
|
|
);
|
|
$_template->endRenderCallbacks[] = array(
|
|
$this,
|
|
'endRender'
|
|
);
|
|
$this->startRender($_template);
|
|
$this->isRegistered = true;
|
|
}
|
|
|
|
/**
|
|
* Start render callback
|
|
*
|
|
* @param \Smarty_Internal_Template $_template
|
|
*/
|
|
public function startRender(Smarty_Internal_Template $_template)
|
|
{
|
|
$this->countStack[] = $this->captureCount;
|
|
$this->captureCount = 0;
|
|
}
|
|
|
|
/**
|
|
* Close capture section
|
|
*
|
|
* @param \Smarty_Internal_Template $_template
|
|
*
|
|
* @throws \SmartyException
|
|
*/
|
|
public function close(Smarty_Internal_Template $_template)
|
|
{
|
|
if ($this->captureCount) {
|
|
list($buffer, $assign, $append) = array_pop($this->captureStack);
|
|
$this->captureCount--;
|
|
if (isset($assign)) {
|
|
$_template->assign($assign, ob_get_contents());
|
|
}
|
|
if (isset($append)) {
|
|
$_template->append($append, ob_get_contents());
|
|
}
|
|
$this->namedBuffer[ $buffer ] = ob_get_clean();
|
|
} else {
|
|
$this->error($_template);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Error exception on not matching {capture}{/capture}
|
|
*
|
|
* @param \Smarty_Internal_Template $_template
|
|
*
|
|
* @throws \SmartyException
|
|
*/
|
|
public function error(Smarty_Internal_Template $_template)
|
|
{
|
|
throw new SmartyException("Not matching {capture}{/capture} in '{$_template->template_resource}'");
|
|
}
|
|
|
|
/**
|
|
* Return content of named capture buffer by key or as array
|
|
*
|
|
* @param \Smarty_Internal_Template $_template
|
|
* @param string|null $name
|
|
*
|
|
* @return string|string[]|null
|
|
*/
|
|
public function getBuffer(Smarty_Internal_Template $_template, $name = null)
|
|
{
|
|
if (isset($name)) {
|
|
return isset($this->namedBuffer[ $name ]) ? $this->namedBuffer[ $name ] : null;
|
|
} else {
|
|
return $this->namedBuffer;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* End render callback
|
|
*
|
|
* @param \Smarty_Internal_Template $_template
|
|
*
|
|
* @throws \SmartyException
|
|
*/
|
|
public function endRender(Smarty_Internal_Template $_template)
|
|
{
|
|
if ($this->captureCount) {
|
|
$this->error($_template);
|
|
} else {
|
|
$this->captureCount = array_pop($this->countStack);
|
|
}
|
|
}
|
|
}
|