X-Git-Url: https://git.mxchange.org/?p=mailer.git;a=blobdiff_plain;f=inc%2Ffilters.php;h=8cc35e42937455baa353d9e5aabc18c64ab59c02;hp=1b20ecccf7d5079f4bea58e06526df752d1e083b;hb=1bf7c189fda17ce6c702f600c0eb084b681a307b;hpb=03ba5e2fb6ea0b03d4286fa1cc6dcbbc23c7b3df diff --git a/inc/filters.php b/inc/filters.php index 1b20ecccf7..8cc35e4293 100644 --- a/inc/filters.php +++ b/inc/filters.php @@ -411,7 +411,7 @@ function FILTER_COMPILE_CONFIG ($code, $compiled = false) { $GLOBALS['compile_config'][$matches[1][$key]] = "\".getConfig('" . $matches[1][$key] . "').\""; } elseif (isConfigEntrySet('default_' . strtoupper($matches[1][$key]))) { // Use default value - $GLOBALS['compile_config'][$matches[1][$key]] = "\".getConfig('" . 'DEFAULT_' . strtoupper($matches[1][$key]) . "').\""; + $GLOBALS['compile_config'][$matches[1][$key]] = "\" . getConfig('" . 'DEFAULT_' . strtoupper($matches[1][$key]) . "') . \""; } elseif (isMessageIdValid('DEFAULT_' . strtoupper($matches[1][$key]))) { // No config, try the language system $GLOBALS['compile_config'][$matches[1][$key]] = "\" . getMessage('". 'DEFAULT_' . strtoupper($matches[1][$key]) . "') . \""; @@ -458,83 +458,107 @@ function FILTER_COMPILE_EXTENSION ($code) { if ((count($matches) > 0) && (count($matches[3]) > 0)) { // Replace all matches foreach ($matches[2] as $key => $cmd) { - // Init replacer variable + // Init replacer/call-back variable $replacer = ''; + $callback = ''; + $extraFunction = ''; + + // Extract command and call-back + $cmdArray = explode(',', $cmd); + $cmd = $cmdArray[0]; + if (isset($cmdArray[1])) $callback = $cmdArray[1]; + if (isset($cmdArray[2])) $extraFunction = $cmdArray[2]; // Is the extension installed or code provided? - // @TODO This whole if-block is very static - if ($cmd == 'code') { - // Code asked for - $code = str_replace($matches[0][$key], "\" . getCode('" . $matches[4][$key] . "') . \"", $code); - } elseif (substr($cmd, 0, 3) == '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); - } elseif (substr($cmd, 0, 6) == 'server') { - // Get data from $_SERVER by their respective functions - $serverCmd = explode(',', $cmd); - $serverCmd = $serverCmd[1]; - - // This will make 'foo_bar' to detectFooBar() - $functionName = "'detect' . implode('', array_map('ucfirst', explode('_', '" . $serverCmd . "')))"; - - // Replace it - $code = str_replace($matches[0][$key], "\" . call_user_func(" . $functionName . ") . \"", $code); - } elseif (substr($cmd, 0, 4) == 'user') { - // Extract user command - $userCmdArray = explode(',', $cmd); - $userCmd = $userCmdArray[1]; - - // 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, '" . $userCmd . "')"; - } elseif ($matches[4][$key] > 0) { - // User data found - $functionName = "getFetchedUserData('userid', " . $matches[4][$key] . ", " . $userCmd . "')"; + // @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)) && (isMember())) { + // "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 - } // END - if - // Do we have another function to run (e.g. translations) - if (isset($userCmdArray[2])) { - // Surround the original function call with it - $functionName = $userCmdArray[2] . '(' . $functionName . ')'; - } // END - if + // Now replace the code + $code = str_replace($matches[0][$key], "\" . " . $functionName . " . \"", $code); + break; - // Now replace the code - $code = str_replace($matches[0][$key], "\" . " . $functionName . " . \"", $code); - } elseif (substr($cmd, 0, 3) == 'ext') { - // Get the extension command - $extCmd = explode(',', $cmd); - $extCmd = $extCmd[1]; + case 'ext': + // Construct call-back function name + $functionName = 'getExtension' . ucfirst(strtolower($callback)); - // Construct call-back function name - $functionName = 'getExtension' . ucfirst(strtolower($extCmd)); + // Construct call of the function + $replacer = "\" . call_user_func_array('" . $functionName . "', array('" . $matches[4][$key] . "', true)) . \""; - // Construct call of the function - $replacer = "\" . call_user_func_array('" . $functionName . "', array('" . $matches[4][$key] . "', true)) . \""; + // Replace it and insert parameter for GET request + $code = str_replace($matches[0][$key], sprintf("&ext=%s&rev=\" . getConfig('CURR_SVN_REVISION') . \"", $replacer), $code); + break; - // Replace it and insert parameter for GET request - $code = str_replace($matches[0][$key], sprintf("&ext=%s&rev=\" . getConfig('CURR_SVN_REVISION') . \"", $replacer), $code); - } else { - // Unknown command detected - debug_report_bug('Unknown command ' . $cmd . ' detected.'); - } + 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; + + default: + // Unsupported command detected + debug_report_bug('Command=' . $cmd . ', callback=' . $callback . ', extra=' . $extraFunction . ' is unsupported.'); + break; + } // END - switch } // END - foreach } // END - if // Do we have non-HTML mode? - if ((getOutputMode() != '0') || ($outputMode != '0')) $code = html_entity_decode($code); + if ((getOutputMode() != '0') || ($outputMode != '0')) $code = decodeEntities($code); // Return compiled code //* DEBUG: */ die('
'.htmlentities($code).'
');