123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- <?php
-
- /**
- * Smarty Extension handler
- *
- * Load extensions dynamically
- *
- *
- * @package Smarty
- * @subpackage PluginsInternal
- * @author Uwe Tews
- *
- * @property Smarty_Internal_Runtime_Inheritance $_inheritance
- * @property Smarty_Internal_Runtime_SubTemplate $_subTemplate
- * @property Smarty_Internal_Runtime_TplFunction $_tplFunction
- * @property Smarty_Internal_Runtime_Var $_var
- * @property Smarty_Internal_Runtime_Config $_config
- * @property Smarty_Internal_Runtime_Foreach $_foreach
- * @property Smarty_Internal_Runtime_Hhvm $_hhvm
- * @property Smarty_Internal_Runtime_WriteFile $_writeFile
- * @property Smarty_Internal_Runtime_ValidateCompiled $_validateCompiled
- * @property Smarty_Internal_Runtime_CodeFrame $_codeFrame
- * @property Smarty_Internal_Runtime_FilterHandler $_filterHandler
- * @property Smarty_Internal_Runtime_GetIncludePath $_getIncludePath
- * @property Smarty_Internal_Runtime_UpdateScope $_updateScope
- * @property Smarty_Internal_Runtime_IsCached $_isCached
- * @property Smarty_Internal_Runtime_CacheModify $_cacheModify
- * @property Smarty_Internal_Runtime_UpdateCache $_updateCache
- * @property Smarty_Internal_Method_GetTemplateVars $getTemplateVars
- * @property Smarty_Internal_Method_Append $append
- * @property Smarty_Internal_Method_AppendByRef $appendByRef
- * @property Smarty_Internal_Method_AssignGlobal $assignGlobal
- * @property Smarty_Internal_Method_AssignByRef $assignByRef
- * @property Smarty_Internal_Method_LoadFilter $loadFilter
- * @property Smarty_Internal_Method_LoadPlugin $loadPlugin
- * @property Smarty_Internal_Method_RegisterFilter $registerFilter
- * @property Smarty_Internal_Method_RegisterObject $registerObject
- * @property Smarty_Internal_Method_RegisterPlugin $registerPlugin
- */
- class Smarty_Internal_Extension_Handler
- {
-
- public $objType = null;
-
- /**
- * Cache for property information from generic getter/setter
- * Preloaded with names which should not use with generic getter/setter
- *
- * @var array
- */
- private $_property_info = array('AutoloadFilters' => 0, 'DefaultModifiers' => 0, 'ConfigVars' => 0,
- 'DebugTemplate' => 0, 'RegisteredObject' => 0, 'StreamVariable' => 0,
- 'TemplateVars' => 0,);#
-
- private $resolvedProperties = array();
-
- /**
- * Call external Method
- *
- * @param \Smarty_Internal_Data $data
- * @param string $name external method names
- * @param array $args argument array
- *
- * @return mixed
- * @throws SmartyException
- */
- public function _callExternalMethod(Smarty_Internal_Data $data, $name, $args)
- {
- /* @var Smarty $data ->smarty */
- $smarty = isset($data->smarty) ? $data->smarty : $data;
- if (!isset($smarty->ext->$name)) {
- $class = 'Smarty_Internal_Method_' . ucfirst($name);
- if (preg_match('/^(set|get)([A-Z].*)$/', $name, $match)) {
- if (!isset($this->_property_info[$prop = $match[2]])) {
- // convert camel case to underscored name
- $this->resolvedProperties[$prop] = $pn = strtolower(join('_',
- preg_split('/([A-Z][^A-Z]*)/', $prop, - 1,
- PREG_SPLIT_NO_EMPTY |
- PREG_SPLIT_DELIM_CAPTURE)));
- $this->_property_info[$prop] = property_exists($data, $pn) ? 1 :
- ($data->_objType == 2 && property_exists($smarty, $pn) ? 2 : 0);
- }
- if ($this->_property_info[$prop]) {
- $pn = $this->resolvedProperties[$prop];
- if ($match[1] == 'get') {
- return $this->_property_info[$prop] == 1 ? $data->$pn : $data->smarty->$pn;
- } else {
- return $this->_property_info[$prop] == 1 ? $data->$pn = $args[0] :
- $data->smarty->$pn = $args[0];
- }
- } elseif (!class_exists($class)) {
- throw new SmartyException("property '$pn' does not exist.");
- }
- }
- if (class_exists($class)) {
- $callback = array($smarty->ext->$name = new $class(), $name);
- }
- } else {
- $callback = array($smarty->ext->$name, $name);
- }
- array_unshift($args, $data);
- if (isset($callback) && $callback[0]->objMap | $data->_objType) {
- return call_user_func_array($callback, $args);
- }
- return call_user_func_array(array(new Smarty_Internal_Undefined(), $name), $args);
- }
-
- /**
- * set extension property
- *
- * @param string $property_name property name
- * @param mixed $value value
- *
- * @throws SmartyException
- */
- public function __set($property_name, $value)
- {
- $this->$property_name = $value;
- }
-
- /**
- * get extension object
- *
- * @param string $property_name property name
- *
- * @return mixed|Smarty_Template_Cached
- * @throws SmartyException
- */
- public function __get($property_name)
- {
- // object properties of runtime template extensions will start with '_'
- if ($property_name[0] == '_') {
- $class = 'Smarty_Internal_Runtime_' . ucfirst(substr($property_name, 1));
- } else {
- $class = 'Smarty_Internal_Method_' . ucfirst($property_name);
- }
- if (class_exists($class)) {
- return $this->$property_name = new $class();
- }
- return $this;
- }
-
- /**
- * Call error handler for undefined method
- *
- * @param string $name unknown method-name
- * @param array $args argument array
- *
- * @return mixed
- * @throws SmartyException
- */
- public function __call($name, $args)
- {
- return call_user_func_array(array(new Smarty_Internal_Undefined(), $name), $args);
- }
-
- }
|