+// Expression call-back function for validator links
+function doExpressionValidatorLinks ($data) {
+ // Default is nothing
+ $replacer = '';
+
+ // Get the code from data array for replacement/pipe-through
+ $code = $data['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));
+ } // END - if
+
+ // Replace the code
+ $code = replaceExpressionCode($data, $replacer);
+
+ // Return the (maybe) replaced code
+ return $code;
+}
+
+// Expression call-back for dynamic messages
+function doExpressionMessage ($data) {
+ // Debug message
+ //* 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'], 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'])) {
+ // value is set, so it is masked message
+ $replacer = "{DQUOTE} . getMaskedMessage('" . $data['callback'] . "', '" . $data['value'] . "') . {DQUOTE}";
+ } else {
+ // Regular message
+ $replacer = "{DQUOTE} . getMessage('" . $data['callback'] . "') . {DQUOTE}";
+ }
+
+ // Replace the code
+ $code = replaceExpressionCode($data, $replacer);
+
+ // Return the (maybe) replaced code
+ return $code;
+}
+
+// Expression call-back for template functions
+function doExpressionTemplate ($data) {
+ // Construct call-back function name
+ $callbackFunction = 'doTemplate' . $data['callback'];
+
+ // Init replacer
+ $replacer = '<!-- [' . __FUNCTION__ . ':' . __LINE__.'] Call-back function ' . $callbackFunction . ' does not exist. //-->';
+
+ // Is the function there?
+ 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
+ logDebugMessage(__FUNCTION__, __LINE__, 'Call-back function ' . $callbackFunction . ' does not exist.');
+ } else {
+ // Do the replacement
+ //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'template='.$GLOBALS['current_template']);
+ $replacer = '{DQUOTE} . ' . $callbackFunction . '(' . chr(39) . $GLOBALS['current_template'] . chr(39) . ', true';
+
+ // Is 'value' set?
+ if (!empty($data['value'])) {
+ // Then include it as well
+ $replacer .= ', ' . chr(39) . $data['value'] . chr(39);
+ } // END - if
+
+ // Replacer is ready
+ $replacer .= ') . {DQUOTE}';
+ }
+
+ // 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} . 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,getRequestElement=' . $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,postRequestElement=' . $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
+ $replacer = '{%pipe,getSession=' . $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,' . $data['callback'] . '=' . $rawValue . '%}';
+
+ // Debug message
+ //* NOISY-DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'value=' . $data['value'] . ',rawValue=' . $rawValue . ',replacer=' . $replacer);
+
+ // Replace the code
+ $code = replaceExpressionCode($data, $replacer);
+
+ // Return the (maybe) replaced code
+ return $code;
+}
+