aboutsummaryrefslogtreecommitdiffstats
path: root/include/smarty/libs/sysplugins/smarty_internal_runtime_filterhandler.php
diff options
context:
space:
mode:
Diffstat (limited to 'include/smarty/libs/sysplugins/smarty_internal_runtime_filterhandler.php')
-rw-r--r--include/smarty/libs/sysplugins/smarty_internal_runtime_filterhandler.php73
1 files changed, 73 insertions, 0 deletions
diff --git a/include/smarty/libs/sysplugins/smarty_internal_runtime_filterhandler.php b/include/smarty/libs/sysplugins/smarty_internal_runtime_filterhandler.php
new file mode 100644
index 000000000..4b664c38e
--- /dev/null
+++ b/include/smarty/libs/sysplugins/smarty_internal_runtime_filterhandler.php
@@ -0,0 +1,73 @@
+<?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_Runtime_FilterHandler
+{
+ /**
+ * 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 function runFilter($type, $content, Smarty_Internal_Template $template)
+ {
+ // 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 (function_exists($plugin_name)) {
+ $callback = $plugin_name;
+ } elseif (class_exists($plugin_name, false) && is_callable(array($plugin_name, 'execute'))) {
+ $callback = array($plugin_name, 'execute');
+ } elseif ($template->smarty->loadPlugin($plugin_name, false)) {
+ if (function_exists($plugin_name)) {
+ // use loaded Smarty2 style plugin
+ $callback = $plugin_name;
+ } elseif (class_exists($plugin_name, false) && is_callable(array($plugin_name, 'execute'))) {
+ // loaded class of filter plugin
+ $callback = array($plugin_name, 'execute');
+ } else {
+ throw new SmartyException("Auto load {$type}-filter plugin method \"{$plugin_name}::execute\" not callable");
+ }
+ } else {
+ // nothing found, throw exception
+ throw new SmartyException("Unable to auto load {$type}-filter plugin \"{$plugin_name}\"");
+ }
+ $content = call_user_func($callback, $content, $template);
+ }
+ }
+ // loop over registered 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])) {
+ $content = call_user_func($template->smarty->registered_filters[$type][$key], $content, $template);
+ } else {
+ $content = $template->smarty->registered_filters[$type][$key]($content, $template);
+ }
+ }
+ }
+ // return filtered output
+ return $content;
+ }
+}