From c6a760fa7e6707321c926874a9f33ff75b8d9028 Mon Sep 17 00:00:00 2001 From: danilo Date: Mon, 18 Jun 2007 14:29:00 +0000 Subject: [PATCH] Added the ability to (un)register multiple filters of the same type with the same method name but different class name. Before it was not possible due to the fact that only the method name was used to distinguish between different filters of the same type. This does however not allow (same as before) to register multiple filters of the same type with the same method and class name (i.e. different instances of the same class). --- NEWS | 6 ++++++ libs/Smarty.class.php | 46 +++++++++++++++++++++++++++++-------------- 2 files changed, 37 insertions(+), 15 deletions(-) diff --git a/NEWS b/NEWS index 78486ea6..e99739a2 100644 --- a/NEWS +++ b/NEWS @@ -1,5 +1,11 @@ +- fix when (un)registering filters with the same method name but different class + name (danilo) - fix calling registered objects' methods with an empty argument list (marcello, messju) + +Version 2.6.18 (Mar 7th, 2007) +------------------------------ + - fix html_select_date separator when parts are missing (hayk, monte) - fix broken detection of non-cached blocks introduced in 2.6.17 diff --git a/libs/Smarty.class.php b/libs/Smarty.class.php index e8d979fc..b68c0247 100644 --- a/libs/Smarty.class.php +++ b/libs/Smarty.class.php @@ -838,69 +838,66 @@ class Smarty * Registers a prefilter function to apply * to a template before compiling * - * @param string $function name of PHP function to register + * @param callback $function */ function register_prefilter($function) { - $_name = (is_array($function)) ? $function[1] : $function; - $this->_plugins['prefilter'][$_name] + $this->_plugins['prefilter'][$this->_get_filter_name($function)] = array($function, null, null, false); } /** * Unregisters a prefilter function * - * @param string $function name of PHP function + * @param callback $function */ function unregister_prefilter($function) { - unset($this->_plugins['prefilter'][$function]); + unset($this->_plugins['prefilter'][$this->_get_filter_name($function)]); } /** * Registers a postfilter function to apply * to a compiled template after compilation * - * @param string $function name of PHP function to register + * @param callback $function */ function register_postfilter($function) { - $_name = (is_array($function)) ? $function[1] : $function; - $this->_plugins['postfilter'][$_name] + $this->_plugins['postfilter'][$this->_get_filter_name($function)] = array($function, null, null, false); } /** * Unregisters a postfilter function * - * @param string $function name of PHP function + * @param callback $function */ function unregister_postfilter($function) { - unset($this->_plugins['postfilter'][$function]); + unset($this->_plugins['postfilter'][$this->_get_filter_name($function)]); } /** * Registers an output filter function to apply * to a template output * - * @param string $function name of PHP function + * @param callback $function */ function register_outputfilter($function) { - $_name = (is_array($function)) ? $function[1] : $function; - $this->_plugins['outputfilter'][$_name] + $this->_plugins['outputfilter'][$this->_get_filter_name($function)] = array($function, null, null, false); } /** * Unregisters an outputfilter function * - * @param string $function name of PHP function + * @param callback $function */ function unregister_outputfilter($function) { - unset($this->_plugins['outputfilter'][$function]); + unset($this->_plugins['outputfilter'][$this->_get_filter_name($function)]); } /** @@ -1935,6 +1932,25 @@ class Smarty { return eval($code); } + + /** + * Extracts the filter name from the given callback + * + * @param callback $function + * @return string + */ + function _get_filter_name($function) + { + if (is_array($function)) { + $_class_name = (is_object($function[0]) ? + get_class($function[0]) : $function[0]); + return $_class_name . '_' . $function[1]; + } + else { + return $function; + } + } + /**#@-*/ }