+// 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;
+}
+