Compare commits

..

9 Commits

Author SHA1 Message Date
Simon Wisselink cabc862ee5 fix 2024-04-05 17:35:28 +02:00
Simon Wisselink 6a1f56d51f Throw deprecation notice about unregistered functions without changing the compilation flow.
Fixes #964
2024-04-05 17:17:55 +02:00
Simon Wisselink 42b869e3a0 Merge branch 'release/4.5.1' into support/4 2024-03-18 15:19:07 +01:00
Simon Wisselink 4cb00900d7 version bump 2024-03-18 15:19:05 +01:00
Simon Wisselink 204f3bc74e fix branch name in release script 2024-03-18 15:16:08 +01:00
Simon Wisselink 409802db04 Merge branch 'release/4.5.0' into support/4 2024-03-18 15:14:37 +01:00
Simon Wisselink 1015e5472b version bump 2024-03-18 15:12:18 +01:00
Simon Wisselink c7a271323b Using unsupported PHP functions and unregistered static class methods in modifiers and expressions now triggers a deprecation notice
* Using unsupported PHP functions and unregistered static class methods in modifiers and expressions now triggers a deprecation notice because we will drop support for this in the next major release
2024-03-18 14:44:29 +01:00
Simon Wisselink e2cb9873ff New unit test for function scope 2024-03-15 16:18:19 +01:00
6 changed files with 95 additions and 13 deletions
+6
View File
@@ -6,6 +6,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased]
## [4.5.1] - 2024-03-18
## [4.5.0] - 2024-03-18
### Changed
- Using unregistered static class methods in expressions now also triggers a deprecation notice because we will drop support for this in the next major release [#813](https://github.com/smarty-php/smarty/issues/813)
+1 -1
View File
@@ -107,7 +107,7 @@ class Smarty extends Smarty_Internal_TemplateBase
/**
* smarty version
*/
const SMARTY_VERSION = '4.4.1';
const SMARTY_VERSION = '4.5.1';
/**
* define variable scopes
*/
@@ -640,17 +640,18 @@ abstract class Smarty_Internal_TemplateCompilerBase
return $func_name . '(' . $parameter[ 0 ] . ')';
}
} else {
$first_param = array_shift($parameter);
$modifier = array_merge(array($name), $parameter);
// Now, compile the function call as a modifier
return $this->compileTag(
'private_modifier',
array(),
array(
'modifierlist' => array($modifier),
'value' => $first_param
)
);
if (
!$this->smarty->loadPlugin('smarty_modifiercompiler_' . $name)
&& !isset($this->smarty->registered_plugins[Smarty::PLUGIN_MODIFIER][$name])
&& !in_array($name, ['time', 'join', 'is_array', 'in_array'])
) {
trigger_error('Using unregistered function "' . $name . '" in a template is deprecated and will be ' .
'removed in a future release. Use Smarty::registerPlugin to explicitly register ' .
'a custom modifier.', E_USER_DEPRECATED);
}
return $name . '(' . implode(',', $parameter) . ')';
}
} else {
$this->trigger_template_error("unknown function '{$name}'");
+1 -1
View File
@@ -15,7 +15,7 @@ php utilities/update-smarty-version-number.php $1
git add changelog CHANGELOG.md libs/Smarty.class.php
git commit -m "version bump"
git checkout support/4.3
git checkout support/4
git pull
git merge --no-ff "release/$1"
git branch -d "release/$1"
@@ -299,4 +299,12 @@ class ScopeTest extends PHPUnit_Smarty
$this->smarty->assign('scope', 'none');
$r = $this->smarty->fetch('test_function_scope.tpl');
}
public function testFunctionScopeIsLocalByDefault()
{
$r = $this->smarty->fetch('string:{function name=test}{$var="b"}{/function}{$var="a"}{test}{$var}');
$this->assertEquals('a', $r);
}
}
@@ -0,0 +1,67 @@
<?php
class ArgumentMustBePassedByReference961Test extends PHPUnit_Smarty
{
/**
* @group issue961
*/
public function testReset()
{
$smarty = new Smarty();
$smarty->registerPlugin('modifier', 'reset', 'reset');
$templateStr = "string:{reset(\$ar)}";
$smarty->assign('ar', [1,2,3]);
$this->assertEquals(
'1',
$smarty->fetch($templateStr)
);
}
/**
* @group issue961
* @deprecated
*/
public function testResetAsModifier()
{
$smarty = new Smarty();
try {
$templateStr = "string:{\$ar|reset}";
$smarty->assign('ar', [1,2,3]);
$this->assertEquals(
'1',
$smarty->fetch($templateStr)
);
} catch (Exception $e) {
}
}
/**
* @group issue961
*/
public function testResetInExpression()
{
$smarty = new Smarty();
$smarty->registerPlugin('modifier', 'reset', 'reset');
$templateStr = "string:{if reset(\$ar)}ok{/if}";
$smarty->assign('ar', [1,2,3]);
$this->assertEquals(
'ok',
$smarty->fetch($templateStr)
);
}
/**
* @group issue961
*/
public function testMatch()
{
$smarty = new Smarty();
$smarty->registerPlugin('modifier', 'preg_match', 'preg_match');
$templateStr = 'string:{assign var="match" value=null}{if preg_match(\'/([a-z]{4})/\', "a test", $match)}{$match.1}{/if}';
$this->assertEquals(
'test',
$smarty->fetch($templateStr)
);
}
}