X-Git-Url: https://git.mxchange.org/?p=mailer.git;a=blobdiff_plain;f=inc%2Fexpression-functions.php;h=c114e317731b521ac5c6ceb5e6f9294273e775a2;hp=485e6195857e3e9d51e9fcf0ecb6161a2f03f051;hb=4b7f401f2a4680ae46ca41c57f749cfe35163660;hpb=c00854616d540e2372c89cc04ab3677544efbd35 diff --git a/inc/expression-functions.php b/inc/expression-functions.php index 485e619585..c114e31773 100644 --- a/inc/expression-functions.php +++ b/inc/expression-functions.php @@ -18,6 +18,7 @@ * svn:keywords Date Revision" (autoprobset!) at least!!!!!! * * -------------------------------------------------------------------- * * Copyright (c) 2003 - 2009 by Roland Haeder * + * Copyright (c) 2009, 2010 by Mailer Developer Team * * For more information visit: http://www.mxchange.org * * * * This program is free software; you can redistribute it and/or modify * @@ -41,10 +42,17 @@ if (!defined('__SECURITY')) { die(); } // END - if +// Private function to replace the code +function replaceExpressionCode ($data, $replacer) { + // Replace the code + // @TODO is escapeQuotes() enougth for strings with single/double quotes? + return str_replace($data['matches'][0][$data['key']], $replacer, escapeQuotes($data['code'])); +} + // Expression call-back function for getCode() calls function doExpressionCode ($data) { // Replace the code - $code = str_replace($data['matches'][0][$data['key']], "\" . getCode('" . $data['matches'][4][$data['key']] . "') . \"", $data['code']); + $code = str_replace($data['matches'][0][$data['key']], "{DQUOTE} . getCode('" . $data['matches'][4][$data['key']] . "') . {DQUOTE}", $data['code']); // Return replaced code return $code; @@ -56,10 +64,10 @@ function doExpressionUrl ($data) { if ($data['callback'] == 'js') $data['mode'] = 1; // Handle an URL here - $replacer = "\" . encodeUrl(\"" . $data['matches'][4][$data['key']] . "\", " . $data['mode'] . ") . \""; + $replacer = "{DQUOTE} . encodeUrl('" . $data['matches'][4][$data['key']] . "', " . $data['mode'] . ') . {DQUOTE}'; // Replace it - $code = str_replace($data['matches'][0][$data['key']], $replacer, $data['code']); + $code = replaceExpressionCode($data, $replacer); // Return replaced code return $code; @@ -70,8 +78,11 @@ function doExpressionServer ($data) { // This will make 'foo_bar' to detectFooBar() $functionName = "'detect' . implode('', array_map('ucfirst', explode('_', '" . $data['callback'] . "')))"; + // Generate replacer + $replacer = '{DQUOTE} . call_user_func(' . $functionName . ') . {DQUOTE}'; + // Replace it - $code = str_replace($data['matches'][0][$data['key']], "\" . call_user_func(" . $functionName . ") . \"", $data['code']); + $code = replaceExpressionCode($data, $replacer); // Return replaced code return $code; @@ -98,13 +109,16 @@ function doExpressionUser ($data) { } // Do we have another function to run (e.g. translations) - if (!empty($extraFunction)) { + if (!empty($data['extra_func'])) { // Surround the original function call with it - $functionName = $extraFunction . '(' . $functionName . ')'; + $functionName = $data['extra_func'] . '(' . $functionName . ')'; } // END - if + // Generate replacer + $replacer = '{DQUOTE} . ' . $functionName . ' . {DQUOTE}'; + // Now replace the code - $code = str_replace($data['matches'][0][$data['key']], "\" . " . $functionName . " . \"", $data['code']); + $code = replaceExpressionCode($data, $replacer); // Return replaced code return $code; @@ -121,29 +135,51 @@ function doExpressionExt ($data) { $functionName = 'getExtension' . ucfirst(strtolower($data['callback'])); // Construct call of the function - $replacer = "\" . call_user_func_array('" . $functionName . "', array('" . $data['matches'][4][$data['key']] . "', true)) . \""; + $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); + // Replace it and insert parameter for GET request - $code = str_replace($data['matches'][0][$data['key']], sprintf("&ext=%s&ver=%s&rev=\" . getConfig('CURR_SVN_REVISION') . \"", $data['matches'][4][$data['key']], $replacer), $data['code']); + $code = replaceExpressionCode($data, $replacer); // Return replaced code return $code; } // 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) { - // Read configuration - $configValue = getConfig($data['matches'][4][$data['key']]); + // 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); - // Do we have a call-back? + // Return replaced code + return $code; +} + +// Expression call-back function for piping data through functions +function doExpressionPipe ($data) { + // 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 - $configValue = call_user_func_array($data['callback'], array($configValue)); + $replacer = '{DQUOTE} . ' . $data['callback'] . "('" . $replacer . "') . {DQUOTE}"; } // END - if // Replace the config entry - $code = str_replace($data['matches'][0][$data['key']], $configValue, $data['code']); + $code = replaceExpressionCode($data, $replacer); // Return replaced code return $code; @@ -152,14 +188,53 @@ function doExpressionConfig ($data) { // Expression call-back function for calling filters function doExpressionFilter ($data) { // Construct replacement - $replacer = "\" . runFilterChain('" . $data['matches'][4][$data['key']] . "') . \""; + $replacer = "{DQUOTE} . runFilterChain('" . $data['matches'][4][$data['key']] . "') . {DQUOTE}"; // Run the filter and insert result - $code = str_replace($data['matches'][0][$data['key']], $replacer, $data['code']); + $code = replaceExpressionCode($data, $replacer); // Return replaced code return $code; } +// 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) { + // Message string replacement depends on if message is masked + if (isMessageMasked($data['callback'])) { + // Message should be masked + $replacer = "{DQUOTE} . getMaskedMessage('" . $data['callback'] . "', '" . $data['extra_func'] . "') . {DQUOTE}"; + } else { + // Regular message + $replacer = "{DQUOTE} . getMessage('" . $data['callback'] . "') . {DQUOTE}"; + } + + // Replace the code + $code = replaceExpressionCode($data, $replacer); + + // Return the (maybe) replaced code + return $code; +} + // [EOF] ?>