<?php 
/** 
 * Smarty Internal Plugin Filter Handler 
 * Smarty filter handler class 
 * 
 * @package    Smarty 
 * @subpackage PluginsInternal 
 * @author     Uwe Tews 
 */ 
 
/** 
 * Class for filter processing 
 * 
 * @package    Smarty 
 * @subpackage PluginsInternal 
 */ 
class Smarty_Internal_Filter_Handler 
{ 
    /** 
     * Run filters over content 
     * The filters will be lazy loaded if required 
     * class name format: Smarty_FilterType_FilterName 
     * plugin filename format: filtertype.filtername.php 
     * Smarty2 filter plugins could be used 
     * 
     * @param  string                   $type     the type of filter ('pre','post','output') which shall run 
     * @param  string                   $content  the content which shall be processed by the filters 
     * @param  Smarty_Internal_Template $template template object 
     * 
     * @throws SmartyException 
     * @return string                   the filtered content 
     */ 
    public static function runFilter($type, $content, Smarty_Internal_Template $template) 
    { 
        $output = $content; 
        // loop over autoload filters of specified type 
        if (!empty($template->smarty->autoload_filters[$type])) { 
            foreach ((array) $template->smarty->autoload_filters[$type] as $name) { 
                $plugin_name = "Smarty_{$type}filter_{$name}"; 
                if ($template->smarty->loadPlugin($plugin_name)) { 
                    if (function_exists($plugin_name)) { 
                        // use loaded Smarty2 style plugin 
                        $output = $plugin_name($output, $template); 
                    } elseif (class_exists($plugin_name, false)) { 
                        // loaded class of filter plugin 
                        $output = call_user_func(array($plugin_name, 'execute'), $output, $template); 
                    } 
                } else { 
                    // nothing found, throw exception 
                    throw new SmartyException("Unable to load filter {$plugin_name}"); 
                } 
            } 
        } 
        // loop over registerd filters of specified type 
        if (!empty($template->smarty->registered_filters[$type])) { 
            foreach ($template->smarty->registered_filters[$type] as $key => $name) { 
                if (is_array($template->smarty->registered_filters[$type][$key])) { 
                    $output = call_user_func($template->smarty->registered_filters[$type][$key], $output, $template); 
                } else { 
                    $output = $template->smarty->registered_filters[$type][$key]($output, $template); 
                } 
            } 
        } 
        // return filtered output 
        return $output; 
    } 
} 
 
 |