mirror of
				https://github.com/smarty-php/smarty.git
				synced 2025-11-04 06:11:37 +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;
 | 
						|
    } 
 | 
						|
} 
 | 
						|
 | 
						|
?>
 |