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: