Хранилища Subversion ant

Редакция

Содержимое файла | Последнее изменение | Открыть журнал | RSS

Редакция Автор № строки Строка
304 alex-w 1
<?php
2
 
3
/**
4
* Smarty Internal Plugin Handler
5
*
6
* @package Smarty
7
* @subpackage PluginsInternal
8
* @author Uwe Tews
9
*/
10
/**
11
* Smarty Internal Plugin Handler Class
12
*/
13
class Smarty_Internal_Plugin_Handler {
14
    function __construct($smarty)
15
    {
16
        $this->smarty = $smarty;
17
    }
18
    /**
19
    * Call a Smarty plugin
20
    *
21
    * @param string $name block function name
22
    * @param array $args $args[0] = array of plugin attributes and $args[1] = plugin types to search for
23
    */
24
    public function __call($name, $args)
25
    {
26
        if ($this->loadSmartyPlugin($name, $args[1])) {
27
            // call plugin
28
            return call_user_func_array($this->smarty->registered_plugins[$name][1], $args[0]);
29
        } else {
30
            // plugin not found
31
            throw new Exception("Unable to load plugin {$name}");
32
        }
33
    }
34
    public function executeModifier($name, $args, $check_array)
35
    {
36
        if ($this->loadSmartyPlugin($name, 'modifier')) {
37
            // call plugin
38
            if (!$check_array || !is_array($args[0])) {
39
                return call_user_func_array($this->smarty->registered_plugins[$name][1], $args);
40
            } else {
41
                $args0 = $args[0];
42
                foreach ($args0 as $key => $arg0) {
43
                    $args[0] = $arg0;
44
                    $result[$key] = call_user_func_array($this->smarty->registered_plugins[$name][1], $args);
45
                }
46
                return $result;
47
            }
48
        } elseif (is_callable($name)) {
49
            if (!$check_array || !is_array($args[0])) {
50
                return call_user_func_array($name, $args);
51
            } else {
52
                $args0 = $args[0];
53
                foreach ($args0 as $key => $arg0) {
54
                    $args[0] = $arg0;
55
                    $result[$key] = call_user_func_array($name, $args);
56
                }
57
                return $result;
58
            }
59
        } else {
60
            // plugin not found
61
            throw new Exception("Unable to load plugin {$name}");
62
        }
63
    }
64
    /**
65
    * Lazy loads plugin files
66
    * class name format: Smarty_PluginType_FuncName
67
    * plugin filename format: plugintype.funcname.php
68
    *
69
    * @param string $name plugin name
70
    * @param array $type array of plugin types to search for
71
    */
72
    public function loadSmartyPlugin($name, $type)
73
    {
74
        // load plugin if missing
75
        if (isset($this->smarty->registered_plugins[$name])) {
76
            return true;
77
        } else {
78
            foreach ((array)$type as $plugin_type) {
79
                $plugin = 'smarty_' . $plugin_type . '_' . $name;
80
                if ($this->smarty->loadPlugin($plugin)) {
81
                    if (class_exists($plugin, false)) {
82
                        $plugin = array(new $plugin, 'execute');
83
                    }
84
                    if (is_callable($plugin)) {
85
                        $this->smarty->registered_plugins[$name] = array($plugin_type, $plugin, true);
86
                        return true;
87
                    } else {
88
                        throw new Exception("Plugin \"{$name}\" not callable");
89
                    }
90
                }
91
            }
92
        }
93
        if (!empty($this->smarty->default_plugin_handler_func)) {
94
            if (!is_callable($this->smarty->default_plugin_handler_func)) {
95
                throw new Exception("Default template handler not callable");
96
            } else {
97
                return call_user_func_array($this->smarty->default_plugin_handler_func, array($name, $type, &$this));
98
            }
99
        }
100
        return false;
101
    }
102
}
103
 
104
?>