mailer project continued:
[mailer.git] / inc / expression-functions.php
index 3aa8026953da4a850835eb16ce2523a65b60e0ba..82ba0ca9a33403dc99b7afd651096295efafbfd0 100644 (file)
@@ -16,7 +16,7 @@
  * $Author::                                                          $ *
  * -------------------------------------------------------------------- *
  * Copyright (c) 2003 - 2009 by Roland Haeder                           *
- * Copyright (c) 2009 - 2011 by Mailer Developer Team                   *
+ * 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 *
@@ -47,7 +47,7 @@ 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 and trim it
@@ -81,7 +81,7 @@ function isExpressionFunctionAvaiable ($data) {
                }
        } 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
@@ -110,12 +110,16 @@ function doExpressionCode ($data) {
 function doExpressionUrl ($data) {
        // Do we have JS-mode?
        if ($data['callback'] == 'js') {
-               $data['output_mode'] = 1;
+               // Switch to it
+               $data['output_mode'] = '1';
        } // END - if
 
        // Handle an URL here
        $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);
 
@@ -169,9 +173,12 @@ function doExpressionConfig ($data) {
        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
@@ -249,7 +256,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'])) {
@@ -270,28 +277,31 @@ 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 = '<!-- [' . __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
+               logDebugMessage(__FUNCTION__, __LINE__, 'Call-back function ' . $callbackFunction . ' does not exist.');
+       } 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
@@ -341,5 +351,43 @@ function doExpressionPost ($data) {
        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;
+}
+
 // [EOF]
 ?>