summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Wisselink <wisskid@users.noreply.github.com>2024-04-13 16:53:05 +0200
committerGitHub <noreply@github.com>2024-04-13 16:53:05 +0200
commit5ee4363000ce32bfa45be5156a665bb6132313b4 (patch)
tree2da3437c3209fbddb1997b0ea795f15e158dbbd0
parent77c0b74e3bbbcbe48ed425634150de2f6c1808e2 (diff)
downloadsmarty-5ee4363000ce32bfa45be5156a665bb6132313b4.tar.gz
smarty-5ee4363000ce32bfa45be5156a665bb6132313b4.tar.bz2
smarty-5ee4363000ce32bfa45be5156a665bb6132313b4.zip
Fix change in signature of getTemplateVars (#995)
-rw-r--r--changelog/994.md1
-rw-r--r--src/Data.php5
-rw-r--r--tests/UnitTests/SmartyMethodsTests/GetTemplateVars/GetTemplateVarsTest.php210
3 files changed, 117 insertions, 99 deletions
diff --git a/changelog/994.md b/changelog/994.md
new file mode 100644
index 00000000..16c58c51
--- /dev/null
+++ b/changelog/994.md
@@ -0,0 +1 @@
+- Fix that getTemplateVars would return an array of objects instead of the assigned variables values [#994](https://github.com/smarty-php/smarty/issues/994) \ No newline at end of file
diff --git a/src/Data.php b/src/Data.php
index 64a4770e..f8abe0f6 100644
--- a/src/Data.php
+++ b/src/Data.php
@@ -224,7 +224,10 @@ class Data
return $this->getValue($varName, $searchParents);
}
- return array_merge($this->parent && $searchParents ? $this->parent->getTemplateVars() : [], $this->tpl_vars);
+ return array_merge(
+ $this->parent && $searchParents ? $this->parent->getTemplateVars() : [],
+ array_map(function(Variable $var) { return $var->getValue(); }, $this->tpl_vars)
+ );
}
/**
diff --git a/tests/UnitTests/SmartyMethodsTests/GetTemplateVars/GetTemplateVarsTest.php b/tests/UnitTests/SmartyMethodsTests/GetTemplateVars/GetTemplateVarsTest.php
index 4aab7c3b..db60b822 100644
--- a/tests/UnitTests/SmartyMethodsTests/GetTemplateVars/GetTemplateVarsTest.php
+++ b/tests/UnitTests/SmartyMethodsTests/GetTemplateVars/GetTemplateVarsTest.php
@@ -1,112 +1,126 @@
<?php
/**
* Smarty PHPunit tests getTemplateVars method
- *
-
- * @author Uwe Tews
- */
-
-/**
- * class for getTemplateVars method test
- *
- *
- *
- *
*/
class GetTemplateVarsTest extends PHPUnit_Smarty
{
- public function setUp(): void
- {
- $this->setUpSmarty(__DIR__);
- }
+ public function setUp(): void
+ {
+ $this->setUpSmarty(__DIR__);
+ }
+
+ public function testInit()
+ {
+ $this->cleanDirs();
+ }
+ /**
+ * test root getTemplateVars single value
+ */
+ public function testGetSingleTemplateVarScopeRoot()
+ {
+ $this->smarty->assign('foo', 'bar');
+ $this->smarty->assign('blar', 'buh');
+ $this->assertEquals("bar", $this->smarty->getTemplateVars('foo'));
+ }
+
+ /**
+ * test root getTemplateVars all values
+ */
+ public function testGetAllTemplateVarsScopeRoot()
+ {
+ $this->smarty->assign('foo', 'bar');
+ $this->smarty->assign('blar', 'buh');
+ $vars = $this->smarty->getTemplateVars();
+ $this->assertTrue(is_array($vars));
+ $this->assertEquals("bar", $vars['foo']);
+ $this->assertEquals("buh", $vars['blar']);
+ }
+
+ /**
+ * test single variable with data object chain
+ */
+ public function testGetSingleTemplateVarScopeAll()
+ {
+ $data1 = $this->smarty->createData($this->smarty);
+ $data2 = $this->smarty->createData($data1);
+ $this->smarty->assign('foo', 'bar');
+ $this->smarty->assign('blar', 'buh');
+ $this->assertEquals("bar", $data2->getTemplateVars('foo'));
+ }
+
+ /**
+ * test get all variables with data object chain
+ */
+ public function testGetAllTemplateVarsScopeAll()
+ {
+ $data1 = $this->smarty->createData($this->smarty);
+ $data2 = $this->smarty->createData($data1);
+ $this->smarty->assign('foo', 'bar');
+ $data1->assign('blar', 'buh');
+ $data2->assign('foo2', 'bar2');
+ $vars = $data2->getTemplateVars(null);
+ $this->assertTrue(is_array($vars));
+ $this->assertEquals("bar", $vars['foo']);
+ $this->assertEquals("bar2", $vars['foo2']);
+ $this->assertEquals("buh", $vars['blar']);
+ }
+ /**
+ * test get all variables with data object chain search parents disabled
+ */
+ public function testGetAllTemplateVarsScopeAllNoParents()
+ {
+ $data1 = $this->smarty->createData($this->smarty);
+ $data2 = $this->smarty->createData($data1);
+ $this->smarty->assign('foo', 'bar');
+ $data1->assign('blar', 'buh');
+ $data2->assign('foo2', 'bar2');
+ $vars = $data2->getTemplateVars(null, false);
+ $this->assertTrue(is_array($vars));
+ $this->assertFalse(isset($vars['foo']));
+ $this->assertEquals("bar2", $vars['foo2']);
+ $this->assertFalse(isset($vars['blar']));
+ }
- public function testInit()
- {
- $this->cleanDirs();
- }
- /**
- * test root getTemplateVars single value
- */
- public function testGetSingleTemplateVarScopeRoot()
- {
- $this->smarty->assign('foo', 'bar');
- $this->smarty->assign('blar', 'buh');
- $this->assertEquals("bar", $this->smarty->getTemplateVars('foo'));
- }
+ /**
+ * test get single variables with data object chain search parents disabled
+ */
+ public function testGetSingleTemplateVarsScopeAllNoParents()
+ {
+ error_reporting(error_reporting() & ~(E_NOTICE | E_USER_NOTICE));
+ $data1 = $this->smarty->createData($this->smarty);
+ $data2 = $this->smarty->createData($data1);
+ $this->smarty->assign('foo', 'bar');
+ $data1->assign('blar', 'buh');
+ $data2->assign('foo2', 'bar2');
+ $this->assertEquals("", $data2->getTemplateVars('foo', false));
+ $this->assertEquals("bar2", $data2->getTemplateVars('foo2', false));
+ $this->assertEquals("", $data2->getTemplateVars('blar', false));
+ }
- /**
- * test root getTemplateVars all values
- */
- public function testGetAllTemplateVarsScopeRoot()
- {
- $this->smarty->assign('foo', 'bar');
- $this->smarty->assign('blar', 'buh');
- $vars = $this->smarty->getTemplateVars();
- $this->assertTrue(is_array($vars));
- $this->assertEquals("bar", $vars['foo']);
- $this->assertEquals("buh", $vars['blar']);
- }
+ /**
+ * test that variable assigned by global assign in template is included in getTemplateVars
+ */
+ public function testAssignedInTemplate()
+ {
+ $this->smarty->fetch('string:{assign var="b" value="x" scope="global"}');
+ $this->assertEquals('x', $this->smarty->getTemplateVars('b'));
+ }
- /**
- * test single variable with data object chain
- */
- public function testGetSingleTemplateVarScopeAll()
- {
- $data1 = $this->smarty->createData($this->smarty);
- $data2 = $this->smarty->createData($data1);
- $this->smarty->assign('foo', 'bar');
- $this->smarty->assign('blar', 'buh');
- $this->assertEquals("bar", $data2->getTemplateVars('foo'));
- }
+ /**
+ * test that getTemplateVars returns simple array of values
+ */
+ public function testSimpleCallReturnsArrayWithAllValues()
+ {
+ $this->smarty->assign('foo', 'bar');
+ $this->smarty->assign('i', 3);
- /**
- * test get all variables with data object chain
- */
- public function testGetAllTemplateVarsScopeAll()
- {
- $data1 = $this->smarty->createData($this->smarty);
- $data2 = $this->smarty->createData($data1);
- $this->smarty->assign('foo', 'bar');
- $data1->assign('blar', 'buh');
- $data2->assign('foo2', 'bar2');
- $vars = $data2->getTemplateVars(null);
- $this->assertTrue(is_array($vars));
- $this->assertEquals("bar", $vars['foo']);
- $this->assertEquals("bar2", $vars['foo2']);
- $this->assertEquals("buh", $vars['blar']);
- }
+ $vars = $this->smarty->getTemplateVars();
- /**
- * test get all variables with data object chain search parents disabled
- */
- public function testGetAllTemplateVarsScopeAllNoParents()
- {
- $data1 = $this->smarty->createData($this->smarty);
- $data2 = $this->smarty->createData($data1);
- $this->smarty->assign('foo', 'bar');
- $data1->assign('blar', 'buh');
- $data2->assign('foo2', 'bar2');
- $vars = $data2->getTemplateVars(null, false);
- $this->assertTrue(is_array($vars));
- $this->assertFalse(isset($vars['foo']));
- $this->assertEquals("bar2", $vars['foo2']);
- $this->assertFalse(isset($vars['blar']));
- }
+ $this->assertArrayHasKey('foo', $vars);
+ $this->assertArrayHasKey('i', $vars);
+ $this->assertEquals('bar', $vars['foo']);
+ $this->assertEquals(3,$vars['i']);
+ }
- /**
- * test get single variables with data object chain search parents disabled
- */
- public function testGetSingleTemplateVarsScopeAllNoParents()
- {
- error_reporting(error_reporting() & ~(E_NOTICE | E_USER_NOTICE));
- $data1 = $this->smarty->createData($this->smarty);
- $data2 = $this->smarty->createData($data1);
- $this->smarty->assign('foo', 'bar');
- $data1->assign('blar', 'buh');
- $data2->assign('foo2', 'bar2');
- $this->assertEquals("", $data2->getTemplateVars('foo', false));
- $this->assertEquals("bar2", $data2->getTemplateVars('foo2', false));
- $this->assertEquals("", $data2->getTemplateVars('blar', false));
- }
}