X-Git-Url: https://git.mxchange.org/?p=mailer.git;a=blobdiff_plain;f=inc%2Ffilters.php;h=c28d8fb3b01214bb93070408ad9ff854ed0c3ec8;hp=7b6891497d0beeb3d1f3849adcc8b5417f3b9f25;hb=57227d33e870ec5cd271209c4a978a52b45c2dd6;hpb=7cb246c51e8634735aaf24e546bcbc46c5ce3833 diff --git a/inc/filters.php b/inc/filters.php index 7b6891497d..c28d8fb3b0 100644 --- a/inc/filters.php +++ b/inc/filters.php @@ -408,13 +408,13 @@ function FILTER_COMPILE_CONFIG ($code, $compiled = false) { // Is the config valid? if (isConfigEntrySet($matches[1][$key])) { // Set it for caching - $GLOBALS['compile_config'][$matches[1][$key]] = "\".getConfig('" . $matches[1][$key] . "').\""; + $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]) . "').\""; + $GLOBALS['compile_config'][$matches[1][$key]] = "\" . getMessage('". 'DEFAULT_' . strtoupper($matches[1][$key]) . "') . \""; } else { // Unhandled! $GLOBALS['compile_config'][$matches[1][$key]] = '!' . $matches[1][$key] . '!'; @@ -435,7 +435,7 @@ function FILTER_COMPILE_CONFIG ($code, $compiled = false) { if ($compiled === true) { // Run the code $eval = "\$GLOBALS['compiled_config'][\$uncompiled] = \"" . $GLOBALS['compiled_config'][$uncompiled] . "\";"; - //* DEBUG: */ print '
' . str_replace('$', '$', htmlentities($eval)) . '
'; + //* DEBUG: */ print('
' . str_replace('$', '$', htmlentities($eval)) . '
'); eval($eval); } // END - if @@ -443,39 +443,138 @@ function FILTER_COMPILE_CONFIG ($code, $compiled = false) { return $GLOBALS['compiled_config'][$uncompiled]; } -// Filter for compiling extension data -function FILTER_COMPILE_EXTENSION ($code) { - // Compile {%cmd=some_value%} to get extension data - // Support cmd is: - // - version -> getExtensionVersion() call - preg_match_all('/\{%((([a-zA-Z0-9-_]+)=([a-zA-Z0-9-_]+))*)\%\}/', $code, $matches); +// Filter for compiling expression code +function FILTER_COMPILE_EXPRESSION_CODE ($code) { + // Compile {%cmd=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('
'.print_r($matches, true).'
'); + + // Default is from OUTPUT_HTML + $outputMode = getOutputMode(); // Some entries found? if ((count($matches) > 0) && (count($matches[3]) > 0)) { // Replace all matches - foreach ($matches[3] as $key => $cmd) { - // Init replacer variable + foreach ($matches[2] as $key => $cmd) { + // Init replacer/call-back variable $replacer = ''; + $callback = ''; + $extraFunction = ''; - // Is the extension installed or code provided? - if ($cmd == 'code') { - // Code asked for - $replacer = "\".getCode(\"" . $matches[4][$key] . "\").\""; - } else { - // Construct call-back function name - $functionName = 'getExtension' . ucfirst(strtolower($cmd)); + // 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]; - // Construct call of the function - $replacer = "\".call_user_func_array('" . $functionName . "', array('" . $matches[4][$key] . "', true)).\""; - } + // 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 . "')"; + } - // Replace it and insert parameter for GET request - $code = str_replace($matches[0][$key], sprintf("&%s=%s&rev=\".getConfig('CURR_SVN_REVISION').\"", $cmd, $replacer), $code); + // 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("&ext=%s&ver=%s&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 } // END - foreach } // END - if + // Do we have non-HTML mode? + if ((getOutputMode() != '0') || ($outputMode != '0')) $code = decodeEntities($code); + // Return compiled code - //* DEBUG: */ die('
'.secureString($code).'
'); + //* DEBUG: */ die('
'.htmlentities($code).'
'); return $code; } @@ -498,7 +597,7 @@ function FILTER_RUN_RESET_INCLUDES () { // Is the reset set or old sql_patches? if (((!isResetModeEnabled()) || (!isExtensionInstalled('sql_patches'))) && (getOutputMode() == '0')) { // Then abort here - logDebugMessage(__FUNCTION__, __LINE__, 'Cannot run reset! Please report this bug. Thanks'); + debug_report_bug('Cannot run reset! enabled='.intval(isResetModeEnabled()).',ext='.intval(isExtensionInstalled('sql_patches')).' Please report this bug. Thanks'); } // END - if // Get more daily reset scripts @@ -590,9 +689,9 @@ function FILTER_DETERMINE_WHAT_ACTION () { // Fix module if (!isModuleSet()) { // Is the request element set? - if (isGetRequestElementSet('module')) { + if (isGetRequestParameterSet('module')) { // Set module from request - setModule(getRequestElement('module')); + setModule(getRequestParameter('module')); } elseif (getOutputMode() == '0') { // Set default module 'index' setModule('index'); @@ -667,11 +766,10 @@ function FILTER_CHECK_SVN_REVISION () { // Filter for running daily reset function FILTER_RUN_DAILY_RESET () { // Only execute this filter if installed - if ((!isInstalled()) || (!isAdminRegistered())) return; + if ((isInstallationPhase()) || (!isInstalled()) || (!isAdminRegistered()) || (!isExtensionInstalled('sql_patches'))) return; // Shall we run the reset scripts? If a day has changed, maybe also a week/month has changed... Simple! :D - // 012 3 4 43 3 4432 2 3 3 21 1 221 1 221 1 2 21 1 22 10 - if (((date('d', getConfig('last_update')) != date('d', time())) || ((isConfigEntrySet('DEBUG_RESET')) && (getConfig('DEBUG_RESET') == 'Y'))) && (!isInstallationPhase()) && (isAdminRegistered()) && (!isGetRequestElementSet('register')) && (getOutputMode() != 1)) { + if (((date('d', getConfig('last_update')) != date('d', time())) || ((isConfigEntrySet('DEBUG_RESET')) && (getConfig('DEBUG_RESET') == 'Y'))) && (!isInstallationPhase()) && (isAdminRegistered()) && (!isGetRequestParameterSet('register')) && (getOutputMode() != 1)) { // Tell every module we are in reset-mode! doReset(); } // END - if @@ -826,7 +924,7 @@ function FILTER_HANDLE_FATAL_ERRORS () { // Filter for displaying copyright line function FILTER_DISPLAY_COPYRIGHT () { // Shall we display the copyright notice? - if ((!isGetRequestElementSet('frame')) && (basename($_SERVER['PHP_SELF']) != 'mailid_top.php') && ((getConfig('WRITE_FOOTER') == 'Y') || (isInstalling())) && ($GLOBALS['header_sent'] == 2)) { + if ((!isGetRequestParameterSet('frame')) && (basename($_SERVER['PHP_SELF']) != 'mailid_top.php') && ((getConfig('WRITE_FOOTER') == 'Y') || (isInstalling())) && ($GLOBALS['header_sent'] == 2)) { // Backlink enabled? if (((isConfigEntrySet('ENABLE_BACKLINK')) && (getConfig('ENABLE_BACKLINK') == 'Y')) || (isInstalling())) { // Copyright with backlink, thanks! :-) @@ -842,7 +940,7 @@ function FILTER_DISPLAY_COPYRIGHT () { function FILTER_DISPLAY_PARSING_TIME () { // Shall we display the parsing time and number of queries? // 1234 5 54 4 5 5 4 4 5 543 3 4432 2 33 2 2 21 - if ((((isExtensionInstalledAndNewer('sql_patches', '0.4.1')) && (getConfig('show_timings') == 'Y') && (!isGetRequestElementSet('frame'))) || (isInstallationPhase())) && (getOutputMode() == '0') && ($GLOBALS['header_sent'] == 2)) { + if ((((isExtensionInstalledAndNewer('sql_patches', '0.4.1')) && (getConfig('show_timings') == 'Y') && (!isGetRequestParameterSet('frame'))) || (isInstallationPhase())) && (getOutputMode() == '0') && ($GLOBALS['header_sent'] == 2)) { // Then display it here displayParsingTime(); } // END - if @@ -887,7 +985,7 @@ function FILTER_RESET_USER_LOGIN_FAILURE () { } // END - if // Remmeber login failures if available - if (isExtensionInstalledAndNewer('sql_patches') >= '0.6.1') { + if (isExtensionInstalledAndNewer('sql_patches', '0.6.1')) { // Reset login failures SQL_QUERY_ESC("UPDATE `{?_MYSQL_PREFIX?}_user_data`