* $Date:: $ *
* $Tag:: 0.2.1-FINAL $ *
* $Author:: $ *
- * Needs to be in all Files and every File needs "svn propset *
- * svn:keywords Date Revision" (autoprobset!) at least!!!!!! *
* -------------------------------------------------------------------- *
* Copyright (c) 2003 - 2009 by Roland Haeder *
* Copyright (c) 2009, 2010 by Mailer Developer Team *
return str_replace($data['matches'][0][$data['key']], $replacer, escapeQuotes($data['code']));
}
+// Private function to determine wether 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']];
+
+ // Do we have cache?
+ if (!isset($GLOBALS['expression_function_available'][$entry])) {
+ // Init function name
+ $functionName = 'get';
+
+ // Explode it in an array
+ foreach (explode('_', $entry) as $piece) {
+ // Add non-empty parts
+ if (!empty($piece)) {
+ // Add it
+ $functionName .= capitalizeUnderscoreString($piece);
+ } // END - if
+ } // END - foreach
+
+ // Is that function there?
+ if (function_exists($functionName)) {
+ // Cache it all
+ $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;
+ }
+ } elseif ($GLOBALS['expression_function_available'][$entry] == false) {
+ // Debug message
+ logDebugMessage(__FUNCTION__, __LINE__, 'Expression function for entry ' . $entry . ' requested but not found.');
+ }
+
+ // Return cache
+ return $GLOBALS['expression_function_available'][$entry];
+}
+
+// Getter for above expression function
+function getExpressionFunction ($data) {
+ // Get the enty we need
+ $entry = $data['matches'][4][$data['key']];
+
+ // Return it
+ return $GLOBALS['expression_function_name'][$entry];
+}
+
// Expression call-back function for getCode() calls
function doExpressionCode ($data) {
// Replace the code
return $code;
}
-// Expression call-back function for fetching user data
-function doExpressionUser ($data) {
- // Use current userid by default
- $functionName = 'getMemberId()';
-
- // User-related data, so is there a userid?
- if (!empty($data['matches'][4][$data['key']])) {
- // Do we have a userid or $userid?
- if ($data['matches'][4][$data['key']] == '$userid') {
- // Use dynamic call
- $functionName = "getFetchedUserData('userid', \$userid, '" . $data['callback'] . "')";
- } elseif (!empty($data['matches'][4][$data['key']])) {
- // User data found
- $functionName = "getFetchedUserData('userid', " . $data['matches'][4][$data['key']] . ", '" . $data['callback'] . "')";
- }
- } elseif ((!empty($data['callback'])) && (isUserDataValid())) {
- // "Call-back" alias column for current logged in user's data
- $functionName = "getUserData('" . $data['callback'] . "')";
- }
-
- // Do we have another function to run (e.g. translations)
- if (!empty($data['extra_func'])) {
- // Surround the original function call with it
- $functionName = $data['extra_func'] . '(' . $functionName . ')';
- } // END - if
-
- // Generate replacer
- $replacer = '{DQUOTE} . ' . $functionName . ' . {DQUOTE}';
-
- // Now replace the code
- $code = replaceExpressionCode($data, $replacer);
-
- // Return replaced code
- return $code;
-}
-
// Expression call-back function for getting extension data
function doExpressionExt ($data) {
// Not installed is default
// Is the extension installed?
if (isExtensionInstalled($data['matches'][4][$data['key']])) {
// Construct call-back function name
- $functionName = 'getExtension' . ucfirst(strtolower($data['callback']));
+ $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}";
} // END - if
// Generate replacer
- $replacer = sprintf("&ext=%s&ver=%s&rev={DQUOTE} . getConfig('CURR_SVN_REVISION') . {DQUOTE}", $data['matches'][4][$data['key']], $replacer);
+ $replacer = sprintf("&ext=%s&ver=%s&rev={?CURRENT_REPOSITORY_REVISION?}", $data['matches'][4][$data['key']], $replacer);
// Replace it and insert parameter for GET request
$code = replaceExpressionCode($data, $replacer);
// 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) {
- // Default replacer is the config value itself
- $replacer = '{DQUOTE} . ' . $data['callback'] . '(getConfig(' . "'" . $data['matches'][4][$data['key']] . "'" . ')) . {DQUOTE}';
+ // Do we have a special expression function for it?
+ if (isExpressionFunctionAvaiable($data)) {
+ // Then use it
+ $replacer = '{DQUOTE} . ' . $data['callback'] . '(' . getExpressionFunction($data) . '()) . {DQUOTE}';
+ } else {
+ // Default replacer is the config value itself
+ $replacer = '{DQUOTE} . ' . $data['callback'] . '(getConfig(' . "'" . $data['matches'][4][$data['key']] . "'" . ')) . {DQUOTE}';
+ }
// Replace the config entry
$code = replaceExpressionCode($data, $replacer);
// We need callback and extra_func: callback is really the call-back function, extra_func is our value
$replacer = $data['extra_func'];
- // Is the extra_func empty and value set?
- if ((empty($replacer)) && (isset($data['value']))) {
- // Then use this
- $replacer = $data['value'];
- } // END - if
-
// Do we have a call-back? Should always be there!
if (!empty($data['callback'])) {
- // Parse it through this function
- $replacer = '{DQUOTE} . ' . $data['extra_func'] . '(' . $data['callback'] . "('" . $replacer . "')) . {DQUOTE}";
+ //if ($data['callback'] == 'getMemberId') die('<pre>'.encodeEntities(print_r($data, true)).'</pre>');
+ // 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')) {
+ // No value is set
+ $replacer = '{DQUOTE} . ' . $data['extra_func2'] . '(' . $data['extra_func'] . '(' . $data['callback'] . '())) . {DQUOTE}';
+ } else {
+ // Some value is set
+ $replacer = '{DQUOTE} . ' . $data['extra_func2'] . '(' . $data['extra_func'] . '(' . $data['callback'] . "('" . $data['value'] . "'))) . {DQUOTE}";
+ }
} // END - if
// Replace the config entry
// Expression call-back for template functions
function doExpressionTemplate ($data) {
+ // Construct call-back function name
+ $callback = 'doTemplate' . $data['callback'];
+
+ // Init replacer
+ $replacer = '<!-- ['.__FUNCTION__.':'.__LINE__.'] Call-back function ' . $callback . ' does not exist. //-->';
+
+ // Is the function there?
+ if (function_exists($callback)) {
+ // Do the replacement
+ //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'template='.$GLOBALS['current_template']);
+ $replacer = '{DQUOTE} . ' . $callback . "('" . $GLOBALS['current_template'] . "', true";
+
+ // Is 'value' set?
+ if (!empty($data['value'])) {
+ // Then include it as well
+ $replacer .= ", '" . $data['value'] . "'";
+ } // END - if
+
+ // Replacer is ready
+ $replacer .= ') . {DQUOTE}';
+ } // END - if
+
+ // Replace the code
+ $code = replaceExpressionCode($data, $replacer);
+
+ // Return the (maybe) replaced code
+ return $code;
+}
+
+// Expression call-back for math functions
+function doExpressionMath ($data) {
// Do the replacement
//* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'template='.$GLOBALS['current_template']);
- $replacer = '{DQUOTE} . doTemplate' . $data['callback'] . "('" . $GLOBALS['current_template'] . "', true) . {DQUOTE}";
+ $replacer = '{DQUOTE} . doCalculate' . $data['callback'] . '(' . $data['value'] . ') . {DQUOTE}';
+
+ // Replace the code
+ $code = replaceExpressionCode($data, $replacer);
+
+ // Load include once
+ loadIncludeOnce('inc/math-functions.php');
+
+ // Return the (maybe) replaced code
+ return $code;
+}
+
+// Expression call-back for GET request
+function doExpressionGet ($data) {
+ // Construct the replacer
+ $replacer = '{%pipe,getRequestParameter=' . $data['value'] . '%}';
+
+ // Replace the code
+ $code = replaceExpressionCode($data, $replacer);
+
+ // Return the (maybe) replaced code
+ return $code;
+}
+
+// Expression call-back for POST request
+function doExpressionPost ($data) {
+ // Construct the replacer
+ $replacer = '{%pipe,postRequestParameter=' . $data['value'] . '%}';
// Replace the code
$code = replaceExpressionCode($data, $replacer);