Subversion Repositories ALCASAR

Rev

Details | Last modification | View Log

Rev Author Line No. Line
2809 rexy 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
}