1: <?php
2:
3: /**
4: * Smarty Method RegisterFilter
5: *
6: * Smarty::registerFilter() method
7: *
8: * @package Smarty
9: * @subpackage PluginsInternal
10: * @author Uwe Tews
11: */
12: class Smarty_Internal_Method_RegisterFilter
13: {
14: /**
15: * Valid for Smarty and template object
16: *
17: * @var int
18: */
19: public $objMap = 3;
20:
21: /**
22: * Valid filter types
23: *
24: * @var array
25: */
26: private $filterTypes = array('pre' => true, 'post' => true, 'output' => true, 'variable' => true);
27:
28: /**
29: * Registers a filter function
30: *
31: * @api Smarty::registerFilter()
32: *
33: * @link http://www.smarty.net/docs/en/api.register.filter.tpl
34: *
35: * @param \Smarty_Internal_TemplateBase|\Smarty_Internal_Template|\Smarty $obj
36: * @param string $type filter type
37: * @param callback $callback
38: * @param string|null $name optional filter name
39: *
40: * @return \Smarty|\Smarty_Internal_Template
41: * @throws \SmartyException
42: */
43: public function registerFilter(Smarty_Internal_TemplateBase $obj, $type, $callback, $name = null)
44: {
45: $smarty = $obj->_getSmartyObj();
46: $this->_checkFilterType($type);
47: $name = isset($name) ? $name : $this->_getFilterName($callback);
48: if (!is_callable($callback)) {
49: throw new SmartyException("{$type}filter '{$name}' not callable");
50: }
51: $smarty->registered_filters[ $type ][ $name ] = $callback;
52: return $obj;
53: }
54:
55: /**
56: * Return internal filter name
57: *
58: * @param callback $function_name
59: *
60: * @return string internal filter name
61: */
62: public function _getFilterName($function_name)
63: {
64: if (is_array($function_name)) {
65: $_class_name = (is_object($function_name[ 0 ]) ? get_class($function_name[ 0 ]) : $function_name[ 0 ]);
66: return $_class_name . '_' . $function_name[ 1 ];
67: } elseif (is_string($function_name)) {
68: return $function_name;
69: } else {
70: return 'closure';
71: }
72: }
73:
74: /**
75: * Check if filter type is valid
76: *
77: * @param string $type
78: *
79: * @throws \SmartyException
80: */
81: public function _checkFilterType($type)
82: {
83: if (!isset($this->filterTypes[ $type ])) {
84: throw new SmartyException("Illegal filter type '{$type}'");
85: }
86: }
87: }
88: