1: | <?php |
2: | /** |
3: | * Smarty Internal Plugin Data |
4: | * This file contains the basic classes and methods for template and variable creation |
5: | * |
6: | * @package Smarty |
7: | * @subpackage Template |
8: | * @author Uwe Tews |
9: | */ |
10: | |
11: | /** |
12: | * Base class with template and variable methods |
13: | * |
14: | * @package Smarty |
15: | * @subpackage Template |
16: | * |
17: | * @property int $scope |
18: | * @property Smarty $smarty |
19: | * The following methods will be dynamically loaded by the extension handler when they are called. |
20: | * They are located in a corresponding Smarty_Internal_Method_xxxx class |
21: | * |
22: | * @method mixed _getConfigVariable(string $varName, bool $errorEnable = true) |
23: | * @method mixed getConfigVariable(string $varName, bool $errorEnable = true) |
24: | * @method mixed getConfigVars(string $varName = null, bool $searchParents = true) |
25: | * @method mixed getGlobal(string $varName = null) |
26: | * @method mixed getStreamVariable(string $variable) |
27: | * @method Smarty_Internal_Data clearAssign(mixed $tpl_var) |
28: | * @method Smarty_Internal_Data clearAllAssign() |
29: | * @method Smarty_Internal_Data clearConfig(string $varName = null) |
30: | * @method Smarty_Internal_Data configLoad(string $config_file, mixed $sections = null, string $scope = 'local') |
31: | */ |
32: | abstract class Smarty_Internal_Data |
33: | { |
34: | /** |
35: | * This object type (Smarty = 1, template = 2, data = 4) |
36: | * |
37: | * @var int |
38: | */ |
39: | public $_objType = 4; |
40: | |
41: | /** |
42: | * name of class used for templates |
43: | * |
44: | * @var string |
45: | */ |
46: | public $template_class = 'Smarty_Internal_Template'; |
47: | |
48: | /** |
49: | * template variables |
50: | * |
51: | * @var Smarty_Variable[] |
52: | */ |
53: | public $tpl_vars = array(); |
54: | |
55: | /** |
56: | * parent template (if any) |
57: | * |
58: | * @var Smarty|Smarty_Internal_Template|Smarty_Data |
59: | */ |
60: | public $parent = null; |
61: | |
62: | /** |
63: | * configuration settings |
64: | * |
65: | * @var string[] |
66: | */ |
67: | public $config_vars = array(); |
68: | |
69: | /** |
70: | * extension handler |
71: | * |
72: | * @var Smarty_Internal_Extension_Handler |
73: | */ |
74: | public $ext = null; |
75: | |
76: | /** |
77: | * Smarty_Internal_Data constructor. |
78: | * |
79: | * Install extension handler |
80: | */ |
81: | public function __construct() |
82: | { |
83: | $this->ext = new Smarty_Internal_Extension_Handler(); |
84: | $this->ext->objType = $this->_objType; |
85: | } |
86: | |
87: | /** |
88: | * assigns a Smarty variable |
89: | * |
90: | * @param array|string $tpl_var the template variable name(s) |
91: | * @param mixed $value the value to assign |
92: | * @param boolean $nocache if true any output of this variable will be not cached |
93: | * |
94: | * @return Smarty_Internal_Data current Smarty_Internal_Data (or Smarty or Smarty_Internal_Template) instance for |
95: | * chaining |
96: | */ |
97: | public function assign($tpl_var, $value = null, $nocache = false) |
98: | { |
99: | if (is_array($tpl_var)) { |
100: | foreach ($tpl_var as $_key => $_val) { |
101: | $this->assign($_key, $_val, $nocache); |
102: | } |
103: | } else { |
104: | if ($tpl_var !== '') { |
105: | if ($this->_objType === 2) { |
106: | /** |
107: | * |
108: | * |
109: | * @var Smarty_Internal_Template $this |
110: | */ |
111: | $this->_assignInScope($tpl_var, $value, $nocache); |
112: | } else { |
113: | $this->tpl_vars[ $tpl_var ] = new Smarty_Variable($value, $nocache); |
114: | } |
115: | } |
116: | } |
117: | return $this; |
118: | } |
119: | |
120: | /** |
121: | * appends values to template variables |
122: | * |
123: | * @api Smarty::append() |
124: | * @link http://www.smarty.net/docs/en/api.append.tpl |
125: | * |
126: | * @param array|string $tpl_var the template variable name(s) |
127: | * @param mixed $value the value to append |
128: | * @param bool $merge flag if array elements shall be merged |
129: | * @param bool $nocache if true any output of this variable will |
130: | * be not cached |
131: | * |
132: | * @return \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty |
133: | */ |
134: | public function append($tpl_var, $value = null, $merge = false, $nocache = false) |
135: | { |
136: | return $this->ext->append->append($this, $tpl_var, $value, $merge, $nocache); |
137: | } |
138: | |
139: | /** |
140: | * assigns a global Smarty variable |
141: | * |
142: | * @param string $varName the global variable name |
143: | * @param mixed $value the value to assign |
144: | * @param boolean $nocache if true any output of this variable will be not cached |
145: | * |
146: | * @return \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty |
147: | */ |
148: | public function assignGlobal($varName, $value = null, $nocache = false) |
149: | { |
150: | return $this->ext->assignGlobal->assignGlobal($this, $varName, $value, $nocache); |
151: | } |
152: | |
153: | /** |
154: | * appends values to template variables by reference |
155: | * |
156: | * @param string $tpl_var the template variable name |
157: | * @param mixed &$value the referenced value to append |
158: | * @param boolean $merge flag if array elements shall be merged |
159: | * |
160: | * @return \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty |
161: | */ |
162: | public function appendByRef($tpl_var, &$value, $merge = false) |
163: | { |
164: | return $this->ext->appendByRef->appendByRef($this, $tpl_var, $value, $merge); |
165: | } |
166: | |
167: | /** |
168: | * assigns values to template variables by reference |
169: | * |
170: | * @param string $tpl_var the template variable name |
171: | * @param $value |
172: | * @param boolean $nocache if true any output of this variable will be not cached |
173: | * |
174: | * @return \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty |
175: | */ |
176: | public function assignByRef($tpl_var, &$value, $nocache = false) |
177: | { |
178: | return $this->ext->assignByRef->assignByRef($this, $tpl_var, $value, $nocache); |
179: | } |
180: | |
181: | /** |
182: | * Returns a single or all template variables |
183: | * |
184: | * @api Smarty::getTemplateVars() |
185: | * @link http://www.smarty.net/docs/en/api.get.template.vars.tpl |
186: | * |
187: | * @param string $varName variable name or null |
188: | * @param \Smarty_Internal_Data|\Smarty_Internal_Template|\Smarty $_ptr optional pointer to data object |
189: | * @param bool $searchParents include parent templates? |
190: | * |
191: | * @return mixed variable value or or array of variables |
192: | */ |
193: | public function getTemplateVars($varName = null, Smarty_Internal_Data $_ptr = null, $searchParents = true) |
194: | { |
195: | return $this->ext->getTemplateVars->getTemplateVars($this, $varName, $_ptr, $searchParents); |
196: | } |
197: | |
198: | /** |
199: | * gets the object of a Smarty variable |
200: | * |
201: | * @param string $variable the name of the Smarty variable |
202: | * @param Smarty_Internal_Data $_ptr optional pointer to data object |
203: | * @param boolean $searchParents search also in parent data |
204: | * @param bool $error_enable |
205: | * |
206: | * @return Smarty_Variable|Smarty_Undefined_Variable the object of the variable |
207: | * @deprecated since 3.1.28 please use Smarty_Internal_Data::getTemplateVars() instead. |
208: | */ |
209: | public function getVariable( |
210: | $variable = null, |
211: | Smarty_Internal_Data $_ptr = null, |
212: | $searchParents = true, |
213: | $error_enable = true |
214: | ) { |
215: | return $this->ext->getTemplateVars->_getVariable($this, $variable, $_ptr, $searchParents, $error_enable); |
216: | } |
217: | |
218: | /** |
219: | * Follow the parent chain an merge template and config variables |
220: | * |
221: | * @param \Smarty_Internal_Data|null $data |
222: | */ |
223: | public function _mergeVars(Smarty_Internal_Data $data = null) |
224: | { |
225: | if (isset($data)) { |
226: | if (!empty($this->tpl_vars)) { |
227: | $data->tpl_vars = array_merge($this->tpl_vars, $data->tpl_vars); |
228: | } |
229: | if (!empty($this->config_vars)) { |
230: | $data->config_vars = array_merge($this->config_vars, $data->config_vars); |
231: | } |
232: | } else { |
233: | $data = $this; |
234: | } |
235: | if (isset($this->parent)) { |
236: | $this->parent->_mergeVars($data); |
237: | } |
238: | } |
239: | |
240: | /** |
241: | * Return true if this instance is a Data obj |
242: | * |
243: | * @return bool |
244: | */ |
245: | public function _isDataObj() |
246: | { |
247: | return $this->_objType === 4; |
248: | } |
249: | |
250: | /** |
251: | * Return true if this instance is a template obj |
252: | * |
253: | * @return bool |
254: | */ |
255: | public function _isTplObj() |
256: | { |
257: | return $this->_objType === 2; |
258: | } |
259: | |
260: | /** |
261: | * Return true if this instance is a Smarty obj |
262: | * |
263: | * @return bool |
264: | */ |
265: | public function _isSmartyObj() |
266: | { |
267: | return $this->_objType === 1; |
268: | } |
269: | |
270: | /** |
271: | * Get Smarty object |
272: | * |
273: | * @return Smarty |
274: | */ |
275: | public function _getSmartyObj() |
276: | { |
277: | return $this->smarty; |
278: | } |
279: | |
280: | /** |
281: | * Handle unknown class methods |
282: | * |
283: | * @param string $name unknown method-name |
284: | * @param array $args argument array |
285: | * |
286: | * @return mixed |
287: | */ |
288: | public function __call($name, $args) |
289: | { |
290: | return $this->ext->_callExternalMethod($this, $name, $args); |
291: | } |
292: | } |
293: |