mirror of
				https://github.com/smarty-php/smarty.git
				synced 2025-10-31 12:21:36 +01:00 
			
		
		
		
	
		
			
	
	
		
			110 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			110 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
|   | <?php | ||
|  | 
 | ||
|  | /** | ||
|  |  * Smarty Extension Object | ||
|  |  * | ||
|  |  * Register object methods | ||
|  |  * | ||
|  |  * @package    Smarty | ||
|  |  * @subpackage PluginsInternal | ||
|  |  * @author     Uwe Tews | ||
|  |  */ | ||
|  | class Smarty_Internal_Extension_Object | ||
|  | { | ||
|  |     /** | ||
|  |      * Registers object to be used in templates | ||
|  |      * | ||
|  |      * @param  \Smarty_Internal_Template|\Smarty $obj | ||
|  |      * @param  string                            $object_name | ||
|  |      * @param  object                            $object_impl   the referenced PHP object to register | ||
|  |      * @param  array                             $allowed       list of allowed methods (empty = all) | ||
|  |      * @param  boolean                           $smarty_args   smarty argument format, else traditional | ||
|  |      * @param  array                             $block_methods list of block-methods | ||
|  |      * | ||
|  |      * @return \Smarty_Internal_Templatebase | ||
|  |      * @throws \SmartyException | ||
|  |      */ | ||
|  |     static function registerObject($obj, $object_name, $object_impl, $allowed = array(), $smarty_args = true, $block_methods = array()) | ||
|  |     { | ||
|  |         // test if allowed methods callable
 | ||
|  |         if (!empty($allowed)) { | ||
|  |             foreach ((array) $allowed as $method) { | ||
|  |                 if (!is_callable(array($object_impl, $method)) && !property_exists($object_impl, $method)) { | ||
|  |                     throw new SmartyException("Undefined method or property '$method' in registered object"); | ||
|  |                 } | ||
|  |             } | ||
|  |         } | ||
|  |         // test if block methods callable
 | ||
|  |         if (!empty($block_methods)) { | ||
|  |             foreach ((array) $block_methods as $method) { | ||
|  |                 if (!is_callable(array($object_impl, $method))) { | ||
|  |                     throw new SmartyException("Undefined method '$method' in registered object"); | ||
|  |                 } | ||
|  |             } | ||
|  |         } | ||
|  |         // register the object
 | ||
|  |         $smarty = isset($obj->smarty) ? $obj->smarty : $obj; | ||
|  |         $smarty->registered_objects[$object_name] = array($object_impl, (array) $allowed, (boolean) $smarty_args, | ||
|  |             (array) $block_methods); | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * return a reference to a registered object | ||
|  |      * | ||
|  |      * @param  \Smarty_Internal_Template|\Smarty $obj | ||
|  |      * @param  string                            $name object name | ||
|  |      * | ||
|  |      * @return object | ||
|  |      * @throws \SmartyException if no such object is found | ||
|  |      */ | ||
|  |     static function getRegisteredObject($obj, $name) | ||
|  |     { | ||
|  |         $smarty = isset($obj->smarty) ? $obj->smarty : $obj; | ||
|  |         if (!isset($smarty->registered_objects[$name])) { | ||
|  |             throw new SmartyException("'$name' is not a registered object"); | ||
|  |         } | ||
|  |         if (!is_object($smarty->registered_objects[$name][0])) { | ||
|  |             throw new SmartyException("registered '$name' is not an object"); | ||
|  |         } | ||
|  |         return $smarty->registered_objects[$name][0]; | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * unregister an object | ||
|  |      * | ||
|  |      * @param  \Smarty_Internal_Template|\Smarty $obj | ||
|  |      * @param  string                            $name object name | ||
|  |      * | ||
|  |      * @return \Smarty_Internal_Templatebase current Smarty_Internal_Templatebase (or Smarty or | ||
|  |      *                                      Smarty_Internal_Template) instance for chaining | ||
|  |      */ | ||
|  |     static function unregisterObject($obj, $name) | ||
|  |     { | ||
|  |         $smarty = isset($obj->smarty) ? $obj->smarty : $obj; | ||
|  |         if (isset($smarty->registered_objects[$name])) { | ||
|  |             unset($smarty->registered_objects[$name]); | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * Registers static classes to be used in templates | ||
|  |      * | ||
|  |      * @param  \Smarty_Internal_Template|\Smarty $obj | ||
|  |      * @param  string                            $class_name | ||
|  |      * @param  string                            $class_impl the referenced PHP class to register | ||
|  |      * | ||
|  |      * @return \Smarty_Internal_Templatebase | ||
|  |      * @throws \SmartyException | ||
|  |      */ | ||
|  |     static function registerClass($obj, $class_name, $class_impl) | ||
|  |     { | ||
|  |         // test if exists
 | ||
|  |         if (!class_exists($class_impl)) { | ||
|  |             throw new SmartyException("Undefined class '$class_impl' in register template class"); | ||
|  |         } | ||
|  |         // register the class
 | ||
|  |         $smarty = isset($obj->smarty) ? $obj->smarty : $obj; | ||
|  |         $smarty->registered_classes[$class_name] = $class_impl; | ||
|  |     } | ||
|  | 
 | ||
|  | } |