* $Author:: $ *
* -------------------------------------------------------------------- *
* Copyright (c) 2003 - 2009 by Roland Haeder *
- * Copyright (c) 2009, 2010 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 *
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';
// 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
// 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'] . ',output_mode=' . $data['output_mode']);
// Replace it
$code = replaceExpressionCode($data, $replacer);
// Expression call-back function for reading data from $_SERVER
function doExpressionServer ($data) {
// This will make 'foo_bar' to detectFooBar()
- $functionName = "'detect' . implode('', array_map('ucfirst', explode('_', '" . $data['callback'] . "')))";
+ $functionName = "'detect' . implode('', array_map('firstCharUpperCase', explode('_', '" . $data['callback'] . "')))";
// Generate replacer
$replacer = '{DQUOTE} . call_user_func(' . $functionName . ') . {DQUOTE}';
$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
// Replace it and insert parameter for GET request
$code = replaceExpressionCode($data, $replacer);
+ // Debug message
+ //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'code=' . $code . ',replacer=' . $replacer . ',key=' . $data['key'] . ',callback=' . $data['callback']);
+
// Return replaced code
return $code;
}
// 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
// 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'])) {
- //if ($data['callback'] == 'getMemberId') die('<pre>'.encodeEntities(print_r($data, true)).'</pre>');
+ //* DEBUG: */ if ($data['callback'] == 'getMemberId') die('<pre>'.encodeEntities(print_r($data, TRUE)).'</pre>');
// If the value is empty, we don't add it
- if (empty($data['value'])) {
+ //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'value[' . gettype($data['value']) . ']=' . $data['value']);
+ if ((empty($data['value'])) && ($data['value'] != '0')) {
// No value is set
$replacer = '{DQUOTE} . ' . $data['extra_func2'] . '(' . $data['extra_func'] . '(' . $data['callback'] . '())) . {DQUOTE}';
+ } elseif (isXmlTypeBool($data['value'])) {
+ // Boolean value detected
+ $replacer = '{DQUOTE} . ' . $data['extra_func2'] . '(' . $data['extra_func'] . '(' . $data['callback'] . '(' . $data['value'] . '))) . {DQUOTE}';
} else {
- // Some value is set
+ // Some string/integer value is set
$replacer = '{DQUOTE} . ' . $data['extra_func2'] . '(' . $data['extra_func'] . '(' . $data['callback'] . "('" . $data['value'] . "'))) . {DQUOTE}";
}
} // END - if
// Replace the config entry
+ //* NOISY-DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'replacer=' . $replacer);
$code = replaceExpressionCode($data, $replacer);
// Return replaced code
// 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
//* 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'])) {
// 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 = '<!-- ['.__FUNCTION__.':'.__LINE__.'] Call-back function ' . $callback . ' does not exist. //-->';
+ $replacer = '<!-- [' . __FUNCTION__ . ':' . __LINE__.'] Call-back function ' . $callbackFunction . ' does not exist. //-->';
// 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}';
- } // END - if
+ }
// Replace the code
$code = replaceExpressionCode($data, $replacer);
// Expression call-back for GET request
function doExpressionGet ($data) {
- // Construct the replacer
- $replacer = '{%pipe,getRequestParameter=' . $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);
// 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,postRequestParameter=' . $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);