Expression call-back functions are now externalized in own PHP script, redirect had...
[mailer.git] / inc / filters.php
index 35ff120eb7067af5178da838051dafbb9822e897..fd55e5785abbc2c10312add003fcb4cde87837d5 100644 (file)
@@ -445,7 +445,7 @@ function FILTER_COMPILE_CONFIG ($code, $compiled = false) {
 
 // Filter for compiling expression code
 function FILTER_COMPILE_EXPRESSION_CODE ($code) {
-       // Compile {%cmd=some_value%} to get expression code snippets
+       // Compile {%cmd,callback,extraFunction=some_value%} to get expression code snippets
        // See switch() command below for supported commands
        preg_match_all('/\{%(([a-zA-Z0-9-_,]+)(=([^\}]+)){0,1})*%\}/', $code, $matches);
        //* DEBUG: */ print('<pre>'.print_r($matches, true).'</pre>');
@@ -465,108 +465,29 @@ function FILTER_COMPILE_EXPRESSION_CODE ($code) {
                        // Extract command and call-back
                        $cmdArray = explode(',', $cmd);
                        $cmd = $cmdArray[0];
-                       if (isset($cmdArray[1])) $callback = $cmdArray[1];
+                       if (isset($cmdArray[1])) $callback      = $cmdArray[1];
                        if (isset($cmdArray[2])) $extraFunction = $cmdArray[2];
 
-                       // Is the extension installed or code provided?
-                       // @TODO This whole switch-block is very static
-                       switch ($cmd) {
-                               case 'code': // Code asked for
-                                       $code = str_replace($matches[0][$key], "\" . getCode('" . $matches[4][$key] . "') . \"", $code);
-                                       break;
-
-                               case 'url':
-                                       // Do we have JS-mode?
-                                       if (substr($cmd, -2, 2) == 'js') $outputMode = 1;
-
-                                       // Handle an URL here
-                                       $replacer = "\" . encodeUrl(\"" . $matches[4][$key] . "\", " . $outputMode . ") . \"";
-
-                                       // Replace it
-                                       $code = str_replace($matches[0][$key], $replacer, $code);
-                                       break;
-
-                               case 'server':
-                                       // This will make 'foo_bar' to detectFooBar()
-                                       $functionName = "'detect' . implode('', array_map('ucfirst', explode('_', '" . $callback . "')))";
-
-                                       // Replace it
-                                       $code = str_replace($matches[0][$key], "\" . call_user_func(" . $functionName . ") . \"", $code);
-                                       break;
-
-                               case 'user':
-                                       // Use current userid by default
-                                       $functionName = 'getMemberId()';
-
-                                       // User-related data, so is there a userid?
-                                       if (!empty($matches[4][$key])) {
-                                               // Do we have a userid or $userid?
-                                               if ($matches[4][$key] == '$userid') {
-                                                       // Use dynamic call
-                                                       $functionName = "getFetchedUserData('userid', \$userid, '" . $callback . "')";
-                                               } elseif ($matches[4][$key] > 0) {
-                                                       // User data found
-                                                       $functionName = "getFetchedUserData('userid', " . $matches[4][$key] . ", " . $callback . "')";
-                                               } // END - if
-                                       } elseif ((!empty($callback)) && (isUserDataValid())) {
-                                               // "Call-back" alias column for current logged in user's data
-                                               $functionName = "getUserData('" . $callback . "')";
-                                       }
-
-                                       // Do we have another function to run (e.g. translations)
-                                       if (!empty($extraFunction)) {
-                                               // Surround the original function call with it
-                                               $functionName = $extraFunction . '(' . $functionName . ')';
-                                       } // END - if
-
-                                       // Now replace the code
-                                       $code = str_replace($matches[0][$key], "\" . " . $functionName . " . \"", $code);
-                                       break;
-
-                               case 'ext':
-                                       // Not installed is default
-                                       $replacer = 'false';
-
-                                       // Is the extension installed?
-                                       if (isExtensionInstalled($matches[4][$key])) {
-                                               // Construct call-back function name
-                                               $functionName = 'getExtension' . ucfirst(strtolower($callback));
-
-                                               // Construct call of the function
-                                               $replacer = "\" . call_user_func_array('" . $functionName . "', array('" . $matches[4][$key] . "', true)) . \"";
-                                       } // END - if
-
-                                       // Replace it and insert parameter for GET request
-                                       $code = str_replace($matches[0][$key], sprintf("&amp;ext=%s&amp;ver=%s&amp;rev=\" . getConfig('CURR_SVN_REVISION') . \"", $matches[4][$key], $replacer), $code);
-                                       break;
-
-                               case 'config': // @TODO FILTER_COMPILE_CONFIG does not handle call-back functions so we handle it here again
-                                       // Read configuration
-                                       $configValue = getConfig($matches[4][$key]);
-
-                                       // Do we have a call-back?
-                                       if (!empty($callback)) {
-                                               // Parse it through this function
-                                               $configValue = call_user_func_array($callback, array($configValue));
-                                       } // END - if
-
-                                       // Replace the config entry
-                                       $code = str_replace($matches[0][$key], $configValue, $code);
-                                       break;
-
-                               case 'filter':
-                                       // Construct replacement
-                                       $replacer = "\" . runFilterChain('" . $matches[4][$key] . "') . \"";
-
-                                       // Run the filter and insert result
-                                       $code = str_replace($matches[0][$key], $replacer, $code);
-                                       break;
-
-                               default:
-                                       // Unsupported command detected
-                                       debug_report_bug('Command=' . $cmd . ', callback=' . $callback . ', extra=' . $extraFunction . ' is unsupported.');
-                                       break;
-                       } // END - switch
+                       // Construct call-back function name for the command
+                       $commandFunction = 'doExpression' . ucfirst(strtolower($cmd));
+
+                       // Is this function there?
+                       if (function_exists($commandFunction)) {
+                               // Prepare $matches, $key, $outputMode, etc.
+                               $data = array(
+                                       'matches'  => $matches,
+                                       'key'      => $key,
+                                       'mode'     => $outputMode,
+                                       'code'     => $code,
+                                       'callback' => $callback
+                               );
+
+                               // Call it
+                               $code = call_user_func($commandFunction, $data);
+                       } else {
+                               // Unsupported command detected
+                               debug_report_bug('Command=' . $cmd . ', callback=' . $callback . ', extra=' . $extraFunction . ' is unsupported.');
+                       }
                } // END - foreach
        } // END - if