mirror of
				https://github.com/smarty-php/smarty.git
				synced 2025-10-26 18:01:36 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			105 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			105 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| /**
 | |
| * Smarty Internal Plugin Handler
 | |
| * 
 | |
| * @package Smarty
 | |
| * @subpackage PluginsInternal
 | |
| * @author Uwe Tews 
 | |
| */
 | |
| /**
 | |
| * Smarty Internal Plugin Handler Class
 | |
| */
 | |
| class Smarty_Internal_Plugin_Handler {
 | |
|     function __construct($smarty)
 | |
|     {
 | |
|         $this->smarty = $smarty;
 | |
|     } 
 | |
|     /**
 | |
|     * Call a Smarty plugin
 | |
|     * 
 | |
|     * @param string $name block function name
 | |
|     * @param array $args $args[0] = array of plugin attributes and $args[1] = plugin types to search for
 | |
|     */
 | |
|     public function __call($name, $args)
 | |
|     {
 | |
|         if ($this->loadSmartyPlugin($name, $args[1])) {
 | |
|             // call plugin
 | |
|             return call_user_func_array($this->smarty->registered_plugins[$name][1], $args[0]);
 | |
|         } else {
 | |
|             // plugin not found
 | |
|             throw new Exception("Unable to load plugin {$name}");
 | |
|         } 
 | |
|     } 
 | |
|     public function executeModifier($name, $args, $check_array)
 | |
|     {
 | |
|         if ($this->loadSmartyPlugin($name, 'modifier')) {
 | |
|             // call plugin
 | |
|             if (!$check_array || !is_array($args[0])) {
 | |
|                 return call_user_func_array($this->smarty->registered_plugins[$name][1], $args);
 | |
|             } else {
 | |
|                 $args0 = $args[0];
 | |
|                 foreach ($args0 as $key => $arg0) {
 | |
|                     $args[0] = $arg0;
 | |
|                     $result[$key] = call_user_func_array($this->smarty->registered_plugins[$name][1], $args);
 | |
|                 } 
 | |
|                 return $result;
 | |
|             } 
 | |
|         } elseif (is_callable($name)) {
 | |
|             if (!$check_array || !is_array($args[0])) {
 | |
|                 return call_user_func_array($name, $args);
 | |
|             } else {
 | |
|                 $args0 = $args[0];
 | |
|                 foreach ($args0 as $key => $arg0) {
 | |
|                     $args[0] = $arg0;
 | |
|                     $result[$key] = call_user_func_array($name, $args);
 | |
|                 } 
 | |
|                 return $result;
 | |
|             } 
 | |
|         } else {
 | |
|             // plugin not found
 | |
|             throw new Exception("Unable to load plugin {$name}");
 | |
|         } 
 | |
|     } 
 | |
|     /**
 | |
|     * Lazy loads plugin files
 | |
|     * class name format: Smarty_PluginType_FuncName
 | |
|     * plugin filename format: plugintype.funcname.php
 | |
|     * 
 | |
|     * @param string $name plugin name
 | |
|     * @param array $type array of plugin types to search for
 | |
|     */
 | |
|     public function loadSmartyPlugin($name, $type)
 | |
|     { 
 | |
|         // load plugin if missing
 | |
|         if (isset($this->smarty->registered_plugins[$name])) {
 | |
|             return true;
 | |
|         } else {
 | |
|             foreach ((array)$type as $plugin_type) {
 | |
|                 $plugin = 'smarty_' . $plugin_type . '_' . $name;
 | |
|                 if ($this->smarty->loadPlugin($plugin)) {
 | |
|                     if (class_exists($plugin, false)) {
 | |
|                         $plugin = array(new $plugin, 'execute');
 | |
|                     } 
 | |
|                     if (is_callable($plugin)) {
 | |
|                         $this->smarty->registered_plugins[$name] = array($plugin_type, $plugin, true);
 | |
|                         return true;
 | |
|                     } else {
 | |
|                         throw new Exception("Plugin \"{$name}\" not callable");
 | |
|                     } 
 | |
|                 } 
 | |
|             } 
 | |
|         } 
 | |
|         if (!empty($this->smarty->default_plugin_handler_func)) {
 | |
|             if (!is_callable($this->smarty->default_plugin_handler_func)) {
 | |
|                 throw new Exception("Default template handler not callable");
 | |
|             } else {
 | |
|                 return call_user_func_array($this->smarty->default_plugin_handler_func, array($name, $type, &$this));
 | |
|             } 
 | |
|         } 
 | |
|         return false;
 | |
|     } 
 | |
| } 
 | |
| 
 | |
| ?>
 |