X-Git-Url: https://git.mxchange.org/?p=mailer.git;a=blobdiff_plain;f=inc%2Fexpression-functions.php;h=4e7c7f264ad73cc89b2786e9051a9b28cd4a53a4;hp=44279d6180d718bdf623f17ae6c2a828e8bfe20a;hb=596c8ab32594401ca84abfbfe35513ddfff31bec;hpb=2379934be6a196a54f4155bb8e24c49b20736969 diff --git a/inc/expression-functions.php b/inc/expression-functions.php index 44279d6180..4e7c7f264a 100644 --- a/inc/expression-functions.php +++ b/inc/expression-functions.php @@ -16,8 +16,8 @@ * $Author:: $ * * -------------------------------------------------------------------- * * Copyright (c) 2003 - 2009 by Roland Haeder * - * Copyright (c) 2009 - 2011 by Mailer Developer Team * - * For more information visit: http://www.mxchange.org * + * Copyright (c) 2009 - 2012 by Mailer Developer Team * + * For more information visit: http://mxchange.org * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * @@ -47,13 +47,13 @@ function replaceExpressionCode ($data, $replacer) { return str_replace($data['matches'][0][$data['key']], $replacer, escapeQuotes($data['code'])); } -// Private function to determine wether we have a special expression function avaible +// Private function to determine whether we have a special expression function avaible // (mostly located in wrapper-functions.php) function isExpressionFunctionAvaiable ($data) { - // Get the enty we need - $entry = $data['matches'][4][$data['key']]; + // Get the enty we need and trim it + $entry = trim($data['matches'][4][$data['key']]); - // Do we have cache? + // Is there cache? if (!isset($GLOBALS['expression_function_available'][$entry])) { // Init function name $functionName = 'get'; @@ -70,18 +70,18 @@ function isExpressionFunctionAvaiable ($data) { // Is that function there? if (function_exists($functionName)) { // Cache it all - $GLOBALS['expression_function_name'][$entry] = $functionName; - $GLOBALS['expression_function_available'][$entry] = true; + $GLOBALS['expression_function_name'][$entry] = $functionName; + $GLOBALS['expression_function_available'][$entry] = TRUE; } else { // Not avaiable logDebugMessage(__FUNCTION__, __LINE__, 'Expression function ' . $functionName . ' not found. Please consider adding it to improve execution speed.'); // And cache it - $GLOBALS['expression_function_available'][$entry] = false; + $GLOBALS['expression_function_available'][$entry] = FALSE; } - } elseif ($GLOBALS['expression_function_available'][$entry] == false) { + } elseif ($GLOBALS['expression_function_available'][$entry] == FALSE) { // Debug message - logDebugMessage(__FUNCTION__, __LINE__, 'Expression function for entry ' . $entry . ' requested but not found.'); + logDebugMessage(__FUNCTION__, __LINE__, 'Expression function for entry ' . $entry . ' requested but does not exist.'); } // Return cache @@ -108,11 +108,17 @@ function doExpressionCode ($data) { // Expression call-back function for URLs function doExpressionUrl ($data) { - // Do we have JS-mode? - if ($data['callback'] == 'js') $data['mode'] = 1; + // Is there JS-mode? + if ($data['callback'] == 'js') { + // Switch to it + $data['output_mode'] = '1'; + } // END - if // Handle an URL here - $replacer = "{DQUOTE} . encodeUrl('" . $data['matches'][4][$data['key']] . "', " . $data['mode'] . ') . {DQUOTE}'; + $replacer = "{DQUOTE} . encodeUrl('" . $data['matches'][4][$data['key']] . "', " . $data['output_mode'] . ') . {DQUOTE}'; + + // Debug log + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'replacer=' . $replacer . ',callback=' . $data['callback']); // Replace it $code = replaceExpressionCode($data, $replacer); @@ -147,7 +153,7 @@ function doExpressionExt ($data) { $functionName = 'getExtension' . capitalizeUnderscoreString($data['callback']); // Construct call of the function - $replacer = "{DQUOTE} . call_user_func_array('" . $functionName . "', array('" . $data['matches'][4][$data['key']] . "', true)) . {DQUOTE}"; + $replacer = "{DQUOTE} . call_user_func_array('" . $functionName . "', array('" . $data['matches'][4][$data['key']] . "', TRUE)) . {DQUOTE}"; } // END - if // Generate replacer @@ -163,13 +169,16 @@ function doExpressionExt ($data) { // Expression call-back function for getting configuration data // @TODO FILTER_COMPILE_CONFIG does not handle call-back functions so we handle it here again function doExpressionConfig ($data) { - // Do we have a special expression function for it? + // Is there a special expression function for it? if (isExpressionFunctionAvaiable($data)) { // Then use it $replacer = '{DQUOTE} . ' . $data['callback'] . '(' . getExpressionFunction($data) . '()) . {DQUOTE}'; + } elseif (!isConfigEntrySet($data['matches'][4][$data['key']])) { + // Config entry is not set + $replacer = '{DQUOTE} . ' . $data['callback'] . '(NULL) . {DQUOTE}'; } else { // Default replacer is the config value itself - $replacer = '{DQUOTE} . ' . $data['callback'] . '(getConfig(' . "'" . $data['matches'][4][$data['key']] . "'" . ')) . {DQUOTE}'; + $replacer = '{DQUOTE} . ' . $data['callback'] . '(getConfig(' . chr(39) . $data['matches'][4][$data['key']] . chr(39) . ')) . {DQUOTE}'; } // Replace the config entry @@ -184,9 +193,9 @@ function doExpressionPipe ($data) { // We need callback and extra_func: callback is really the call-back function, extra_func is our value $replacer = $data['extra_func']; - // Do we have a call-back? Should always be there! + // Is there a call-back? Should always be there! if (!empty($data['callback'])) { - //* DEBUG: */ if ($data['callback'] == 'getMemberId') die('
'.encodeEntities(print_r($data, true)).'
'); + //* DEBUG: */ if ($data['callback'] == 'getMemberId') die('
'.encodeEntities(print_r($data, TRUE)).'
'); // If the value is empty, we don't add it //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'value[' . gettype($data['value']) . ']=' . $data['value']); if ((empty($data['value'])) && ($data['value'] != '0')) { @@ -202,6 +211,7 @@ function doExpressionPipe ($data) { } // END - if // Replace the config entry + //* NOISY-DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'replacer=' . $replacer); $code = replaceExpressionCode($data, $replacer); // Return replaced code @@ -231,7 +241,7 @@ function doExpressionValidatorLinks ($data) { // Should we generally include validator links? if ((isExtensionInstalled('validator')) && (getConfig('enable_validator') == 'Y') && (!in_array(getModule(), array('admin', 'login')))) { // Load the validator template - $replacer = escapeQuotes(loadTemplate('validator_links', true)); + $replacer = escapeQuotes(loadTemplate('validator_links', TRUE)); } // END - if // Replace the code @@ -247,7 +257,7 @@ function doExpressionMessage ($data) { //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'callback=' . $data['callback'] . ',extra_func=' . $data['extra_func'] . ',value=' . $data['value']); // Message string replacement depends on if message is masked - if ((isMessageMasked($data['callback'])) && ((!empty($data['extra_func'])) || ($data['extra_func'] == '0'))) { + if ((isMessageMasked($data['callback'], FALSE)) && ((!empty($data['extra_func'])) || ($data['extra_func'] == '0'))) { // Message should be masked $replacer = "{DQUOTE} . getMaskedMessage('" . $data['callback'] . "', '" . $data['extra_func'] . "') . {DQUOTE}"; } elseif (!empty($data['value'])) { @@ -268,28 +278,34 @@ function doExpressionMessage ($data) { // Expression call-back for template functions function doExpressionTemplate ($data) { // Construct call-back function name - $callback = 'doTemplate' . $data['callback']; + $callbackFunction = 'doTemplate' . $data['callback']; // Init replacer - $replacer = ''; + $replacer = ''; // Is the function there? - if (function_exists($callback)) { + if (!isset($GLOBALS['current_template'])) { + // This is very bad and needs fixing + reportBug(__FUNCTION__, __LINE__, 'current_template in GLOBALS not set, callbackFunction=' . $callbackFunction . ',function_exists()=' . intval(function_exists($callbackFunction))); + } elseif (!function_exists($callbackFunction)) { + // Log missing function only in debug mode + if (isDebugModeEnabled()) { + // Log it here + logDebugMessage(__FUNCTION__, __LINE__, 'Call-back function ' . $callbackFunction . ' does not exist.'); + } // END - if + } else { // Do the replacement //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'template='.$GLOBALS['current_template']); - $replacer = '{DQUOTE} . ' . $callback . "('" . $GLOBALS['current_template'] . "', true"; + $replacer = '{DQUOTE} . ' . $callbackFunction . '(' . chr(39) . $GLOBALS['current_template'] . chr(39) . ', TRUE'; // Is 'value' set? if (!empty($data['value'])) { // Then include it as well - $replacer .= ", '" . $data['value'] . "'"; + $replacer .= ', ' . chr(39) . $data['value'] . chr(39); } // END - if // Replacer is ready $replacer .= ') . {DQUOTE}'; - } else { - // Log missing function - logDebugMessage(__FUNCTION__, __LINE__, 'Call-back function ' . $callback . ' does not exist.'); } // Replace the code @@ -317,8 +333,18 @@ function doExpressionMath ($data) { // Expression call-back for GET request function doExpressionGet ($data) { - // Construct the replacer - $replacer = '{%pipe,getRequestElement=' . $data['value'] . '%}'; + // Construct the replacer: + // - GET request element + $replacer = '{%pipe,getRequestElement'; + + // Add more call-back functions? + if (!empty($data['callback'])) { + // - Okay, add them + $replacer .= ',' . $data['callback']; + } // END - if + + // - Finalize replacer + $replacer .= '=' . $data['value'] . '%}'; // Replace the code $code = replaceExpressionCode($data, $replacer); @@ -329,8 +355,66 @@ function doExpressionGet ($data) { // Expression call-back for POST request function doExpressionPost ($data) { + // Construct the replacer: + // - POST request element + $replacer = '{%pipe,postRequestElement'; + + // Add more call-back functions? + if (!empty($data['callback'])) { + // - Okay, add them + $replacer .= ',' . $data['callback']; + } // END - if + + // - Finalize replacer + $replacer .= '=' . $data['value'] . '%}'; + + // Replace the code + $code = replaceExpressionCode($data, $replacer); + + // Return the (maybe) replaced code + return $code; +} + +// Expression call-back for session data +function doExpressionSession ($data) { + // Construct the replacer: + // - Session element + $replacer = '{%pipe,getSession'; + + // Add more call-back functions? + if (!empty($data['callback'])) { + // - Okay, add them + $replacer .= ',' . $data['callback']; + } // END - if + + // - Finalize replacer + $replacer .= '=' . $data['value'] . '%}'; + + // Debug message + //* NOISY-DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'value=' . $data['value'] . ',replacer=' . $replacer); + + // Replace the code + $code = replaceExpressionCode($data, $replacer); + + // Return the (maybe) replaced code + return $code; +} + +/** + * Expression call-back for session piplining, this means: + * + * 1) Read session data + * 2) Wrap the raw data into {%pipe,fooFunction=$rawValue%} + */ +function doExpressionSessionPipe ($data) { + // Get the session data + $rawValue = getSession($data['value']); + // Construct the replacer - $replacer = '{%pipe,postRequestElement=' . $data['value'] . '%}'; + $replacer = '{%pipe,' . $data['callback'] . '=' . $rawValue . '%}'; + + // Debug message + //* NOISY-DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'value=' . $data['value'] . ',rawValue=' . $rawValue . ',replacer=' . $replacer); // Replace the code $code = replaceExpressionCode($data, $replacer);