1: <?php
2: /**
3: * Smarty Internal Plugin Filter Handler
4: * Smarty filter handler class
5: *
6: * @package Smarty
7: * @subpackage PluginsInternal
8: * @author Uwe Tews
9: */
10:
11: /**
12: * Class for filter processing
13: *
14: * @package Smarty
15: * @subpackage PluginsInternal
16: */
17: class Smarty_Internal_Runtime_FilterHandler
18: {
19: /**
20: * Run filters over content
21: * The filters will be lazy loaded if required
22: * class name format: Smarty_FilterType_FilterName
23: * plugin filename format: filtertype.filtername.php
24: * Smarty2 filter plugins could be used
25: *
26: * @param string $type the type of filter ('pre','post','output') which shall run
27: * @param string $content the content which shall be processed by the filters
28: * @param Smarty_Internal_Template $template template object
29: *
30: * @throws SmartyException
31: * @return string the filtered content
32: */
33: public function runFilter($type, $content, Smarty_Internal_Template $template)
34: {
35: // loop over autoload filters of specified type
36: if (!empty($template->smarty->autoload_filters[ $type ])) {
37: foreach ((array)$template->smarty->autoload_filters[ $type ] as $name) {
38: $plugin_name = "Smarty_{$type}filter_{$name}";
39: if (function_exists($plugin_name)) {
40: $callback = $plugin_name;
41: } elseif (class_exists($plugin_name, false) && is_callable(array($plugin_name, 'execute'))) {
42: $callback = array($plugin_name, 'execute');
43: } elseif ($template->smarty->loadPlugin($plugin_name, false)) {
44: if (function_exists($plugin_name)) {
45: // use loaded Smarty2 style plugin
46: $callback = $plugin_name;
47: } elseif (class_exists($plugin_name, false) && is_callable(array($plugin_name, 'execute'))) {
48: // loaded class of filter plugin
49: $callback = array($plugin_name, 'execute');
50: } else {
51: throw new SmartyException("Auto load {$type}-filter plugin method '{$plugin_name}::execute' not callable");
52: }
53: } else {
54: // nothing found, throw exception
55: throw new SmartyException("Unable to auto load {$type}-filter plugin '{$plugin_name}'");
56: }
57: $content = call_user_func($callback, $content, $template);
58: }
59: }
60: // loop over registered filters of specified type
61: if (!empty($template->smarty->registered_filters[ $type ])) {
62: foreach ($template->smarty->registered_filters[ $type ] as $key => $name) {
63: $content = call_user_func($template->smarty->registered_filters[ $type ][ $key ], $content, $template);
64: }
65: }
66: // return filtered output
67: return $content;
68: }
69: }
70: