// Private function to replace the code
function replaceExpressionCode ($data, $replacer) {
// Replace the code
- // @TODO is escapeQuotes() enougth for strings with single/double quotes?
+ // @TODO is escapeQuotes() enough for strings with single/double quotes?
return str_replace($data['matches'][0][$data['key']], $replacer, escapeQuotes($data['code']));
}
// And cache it
$GLOBALS['expression_function_available'][$entry] = FALSE;
}
- } elseif ($GLOBALS['expression_function_available'][$entry] == FALSE) {
- // Debug message
+ } elseif (($GLOBALS['expression_function_available'][$entry] == FALSE) && (isDebugModeEnabled())) {
+ // Debug message in debug mode
logDebugMessage(__FUNCTION__, __LINE__, 'Expression function for entry ' . $entry . ' requested but does not exist.');
}
// Getter for above expression function
function getExpressionFunction ($data) {
// Get the enty we need
- $entry = $data['matches'][4][$data['key']];
+ $entry = trim($data['matches'][4][$data['key']]);
// Return it
return $GLOBALS['expression_function_name'][$entry];
return $code;
}
-// Expression call-back function for URLs
+// Expression call-back function for URLs (example: {%url=foo.php?bar=bar%})
function doExpressionUrl ($data) {
// Is there JS-mode?
if ($data['callback'] == 'js') {
$replacer = "{DQUOTE} . encodeUrl('" . $data['matches'][4][$data['key']] . "', " . $data['output_mode'] . ') . {DQUOTE}';
// Debug log
- //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'replacer=' . $replacer . ',callback=' . $data['callback']);
+ //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'replacer=' . $replacer . ',callback=' . $data['callback'] . ',output_mode=' . $data['output_mode']);
// Replace it
$code = replaceExpressionCode($data, $replacer);
// Replace it and insert parameter for GET request
$code = replaceExpressionCode($data, $replacer);
+ // Debug message
+ //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'code=' . $code . ',replacer=' . $replacer . ',key=' . $data['key'] . ',callback=' . $data['callback']);
+
// Return replaced code
return $code;
}
// Expression call-back for template functions
function doExpressionTemplate ($data) {
// Construct call-back function name
- $callbackFunction = 'doTemplate' . $data['callback'];
+ $callbackFunction = 'doTemplate' . ucfirst($data['callback']);
// Init replacer
$replacer = '<!-- [' . __FUNCTION__ . ':' . __LINE__.'] Call-back function ' . $callbackFunction . ' does not exist. //-->';
return $code;
}
+// Expression call-back for formulars
+function doExpressionForm ($data) {
+ // Default method is GET, target is _self
+ $data['__form_method'] = 'get';
+ $data['__form_target'] = '_self';
+ $data['__form_name'] = 'form';
+ $data['__form_id'] = 'form';
+ $data['__server'] = '';
+
+ // Check which method/target is set
+ foreach (array('callback', 'extra_func', 'extra_func2') as $key) {
+ // Make lower-case
+ $value = strtolower($data[$key]);
+
+ // Is formMethodPost set?
+ if ($value == 'formmethodpost') {
+ // Use it
+ $data['__form_method'] = 'post';
+ } elseif (($value == 'formmethodpost') && (!isSpider()) && (!isSessionValid())) {
+ // Then expand 'value' with session id
+ if (strpos($data['value'], '?') !== FALSE) {
+ // '?' is set
+ $data['value'] .= '&';
+ } else {
+ // Is not set
+ $data['value'] .= '?';
+ }
+
+ // Append session's name and id
+ $data['value'] .= session_name() . '=' . session_id();
+ } elseif (substr($value, 0, 10) == 'formtarget') {
+ // Form target is found
+ $data['__form_target'] = substr($value, 10);
+ } elseif (substr($value, 0, 8) == 'formname') {
+ // Form name is found
+ $data['__form_name'] = substr($value, 8);
+ } elseif (substr($value, 0, 6) == 'formid') {
+ // Form id found
+ $data['__form_id'] = substr($value, 6);
+ } elseif (substr($value, 0, 6) == 'server') {
+ // {%server,foo%} found
+ $data['__server'] = '{%server,' . substr($value, 6) . '%}';
+ }
+ } // END - foreach
+
+ // Generate the replacement code which is the opening form tag
+ $data['__replacer'] = '<form accept-charset=\"UTF-8\"';
+ if (!empty($data['value'])) {
+ $data['__replacer'] .= ' action=\"{%url=' . $data['value'];
+ if (!empty($data['__server'])) {
+ $data['__replacer'] .= $data['__server'];
+ } // END - if
+ $data['__replacer'] .= '%}\"';
+ } // END - if
+
+ // Add rest elements
+ foreach (array('method', 'target', 'name', 'id') as $key) {
+ $data['__replacer'] .= ' ' . $key . '=\"' . $data['__form_' . $key] . '\"';
+ } // END - foreach
+
+ // Close the tag here (don't move it below the next filter)
+ $data['__replacer'] .= '>' . PHP_EOL;
+
+ /*
+ * Call a filter chain to allow more hidden fields being added. You should
+ * not remove the > char from above line to add onsubmit="" or so. Instead
+ * you should better use jquery to accomplish the same.
+ */
+ $data = runFilterChain('open_form_fields', $data);
+
+ // Replace the code
+ $code = replaceExpressionCode($data, $data['__replacer']);
+
+ // Return the (maybe) replaced code
+ return $code;
+}
+
+// Expression call-back to close form tags
+function doExpressionFormClose ($data) {
+ // Initial replacer is really easy ...
+ $data['__replacer'] = '</form>' . PHP_EOL;
+
+ /*
+ * Call a filter chain to allow more hidden fields being added at the end
+ * of the form.
+ */
+ $data = runFilterChain('close_form_fields', $data);
+
+ // Replace the code
+ $code = replaceExpressionCode($data, $data['__replacer']);
+
+ // Return the (maybe) replaced code
+ return $code;
+}
+
+// Expression call-back to handle jquery inclusion
+function doExpressionJquery ($data) {
+ // Default is compressed
+ $jquery = 'jquery';
+ $data['output_mode'] = '';
+
+ // Is there JS-mode?
+ if ($data['callback'] == 'js') {
+ // Switch to it
+ $data['output_mode'] = ',js';
+ } // END - if
+
+ // Is there a value?
+ if ($data['callback'] == 'js') {
+ // Then load special library
+ $jquery .= '-' . $data['value'];
+ } // END - if
+
+ // Is debug mode enabled?
+ if ((isGetRequestElementSet('jquery')) || (isSessionVariableSet('jquery'))) {
+ // Then use uncompressed
+ $jquery .= '.uncompressed';
+
+ // Remember it in session
+ setSession('jquery', '1');
+ } // END - if
+
+ // Add {%url%} around it
+ $replacer = '{%url' . $data['output_mode'] . '=js/' . $jquery . '.js?dummy=1%}';
+
+ // Replace the code
+ $code = replaceExpressionCode($data, $replacer);
+
+ // Return the (maybe) replaced code
+ return $code;
+}
+
// [EOF]
?>