} // END - if
// Wrapper until we merged to the EL branch
-function preCompileCode ($code, $template = '', $compiled = FALSE, $full = TRUE, $overwrite = FALSE) {
- return compileCode($code, FALSE, TRUE, $full);
+function preCompileCode ($code, $full = TRUE) {
+ return compileCode($code, $full);
}
// Setter for 'is_template_html'
}
// Output HTML code directly or 'render' it. You addionally switch the new-line character off
-function outputHtml ($htmlCode, $newLine = TRUE) {
+function outputHtml ($htmlCode = NULL, $newLine = TRUE) {
// Init output
if (!isset($GLOBALS['__output'])) {
$GLOBALS['__output'] = '';
//* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'getOutputMode()=' . getOutputMode() . ',htmlCode(length)=' . strlen($htmlCode) . ',output(length)=' . strlen($GLOBALS['__output']));
// Is there HTML-Code here?
- if (!empty($htmlCode)) {
+ if ((!is_null($htmlCode)) && (!empty($htmlCode))) {
// Yes, so we handle it as you have configured
switch (getOutputMode()) {
case 'render':
// Compile it
//* DEBUG: */ debugOutput('<pre>'.linenumberCode($code).'</pre>');
- $eval = '$newContent = "' . str_replace('{DQUOTE}', '"', compileCode(escapeQuotes($code), FALSE, TRUE, $enableCodes)) . '";';
+ $eval = '$newContent = "' . str_replace('{DQUOTE}', '"', compileCode(escapeQuotes($code), $enableCodes)) . '";';
//* DEBUG: */ if (!$insertComments) print('EVAL=<pre>'.linenumberCode($eval).'</pre>');
eval($eval);
//* DEBUG: */ if (!$insertComments) print('NEW=<pre>'.linenumberCode($newContent).'</pre>');
$GLOBALS['current_template'] = $template;
// Is there cache?
- if ((!isDebuggingTemplateCache()) && (isTemplateCached('html', $template))) {
+ if ((!isDebugTemplateCacheEnabled()) && (isTemplateCached('html', $template))) {
// Evaluate the cache
- eval(readTemplateCache('html', $template));
+ $templateContent = readTemplateCache('html', $template, $content);
} elseif (!isset($GLOBALS['template_eval']['html'][$template])) {
// Make all template names lowercase
$template = strtolower($template);
// Prepare eval() command
//* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Reached!');
- $GLOBALS['template_eval']['html'][$template] = '$ret = "' . getColorSwitchCode($template) . compileCode(escapeQuotes($code), FALSE, TRUE, TRUE, $compileCode) . '";';
+ $GLOBALS['template_eval']['html'][$template] = '$templateContent = "' . getColorSwitchCode($template) . compileCode(escapeQuotes($code), TRUE, $compileCode) . '";';
} elseif (substr($template, 0, 3) == 'js_') {
// JavaScripts don't like entities, dollar signs and timings
//* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Reached!');
- $GLOBALS['template_eval']['html'][$template] = '$ret = decodeEntities("' . compileRawCode(escapeJavaScriptQuotes($GLOBALS['template_content']['html'][$template]), FALSE, TRUE, TRUE, $compileCode) . '");';
+ $GLOBALS['template_eval']['html'][$template] = '$templateContent = decodeEntities("' . compileRawCode(escapeJavaScriptQuotes($GLOBALS['template_content']['html'][$template]), TRUE, $compileCode) . '");';
+ } elseif (isAjaxOutputMode()) {
+ // AJAX (JSON content)
+ //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Reached!');
+ $GLOBALS['template_eval']['html'][$template] = '$templateContent = "' . compileRawCode(escapeJavaScriptQuotes($GLOBALS['template_content']['html'][$template]), TRUE, $compileCode) . '";';
} else {
// Prepare eval() command, other output doesn't like entities, maybe
//* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Reached!');
- $GLOBALS['template_eval']['html'][$template] = '$ret = decodeEntities("' . compileRawCode(escapeQuotes($GLOBALS['template_content']['html'][$template]), FALSE, TRUE, TRUE, $compileCode) . '");';
+ $GLOBALS['template_eval']['html'][$template] = '$templateContent = decodeEntities("' . compileRawCode(escapeQuotes($GLOBALS['template_content']['html'][$template]), TRUE, $compileCode) . '");';
}
} elseif (isHtmlOutputMode()) {
// Add surrounding HTML comments to help finding bugs faster
- $ret = '<!-- Template ' . $template . ' - Start //-->' . $GLOBALS['template_content']['html'][$template] . '<!-- Template ' . $template . ' - End //-->';
+ $templateContent = '<!-- Template ' . $template . ' - Start //-->' . $GLOBALS['template_content']['html'][$template] . '<!-- Template ' . $template . ' - End //-->';
+ //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Reached!');
+ $GLOBALS['template_eval']['html'][$template] = '$templateContent = "' . getColorSwitchCode($template) . compileRawCode(escapeQuotes($templateContent), TRUE, $compileCode) . '";';
+ } elseif (isAjaxOutputMode()) {
+ // AJAX (JSON content)
//* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Reached!');
- $GLOBALS['template_eval']['html'][$template] = '$ret = "' . getColorSwitchCode($template) . compileRawCode(escapeQuotes($ret), FALSE, TRUE, TRUE, $compileCode) . '";';
+ $GLOBALS['template_eval']['html'][$template] = '$templateContent = "' . compileRawCode(escapeJavaScriptQuotes($GLOBALS['template_content']['html'][$template]), TRUE, $compileCode) . '";';
} else {
// JavaScript again
//* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Reached!');
- $GLOBALS['template_eval']['html'][$template] = '$ret = decodeEntities("' . compileRawCode(escapeJavaScriptQuotes($GLOBALS['template_content']['html'][$template]), FALSE, TRUE, TRUE, $compileCode) . '");';
+ $GLOBALS['template_eval']['html'][$template] = '$templateContent = decodeEntities("' . compileRawCode(escapeJavaScriptQuotes($GLOBALS['template_content']['html'][$template]), TRUE, $compileCode) . '");';
} // END - if
} elseif ((isAdmin()) || ((isInstalling()) && (!isInstalled()))) {
// Only admins shall see this warning or when installation mode is active
- $ret = '<div class="para">
+ $templateContent = '<div class="para">
{--TEMPLATE_404--}
</div>
<div class="para">
} // END - if
// Is there some content to output or return?
- if (!empty($ret)) {
- // Not empty so let's put it out! ;)
- if ($return === TRUE) {
- // Return the HTML code
- return $ret;
- } else {
- // Output directly
- outputHtml($ret);
- }
- } elseif (isDebugModeEnabled()) {
+ if ((empty($templateContent)) && (isDebugModeEnabled())) {
// Warning, empty output!
return 'E:' . $template . ',content=<pre>' . print_r($content, TRUE) . '</pre>';
+ } // END - if
+
+ // Not empty so let's put it out! ;)
+ if ($return === TRUE) {
+ // Return the HTML code
+ return $templateContent;
+ } else {
+ // Output directly
+ outputHtml($templateContent);
}
}
// Is content an array?
if (is_array($content)) {
// Add expiration to array
- if ((isExtensionInstalled('autopurge')) && (getAutoPurge() == '0')) {
+ if ((isExtensionInstalled('autopurge')) && (isConfigEntrySet('auto_purge')) && (getAutoPurge() == '0')) {
// Will never expire!
$content['expiration'] = '{--MAIL_WILL_NEVER_EXPIRE--}';
} elseif ((isExtensionInstalled('autopurge')) && (isConfigEntrySet('auto_purge'))) {
} // END - if
// Is there cache?
- if ((!isDebuggingTemplateCache()) && (isTemplateCached('email', $template))) {
+ if ((!isDebugTemplateCacheEnabled()) && (isTemplateCached('email', $template))) {
// Evaluate the cache
- eval(readTemplateCache('email', $template));
+ $templateContent = readTemplateCache('email', $template, $content);
} elseif (!isset($GLOBALS['template_eval']['email'][$template])) {
// Base directory
$basePath = sprintf("%stemplates/%s/emails/", getPath(), getLanguage());
} // END - if
// Now does the final template exists?
- $newContent = '';
+ $templateContent = '';
if (isFileReadable($FQFN)) {
// The local file does exists so we load it. :)
$GLOBALS['template_content']['email'][$template] = readFromFile($FQFN);
// Run code
- $GLOBALS['template_eval']['email'][$template] = '$newContent = decodeEntities("' . compileRawCode(escapeQuotes($GLOBALS['template_content']['email'][$template])) . '");';
+ //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Reached!');
+ $GLOBALS['template_eval']['email'][$template] = '$templateContent = decodeEntities("' . compileRawCode(escapeQuotes($GLOBALS['template_content']['email'][$template])) . '");';
} elseif (!empty($template)) {
// Template file not found
- $newContent = '<div class="para">
+ $templateContent = '<div class="para">
{--TEMPLATE_404--}: ' . $template . '
</div>
<div class="para">
// Debug mode not active? Then remove the HTML tags
if (!isDebugModeEnabled()) {
// Remove HTML tags
- $newContent = secureString($newContent);
+ $templateContent = secureString($templateContent);
} // END - if
} else {
// No template name supplied!
- $newContent = '{--NO_TEMPLATE_SUPPLIED--}';
+ $templateContent = '{--NO_TEMPLATE_SUPPLIED--}';
$GLOBALS['template_eval']['email'][$template] = '404';
}
}
if ((isset($GLOBALS['template_eval']['email'][$template])) && ($GLOBALS['template_eval']['email'][$template] != '404')) {
// Eval the code
//* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'template=' . $template . ' - BEFORE EVAL');
- ///* DEBUG: */ print('<pre>'.htmlentities($GLOBALS['template_eval']['email'][$template]).'</pre>');
+ //* DEBUG: */ print('<pre>'.htmlentities($GLOBALS['template_eval']['email'][$template]).'</pre>');
eval($GLOBALS['template_eval']['email'][$template]);
//* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'template=' . $template . ' - AFTER EVAL');
} // END - if
// Are there some content?
- if (empty($newContent)) {
+ if (empty($templateContent)) {
// Compiling failed
- $newContent = "Compiler error for template " . $template . " !\nUncompiled content:\n" . $GLOBALS['template_eval']['email'][$template];
+ $templateContent = "Compiler error for template " . $template . " !\nUncompiled content:\n" . $GLOBALS['template_eval']['email'][$template];
// Add last error if the required function exists
if (function_exists('error_get_last')) {
// Add last error and some lines for better overview
- $newContent .= "\n--------------------------------------\nDebug:\n" . print_r(error_get_last(), TRUE) . "--------------------------------------\nPlease don't alter these informations!\nThanx.";
+ $templateContent .= "\n--------------------------------------\nDebug:\n" . print_r(error_get_last(), TRUE) . "--------------------------------------\nPlease don't alter these informations!\nThanx.";
} // END - if
} // END - if
unset($content);
// Return content
- return $newContent;
+ return $templateContent;
}
// "Getter" for menu CSS classes, mainly used in templates
}
// Compiles the given HTML/mail code
-function compileCode ($code, $simple = FALSE, $constants = TRUE, $full = TRUE, $compileCode = TRUE) {
+function compileCode ($code, $full = TRUE, $compileCode = TRUE) {
// Is the code a string or should we not compile?
if ((!is_string($code)) || ($compileCode === FALSE)) {
// Silently return it
$startCompile = microtime(TRUE);
// Comile the code
- $code = compileRawCode($code, $simple, $constants, $full);
+ $code = compileRawCode($code, $full, $compileCode);
// Get timing
$compilationTime = $startCompile - microtime(TRUE);
}
// Compiles the code
-// @TODO $simple/$constants are deprecated
-function compileRawCode ($code, $simple = FALSE, $constants = TRUE, $full = TRUE, $compileCode = TRUE) {
+function compileRawCode ($code, $full = TRUE, $compileCode = TRUE) {
// Is the code a string or shall we not compile?
if ((!is_string($code)) || ($compileCode === FALSE)) {
// Silently return it
// Make sure, that the script realy realy diese here and now
$GLOBALS['app_died'] = TRUE;
- // Set content type as text/html
- setContentType('text/html');
+ // Is this AJAX mode?
+ if (isAjaxOutputMode()) {
+ // Set content type as application/json
+ setContentType('application/json');
+ } else {
+ // Set content type as text/html
+ setContentType('text/html');
+ }
// Load header
loadIncludeOnce('inc/header.php');
$message
);
- // Load the message template
- loadTemplate('app_exit_message', FALSE, $message);
+ // Is this AJAX mode again
+ if (isAjaxOutputMode()) {
+ // Load the message template
+ $OUT = loadTemplate('ajax_app_exit_message', TRUE, $message);
+
+ // Output it as JSON encoded
+ outputHtml(encodeJson(array('reply_content' => urlencode(doFinalCompilation($OUT)))));
+ } else {
+ // Load the message template
+ loadTemplate('app_exit_message', FALSE, $message);
+ }
// Load footer
loadIncludeOnce('inc/footer.php');
$pageTitle .= ' {%config,trim=title_middle%} {DQUOTE} . getModuleTitle(getModule()) . {DQUOTE}';
} // END - if
- // Add title from what file
- $menuMode = '';
- if (getModule() == 'login') {
- $menuMode = 'member';
- } elseif (getModule() == 'index') {
- $menuMode = 'guest';
- } elseif (getModule() == 'admin') {
- $menuMode = 'admin';
- } elseif (getModule() == 'sponsor') {
- $menuMode = 'sponsor';
- }
+ // Get menu mode from module
+ $menuMode = getMenuModeFromModule();
// Add middle part (always in admin area!)
if ((!empty($menuMode)) && ((isWhatTitleEnabled()) || ($menuMode == 'admin'))) {
// Flushes non-flushed template cache to disk
function flushTemplateCache ($prefix, $template, $eval) {
// Is this cache flushed?
- if ((isDebuggingTemplateCache() === FALSE) && (isTemplateCached($prefix, $template) === FALSE) && ($eval != '404')) {
+ if ((isDebugTemplateCacheEnabled() === FALSE) && (isTemplateCached($prefix, $template) === FALSE) && ($eval != '404')) {
// Generate FQFN
$FQFN = generateCacheFqfn($prefix, $template);
+ // Compile code another round for better performance and preserve $ signs
+ $eval = str_replace(array(chr(92), '{DOLLAR}', '{BACK}', '{CONTENT}'), array('', '$', chr(92), '$content'), compileCode(str_replace(array('$content', chr(92)), array('{CONTENT}', '{BACK}'), $eval)));
+
// Is this a XML template?
if ($prefix == 'xml') {
// Compact only XML templates as emails needs new-line characters and HTML may contain required "comments"
} // END - if
// And flush it
- writeToFile($FQFN, $eval, TRUE);
+ writeToFile($FQFN, '<?php ' . $eval . ' ?>', TRUE);
} // END - if
}
// Reads a template cache
-function readTemplateCache ($prefix, $template) {
+function readTemplateCache ($prefix, $template, $content) {
// Check it again
- if ((isDebuggingTemplateCache()) || (!isTemplateCached($prefix, $template))) {
+ if ((isDebugTemplateCacheEnabled()) || (!isTemplateCached($prefix, $template))) {
// This should not happen
- reportBug('Wether debugging of template cache is enabled or template ' . $template . ' is not cached while expected.');
+ reportBug(__FUNCTION__, __LINE__, 'Wether debugging of template cache is enabled or template ' . $template . ' is not cached while expected.');
} // END - if
// Is it cached?
// Generate FQFN
$FQFN = generateCacheFqfn($prefix, $template);
- // And read from it
- $GLOBALS['template_eval'][$prefix][$template] = readFromFile($FQFN);
+ /*
+ * And read from it.
+ *
+ * WARNING: Do not replace this include() call with loadInclude() as it
+ * would hide local variables away which is here required to make this
+ * work.
+ */
+ include($FQFN);
+
+ // Is the template cache valid?
+ if (!isset($templateContent)) {
+ // Please clear your cache!
+ reportBug(__FUNCTION__, __LINE__, 'Template ' . $template . ' uses old structure. Please delete all template cache files and reload.');
+ } // END - if
} // END - if
// And return it
- return $GLOBALS['template_eval'][$prefix][$template];
+ return $templateContent;
}
// Escapes quotes (default is only double-quotes)
$hash = encodeHashForCookie(getUserData('password'));
// Does the hash match or should we change it?
- if (($hash == getSession('u_hash')) || (postRequestElement('pass1') == postRequestElement('pass2'))) {
+ if (($hash == getSession('u_hash')) || (postRequestElement('password1') == postRequestElement('password2'))) {
// Load the data
$content = getUserDataArray();
if (!isset($GLOBALS['template_cache_fqfn'][$prefix][$template])) {
// Generate the FQFN
$GLOBALS['template_cache_fqfn'][$prefix][$template] = sprintf(
- "%s_compiled/%s/%s.tpl.cache",
+ '%s_compiled/%s/%s.tpl.cache',
getCachePath(),
$prefix,
$template
// Translates the "pool type" into human-readable
function translatePoolType ($type) {
// Return "translation"
- return sprintf("{--POOL_TYPE_%s--}", strtoupper($type));
+ return sprintf('{--POOL_TYPE_%s--}', strtoupper($type));
}
// "Translates" given time unit
return $OUT;
}
+// Helper function to add extra content for guest area (module=index and others)
+function doTemplateGuestFooterExtras ($templateName, $clear) {
+ // Init filter data
+ $filterData = array(
+ // Name of used template
+ 'template' => $templateName,
+ // Target array for gathered data
+ '__data' => array(),
+ // Where the HTML output will go
+ '__output' => '',
+ );
+
+ // Run the filter chain
+ $filterData = runFilterChain('guest_footer_extras', $filterData);
+
+ // Return output
+ return $filterData['__output'];
+}
+
// Helper function to add extra content for member area (module=login)
function doTemplateMemberFooterExtras ($templateName, $clear) {
// Is a member logged in?