1: <?php
2:
3: /**
4: * Smarty Method GetTemplateVars
5: *
6: * Smarty::getTemplateVars() method
7: *
8: * @package Smarty
9: * @subpackage PluginsInternal
10: * @author Uwe Tews
11: */
12: class Smarty_Internal_Method_GetTemplateVars
13: {
14: /**
15: * Valid for all objects
16: *
17: * @var int
18: */
19: public $objMap = 7;
20:
21: /**
22: * Returns a single or all template variables
23: *
24: * @api Smarty::getTemplateVars()
25: * @link http://www.smarty.net/docs/en/api.get.template.vars.tpl
26: *
27: * @param \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty $data
28: * @param string $varName variable name or null
29: * @param \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty $_ptr optional pointer to data object
30: * @param bool $searchParents include parent templates?
31: *
32: * @return mixed variable value or or array of variables
33: */
34: public function getTemplateVars(
35: Smarty_Internal_Data $data,
36: $varName = null,
37: Smarty_Internal_Data $_ptr = null,
38: $searchParents = true
39: ) {
40: if (isset($varName)) {
41: $_var = $this->_getVariable($data, $varName, $_ptr, $searchParents, false);
42: if (is_object($_var)) {
43: return $_var->value;
44: } else {
45: return null;
46: }
47: } else {
48: $_result = array();
49: if ($_ptr === null) {
50: $_ptr = $data;
51: }
52: while ($_ptr !== null) {
53: foreach ($_ptr->tpl_vars as $key => $var) {
54: if (!array_key_exists($key, $_result)) {
55: $_result[ $key ] = $var->value;
56: }
57: }
58: // not found, try at parent
59: if ($searchParents && isset($_ptr->parent)) {
60: $_ptr = $_ptr->parent;
61: } else {
62: $_ptr = null;
63: }
64: }
65: if ($searchParents && isset(Smarty::$global_tpl_vars)) {
66: foreach (Smarty::$global_tpl_vars as $key => $var) {
67: if (!array_key_exists($key, $_result)) {
68: $_result[ $key ] = $var->value;
69: }
70: }
71: }
72: return $_result;
73: }
74: }
75:
76: /**
77: * gets the object of a Smarty variable
78: *
79: * @param \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty $data
80: * @param string $varName the name of the Smarty variable
81: * @param \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty $_ptr optional pointer to data object
82: * @param bool $searchParents search also in parent data
83: * @param bool $errorEnable
84: *
85: * @return \Smarty_Variable
86: */
87: public function _getVariable(
88: Smarty_Internal_Data $data,
89: $varName,
90: Smarty_Internal_Data $_ptr = null,
91: $searchParents = true,
92: $errorEnable = true
93: ) {
94: if ($_ptr === null) {
95: $_ptr = $data;
96: }
97: while ($_ptr !== null) {
98: if (isset($_ptr->tpl_vars[ $varName ])) {
99: // found it, return it
100: return $_ptr->tpl_vars[ $varName ];
101: }
102: // not found, try at parent
103: if ($searchParents && isset($_ptr->parent)) {
104: $_ptr = $_ptr->parent;
105: } else {
106: $_ptr = null;
107: }
108: }
109: if (isset(Smarty::$global_tpl_vars[ $varName ])) {
110: // found it, return it
111: return Smarty::$global_tpl_vars[ $varName ];
112: }
113: if ($errorEnable && $data->_getSmartyObj()->error_unassigned) {
114: // force a notice
115: $x = $$varName;
116: }
117: return new Smarty_Undefined_Variable;
118: }
119: }
120: