$GLOBALS['output'] = '';
} // END - if
- // Transfer username
- $username = getMessage('USERNAME_UNKNOWN');
- if (isset($GLOBALS['username'])) $username = getUsername();
-
// Do we have HTML-Code here?
if (!empty($htmlCode)) {
// Yes, so we handle it as you have configured
$now = gmdate('D, d M Y H:i:s') . ' GMT';
// Send HTTP header
- sendHeader('HTTP/1.1 200 OK');
+ sendHeader('HTTP/1.1 ' . getHttpStatus());
// General headers for no caching
sendHeader('Expires: ' . $now); // RFC2616 - Section 14.21
// Compiles the final output
function compileFinalOutput () {
- // Init counter
- $cnt = 0;
-
// Add page header and footer
addPageHeaderFooter();
- // Compile all out
- while (((strpos($GLOBALS['output'], '{--') !== false) || (strpos($GLOBALS['output'], '{DQUOTE}') !== false) || (strpos($GLOBALS['output'], '{!') !== false) || (strpos($GLOBALS['output'], '{?') !== false) || (strpos($GLOBALS['output'], '{%') !== false)) && ($cnt < 3)) {
- // Init common variables
- $content = array();
- $newContent = '';
-
- // Compile it
- //* DEBUG: */ print '<pre>'.htmlentities($GLOBALS['output']).'</pre>';
- $eval = '$newContent = "' . str_replace('{DQUOTE}', '"', compileCode(escapeQuotes($GLOBALS['output']))) . '";';
- //* DEBUG: */ die('<pre>'.htmlentities($eval).'</pre>');
- eval($eval);
- //* DEBUG: */ die('<pre>'.htmlentities($newContent).'</pre>');
-
- // Was that eval okay?
- if (empty($newContent)) {
- // Something went wrong!
- debug_report_bug(__FUNCTION__, __LINE__, 'Evaluation error:<pre>' . linenumberCode($eval) . '</pre>', false);
- } // END - if
-
- // Use it again
- $GLOBALS['output'] = $newContent;
-
- // Count round
- $cnt++;
- } // END - while
+ // Do the final compilation
+ $GLOBALS['output'] = doFinalCompilation($GLOBALS['output']);
// Extension 'rewrite' installed?
if ((isExtensionActive('rewrite')) && (getOutputMode() != 1)) {
flushHeaders();
}
+// Main compilation loop
+function doFinalCompilation ($code, $insertComments = true) {
+ // Insert comments?
+ enableTemplateHtml($insertComments);
+
+ // Init counter
+ $cnt = 0;
+
+ // Compile all out
+ while (((strpos($code, '{--') !== false) || (strpos($code, '{DQUOTE}') !== false) || (strpos($code, '{!') !== false) || (strpos($code, '{?') !== false) || (strpos($code, '{%') !== false)) && ($cnt < 3)) {
+ // Init common variables
+ $content = array();
+ $newContent = '';
+
+ // Compile it
+ //* DEBUG: */ print '<pre>'.htmlentities($code).'</pre>';
+ $eval = '$newContent = "' . str_replace('{DQUOTE}', '"', compileCode(escapeQuotes($code))) . '";';
+ //* DEBUG: */ die('<pre>'.htmlentities($eval).'</pre>');
+ eval($eval);
+ //* DEBUG: */ die('<pre>'.htmlentities($newContent).'</pre>');
+
+ // Was that eval okay?
+ if (empty($newContent)) {
+ // Something went wrong!
+ debug_report_bug(__FUNCTION__, __LINE__, 'Evaluation error:<pre>' . linenumberCode($eval) . '</pre>', false);
+ } // END - if
+
+ // Use it again
+ $code = $newContent;
+
+ // Count round
+ $cnt++;
+ } // END - while
+
+ // Return the compiled code
+ return $code;
+}
+
// Output the raw HTML code
function outputRawCode ($htmlCode) {
// Output stripped HTML code to avoid broken JavaScript code, etc.
// Evaluate the cache
eval(readTemplateCache($template));
} elseif (!isset($GLOBALS['template_eval'][$template])) {
- // Add more variables which you want to use in your template files
- $username = getUsername();
-
// Make all template names lowercase
$template = strtolower($template);
// Cache the eval() command here
$GLOBALS['template_eval'][$template] = $eval;
-
- // Eval the code
- eval($GLOBALS['template_eval'][$template]);
} elseif ((isAdmin()) || ((isInstalling()) && (!isInstalled()))) {
// Only admins shall see this warning or when installation mode is active
$ret = '<br /><span class="guest_failed">{--TEMPLATE_404--}</span><br />
// No file!
$GLOBALS['template_eval'][$template] = '404';
}
- } else {
+ }
+
+ // Code set?
+ if ((isset($GLOBALS['template_eval'][$template])) && ($GLOBALS['template_eval'][$template] != '404')) {
// Eval the code
eval($GLOBALS['template_eval'][$template]);
- }
+ } // END - if
// Do we have some content to output or return?
if (!empty($ret)) {
//* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "TO={$toEmail}<br />");
// Check for PHPMailer or debug-mode
- if (!checkPhpMailerUsage()) {
+ if ((!checkPhpMailerUsage()) || (isDebugModeEnabled())) {
// Not in PHPMailer-Mode
if (empty($mailHeader)) {
// Load email header template
// Append header
$mailHeader .= loadEmailTemplate('header');
}
- } elseif (isDebugModeEnabled()) {
- if (empty($mailHeader)) {
- // Load email header template
- $mailHeader = loadEmailTemplate('header');
- } else {
- // Append header
- $mailHeader .= loadEmailTemplate('header');
- }
- }
-
- // Compile "TO"
- eval('$toEmail = "' . compileRawCode(escapeQuotes($toEmail)) . '";');
-
- // Compile "MSG"
- eval('$message = "' . str_replace('$', '$', compileRawCode(escapeQuotes($message))) . '";');
+ } // END - if
// Fix HTML parameter (default is no!)
if (empty($isHtml)) $isHtml = 'N';
+
+ // Debug mode enabled?
if (isDebugModeEnabled()) {
// In debug mode we want to display the mail instead of sending it away so we can debug this part
outputHtml('<pre>
Subject : ' . htmlentities(utf8_decode($subject)) . '
Message : ' . htmlentities(utf8_decode($message)) . '
</pre>');
+
+ // This is always fine
+ return true;
} elseif (($isHtml == 'Y') && (isExtensionActive('html_mail'))) {
// Send mail as HTML away
return sendHtmlEmail($toEmail, $subject, $message, $mailHeader);
// Problem found!
return sendRawEmail(getConfig('WEBMASTER'), '[PROBLEM:]' . $subject, $message, $mailHeader);
}
+
+ // Why did we end up here? This should not happen
+ debug_report_bug('Ending up: template=' . $template);
}
// Check to use wether legacy mail() command or PHPMailer class
// Send out a raw email with PHPMailer class or legacy mail() command
function sendRawEmail ($toEmail, $subject, $message, $from) {
// Just compile all again, to put out all configs, etc.
- eval('$toEmail = decodeEntities("' . compileRawCode(escapeQuotes($toEmail)) . '");');
- eval('$subject = decodeEntities("' . compileRawCode(escapeQuotes($subject)) . '");');
- eval('$message = decodeEntities("' . compileRawCode(escapeQuotes($message)) . '");');
- eval('$from = decodeEntities("' . compileRawCode(escapeQuotes($from)) . '");');
+ eval('$toEmail = decodeEntities("' . doFinalCompilation(compileRawCode(escapeQuotes($toEmail)), false) . '");');
+ eval('$subject = decodeEntities("' . doFinalCompilation(compileRawCode(escapeQuotes($subject)), false) . '");');
+ eval('$message = decodeEntities("' . doFinalCompilation(compileRawCode(escapeQuotes($message)), false) . '");');
+ eval('$from = decodeEntities("' . doFinalCompilation(compileRawCode(escapeQuotes($from)) , false) . '");');
// Shall we use PHPMailer class or legacy mode?
if (checkPhpMailerUsage()) {
// Log unknown value
logDebugMessage(__FUNCTION__, __LINE__, sprintf("Unknown value %s. Expected Y/N!", $yn));
break;
- }
+ } // END - switch
// Return it
return $translated;
default: // All others
$dotted = number_format($dotted, $maxComma, '.', ',');
break;
- }
+ } // END - switch
// Return translated value
return $dotted;
return $ret;
}
+// "Translates" 'visible' and 'locked' to a CSS class
+function translateMenuVisibleLocked ($content, $prefix = '') {
+ // Translate 'visible' and keep an eye on the prefix
+ switch ($content[$prefix . 'visible']) {
+ // Should be visible
+ case 'Y': $content[$prefix . 'visible_css'] = $prefix . 'menu_visible' ; break;
+ case 'N': $content[$prefix . 'visible_css'] = $prefix . 'menu_invisible'; break;
+ default:
+ // Please report this
+ debug_report_bug('Unsupported visible value detected. content=<pre>'.print_r($content, true).'</pre>');
+ break;
+ } // END - switch
+
+ // Translate 'locked' and keep an eye on the prefix
+ switch ($content[$prefix . 'locked']) {
+ // Should be locked
+ case 'Y': $content[$prefix . 'locked_css'] = $prefix . 'menu_locked' ; break;
+ case 'N': $content[$prefix . 'locked_css'] = $prefix . 'menu_unlocked'; break;
+ default:
+ // Please report this
+ debug_report_bug('Unsupported locked value detected. content=<pre>'.print_r($content, true).'</pre>');
+ break;
+ } // END - switch
+
+ // Return the resulting array
+ return $content;
+}
+
// Generates an URL for the dereferer
function generateDerefererUrl ($URL) {
// Don't de-refer our own links!
// Simple probe for bots/spiders from search engines
if ((isSpider()) && ($allowSpider === true)) {
- // Secure the URL against bad things such als HTML insertions and so on...
- $URL = secureString($URL);
-
// Set content-type here to fix a missing array element
setContentType('text/html');
// Output new location link as anchor
- outputHtml('<a href="' . $URL . '"' . $rel . '>' . $URL . '</a>');
+ outputHtml('<a href="' . $URL . '"' . $rel . '>' . secureString($URL) . '</a>');
} elseif (!headers_sent()) {
+ // Clear output buffer
+ clearOutputBuffer();
+
// Clear own output buffer
$GLOBALS['output'] = '';
+ // Set header
+ setHttpStatus('302 Found');
+
// Load URL when headers are not sent
- sendHeader('Location: '.str_replace('&', '&', $URL));
+ sendRawRedirect(doFinalCompilation(str_replace('&', '&', $URL), false));
} else {
// Output error message
loadInclude('inc/header.php');
// Wrapper for redirectToUrl but URL comes from a configuration entry
function redirectToConfiguredUrl ($configEntry) {
- // Get the URL
- $URL = getConfig($configEntry);
-
- // Is this URL set?
- if (is_null($URL)) {
- // Then abort here
- debug_report_bug(__FUNCTION__, __LINE__, sprintf("Configuration entry %s is not set!", $configEntry));
- } // END - if
-
// Load the URL
- redirectToUrl($URL);
+ redirectToUrl(getConfig($configEntry));
}
// Compiles the given HTML/mail code
// Get timing
$compiled = microtime(true);
- // Add timing
- $code .= '<!-- Compilation time: ' . (($compiled - $startCompile) * 1000). 'ms //-->';
+ // Add timing if enabled
+ if (isTemplateHtml()) {
+ // Add timing, this should be disabled in
+ $code .= '<!-- Compilation time: ' . (($compiled - $startCompile) * 1000). 'ms //-->';
+ } // END - if
// Return compiled code
return $code;
if ($constants === true) {
// BEFORE 0.2.1 : Language and data constants
// WITH 0.2.1+ : Only language constants
- $code = str_replace('{--', "\" . getMessage('", str_replace('--}', "') . \"", $code));
+ $code = str_replace('{--', "{DQUOTE} . getMessage('", str_replace('--}', "') . {DQUOTE}", $code));
// BEFORE 0.2.1 : Not used
// WITH 0.2.1+ : Data constants
- $code = str_replace('{!', "\" . constant('", str_replace('!}', "') . \"", $code));
+ $code = str_replace('{!', "{DQUOTE} . constant('", str_replace('!}', "') . {DQUOTE}", $code));
} // END - if
// Compile QUOT and other non-HTML codes
// Rewrite message for output
$message = sprintf(getMessage('MAILER_HAS_DIED'), basename($F), $L, $message);
- // We don't want to log messages from debug_report_bug() itself...
- if ($F != 'debug_report_bug') {
- // Better log this message away
- logDebugMessage($F, $L, $message);
- } // END - if
-
// Load the message template
loadTemplate('app_die_message', false, $message);
// Prepare output
// @TODO This can be easily moved out after the merge from EL branch to this is complete
$content = array(
- 'run_time' => translateComma($runTime),
+ 'run_time' => $runTime,
'sql_time' => translateComma(getConfig('sql_time') * 1000),
);
if (isExtensionActive('mailid', true)) {
$message = getMessage('ERROR_CONFIRMING_MAIL');
} else {
- $message = getMaskedMessage('EXTENSION_PROBLEM_NOT_INSTALLED', 'mailid');
+ $message = getMaskedMessage('EXTENSION_PROBLEM_EXTENSION_NOT_INSTALLED', 'mailid');
}
break;
$pageTitle = '[-- ' . getConfig('MAIN_TITLE') . ' - ' . getModuleTitle(getModule()) . ' --]';
} elseif ((isInstalled()) && (!isAdminRegistered())) {
// Installed but no admin registered
- $pageTitle = getMessage('SETUP_OF_MXCHANGE');
+ $pageTitle = getMessage('SETUP_OF_MAILER');
} elseif ((!isInstalled()) || (!isAdminRegistered())) {
// Installation mode
- $pageTitle = getMessage('INSTALLATION_OF_MXCHANGE');
+ $pageTitle = getMessage('INSTALLATION_OF_MAILER');
} else {
// Configuration not found!
$pageTitle = getMessage('NO_CONFIG_FOUND_TITLE');
// Generate FQFN
$FQFN = generateCacheFqfn($template);
- // Replace username with a call
- $eval = str_replace('$username', '".getUsername()."', $eval);
-
// And flush it
writeToFile($FQFN, $eval, true);
} // END - if
// Prepares the header for HTML output
function loadHtmlHeader () {
+ // Enable HTML templates
+ enableTemplateHtml();
+
// Run two filters:
// 1.) pre_page_header (mainly loads the page_header template and includes
// meta description)