A lot calls saved, expression language rewritten:
[mailer.git] / inc / expression-functions.php
index bb7a1807a240dd1541cfea378f2b36881db3c1ec..29d412872442de503769cb4e0bdc05c5a0856290 100644 (file)
@@ -49,6 +49,56 @@ 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
+// (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 .= ucfirst(strtolower($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
@@ -139,7 +189,7 @@ function doExpressionExt ($data) {
        } // 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={?CURR_SVN_REVISION?}", $data['matches'][4][$data['key']], $replacer);
 
        // Replace it and insert parameter for GET request
        $code = replaceExpressionCode($data, $replacer);
@@ -151,8 +201,14 @@ function doExpressionExt ($data) {
 // 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).'(' . "'" . $data['matches'][4][$data['key']] . "'" . ')) . {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);