]> git.mxchange.org Git - mailer.git/blobdiff - inc/functions.php
Further fixes for wrong getMaskedMessage() usage in 'compiled' code
[mailer.git] / inc / functions.php
index 03376db72e20103835833c2b16695e5e1b336895..5e7d2962d2adabc3e0a022d89c4b4fe8ff30dfc3 100644 (file)
@@ -49,10 +49,6 @@ function outputHtml ($htmlCode, $newLine = true) {
                $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
@@ -85,7 +81,7 @@ function outputHtml ($htmlCode, $newLine = true) {
 
                        default:
                                // Huh, something goes wrong or maybe you have edited config.php ???
-                               app_die(__FUNCTION__, __LINE__, '<strong>{--FATAL_ERROR--}:</strong> {--LANG_NO_RENDER_DIRECT--}');
+                               debug_report_bug(__FUNCTION__, __LINE__, '<strong>{--FATAL_ERROR--}:</strong> {--LANG_NO_RENDER_DIRECT--}');
                                break;
                } // END - switch
        } elseif ((getPhpCaching() == 'on') && ((!isset($GLOBALS['header'])) || (count($GLOBALS['header']) == 0))) {
@@ -97,11 +93,6 @@ function outputHtml ($htmlCode, $newLine = true) {
                        clearOutputBuffer();
                } // END - if
 
-               // Extension 'rewrite' installed?
-               if ((isExtensionActive('rewrite')) && (getOutputMode() != 1)) {
-                       $GLOBALS['output'] = rewriteLinksInCode($GLOBALS['output']);
-               } // END - if
-
                // Send all HTTP headers
                sendHttpHeaders();
 
@@ -111,11 +102,6 @@ function outputHtml ($htmlCode, $newLine = true) {
                // Output code here, DO NOT REMOVE! ;-)
                outputRawCode($GLOBALS['output']);
        } elseif ((getConfig('OUTPUT_MODE') == 'render') && (!empty($GLOBALS['output']))) {
-               // Rewrite links when rewrite extension is active
-               if ((isExtensionActive('rewrite')) && (getOutputMode() != 1)) {
-                       $GLOBALS['output'] = rewriteLinksInCode($GLOBALS['output']);
-               } // END - if
-
                // Send all HTTP headers
                sendHttpHeaders();
 
@@ -136,7 +122,7 @@ function sendHttpHeaders () {
        $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
@@ -150,36 +136,16 @@ function sendHttpHeaders () {
 
 // 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'], '{!') !== 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 = "' . compileCode(escapeQuotes($GLOBALS['output'])) . '";';
-               //* DEBUG: */ die('<pre>'.htmlentities($eval).'</pre>');
-               eval($eval);
-
-               // Was that eval okay?
-               if (empty($newContent)) {
-                       // Something went wrong!
-                       debug_report_bug('Evaluation error:<pre>' . linenumberCode($eval) . '</pre>', false);
-               } // END - if
+       // Do the final compilation
+       $GLOBALS['output'] = doFinalCompilation($GLOBALS['output']);
 
-               // Use it again
-               $GLOBALS['output'] = $newContent;
-
-               // Count round
-               $cnt++;
-       } // END - while
+       // Extension 'rewrite' installed?
+       if ((isExtensionActive('rewrite')) && (getOutputMode() != 1)) {
+               $GLOBALS['output'] = rewriteLinksInCode($GLOBALS['output']);
+       } // END - if
 
        // Compress it?
        if (!empty($_SERVER['HTTP_ACCEPT_ENCODING']) && (strpos('gzip', $_SERVER['HTTP_ACCEPT_ENCODING']) !== null)) {
@@ -203,6 +169,44 @@ function compileFinalOutput () {
        flushHeaders();
 }
 
+// Main compilation loop
+function doFinalCompilation ($code, $insertComments = true) {
+       // Insert comments? (Only valid with HTML templates, of course)
+       enableTemplateHtml($insertComments);
+
+       // Init counter
+       $cnt = 0;
+
+       // Compile all out
+       while (((strpos($code, '{--') !== false) || (strpos($code, '{DQUOTE}') !== 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: */ if ($insertComments) die('<pre>'.linenumberCode($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.
@@ -260,7 +264,7 @@ function getTotalFatalErrors () {
 // Load a template file and return it's content (only it's name; do not use ' or ")
 function loadTemplate ($template, $return = false, $content = array()) {
        // @TODO Remove this sanity-check if all is fine
-       if (!is_bool($return)) debug_report_bug('return is not bool (' . gettype($return) . ')');
+       if (!is_bool($return)) debug_report_bug(__FUNCTION__, __LINE__, 'return is not bool (' . gettype($return) . ')');
 
        // @TODO Try to rewrite all $DATA to $content
        global $DATA;
@@ -270,9 +274,6 @@ function loadTemplate ($template, $return = false, $content = array()) {
                // 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);
 
@@ -305,7 +306,7 @@ function loadTemplate ($template, $return = false, $content = array()) {
 
                        // Do we have to compile the code?
                        $ret = '';
-                       if ((strpos($GLOBALS['tpl_content'], '$') !== false) || (strpos($GLOBALS['tpl_content'], '{--') !== false) || (strpos($GLOBALS['tpl_content'], '{!') !== false) || (strpos($GLOBALS['tpl_content'], '{?') !== false) || (strpos($GLOBALS['tpl_content'], '{%') !== false)) {
+                       if ((strpos($GLOBALS['tpl_content'], '$') !== false) || (strpos($GLOBALS['tpl_content'], '{--') !== false) || (strpos($GLOBALS['tpl_content'], '{?') !== false) || (strpos($GLOBALS['tpl_content'], '{%') !== false)) {
                                // Normal HTML output?
                                if (getOutputMode() == '0') {
                                        // Add surrounding HTML comments to help finding bugs faster
@@ -328,9 +329,6 @@ function loadTemplate ($template, $return = false, $content = array()) {
 
                        // 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 />
@@ -345,10 +343,13 @@ function loadTemplate ($template, $return = false, $content = array()) {
                        // 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)) {
@@ -568,7 +569,7 @@ function sendEmail ($toEmail, $subject, $message, $isHtml = 'N', $mailHeader = '
        //* 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
@@ -577,24 +578,12 @@ function sendEmail ($toEmail, $subject, $message, $isHtml = 'N', $mailHeader = '
                        // 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('$', '&#36;', 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>
@@ -603,6 +592,9 @@ To      : ' . htmlentities(utf8_decode($toEmail)) . '
 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);
@@ -613,6 +605,9 @@ Message : ' . htmlentities(utf8_decode($message)) . '
                // Problem found!
                return sendRawEmail(getConfig('WEBMASTER'), '[PROBLEM:]' . $subject, $message, $mailHeader);
        }
+
+       // Why did we end up here? This should not happen
+       debug_report_bug(__FUNCTION__, __LINE__, 'Ending up: template=' . $template);
 }
 
 // Check to use wether legacy mail() command or PHPMailer class
@@ -625,10 +620,10 @@ function checkPhpMailerUsage() {
 // 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()) {
@@ -765,7 +760,7 @@ function translateYesNo ($yn) {
                        // Log unknown value
                        logDebugMessage(__FUNCTION__, __LINE__, sprintf("Unknown value %s. Expected Y/N!", $yn));
                        break;
-       }
+       } // END - switch
 
        // Return it
        return $translated;
@@ -825,7 +820,7 @@ function translateComma ($dotted, $cut = true, $max = '0') {
                default: // All others
                        $dotted = number_format($dotted, $maxComma, '.', ',');
                        break;
-       }
+       } // END - switch
 
        // Return translated value
        return $dotted;
@@ -843,7 +838,7 @@ function translateGender ($gender) {
                case 'C': $ret = getMessage('GENDER_C'); break;
                default:
                        // Please report bugs on unknown genders
-                       debug_report_bug(sprintf("Unknown gender %s detected.", $gender));
+                       debug_report_bug(__FUNCTION__, __LINE__, sprintf("Unknown gender %s detected.", $gender));
                        break;
        } // END - switch
 
@@ -868,7 +863,7 @@ function translateUserStatus ($status) {
 
                default:
                        // Please report all unknown status
-                       debug_report_bug(sprintf("Unknown status %s detected.", $status));
+                       debug_report_bug(__FUNCTION__, __LINE__, sprintf("Unknown status %s detected.", $status));
                        break;
        } // END - switch
 
@@ -876,6 +871,34 @@ function translateUserStatus ($status) {
        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(__FUNCTION__, __LINE__, '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(__FUNCTION__, __LINE__, '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!
@@ -958,26 +981,32 @@ function redirectToUrl ($URL, $allowSpider = true) {
        } // END - if
 
        // Three different ways to debug...
-       //* DEBUG: */ debug_report_bug(sprintf("%s[%s:] URL=%s", __FUNCTION__, __LINE__, $URL));
+       //* DEBUG: */ debug_report_bug(__FUNCTION__, __LINE__, sprintf("%s[%s:] URL=%s", __FUNCTION__, __LINE__, $URL));
        //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'URL=' . $URL);
        //* DEBUG: */ die($URL);
 
        // 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 HTTP-Status
+               setHttpStatus('200 OK');
 
                // 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('&amp;', '&', $URL));
+               sendRawRedirect(doFinalCompilation(str_replace('&amp;', '&', $URL), false));
        } else {
                // Output error message
                loadInclude('inc/header.php');
@@ -991,17 +1020,8 @@ function redirectToUrl ($URL, $allowSpider = true) {
 
 // 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(sprintf("Configuration entry %s is not set!", $configEntry));
-       } // END - if
-
        // Load the URL
-       redirectToUrl($URL);
+       redirectToUrl(getConfig($configEntry));
 }
 
 // Compiles the given HTML/mail code
@@ -1021,15 +1041,18 @@ function compileCode ($code, $simple = false, $constants = true, $full = true) {
        // 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;
 }
 
 // Compiles the code (use compileCode() only for HTML because of the comments)
-// @TODO $simple is deprecated
+// @TODO $simple/$constants are deprecated
 function compileRawCode ($code, $simple = false, $constants = true, $full = true) {
        // Is the code a string?
        if (!is_string($code)) {
@@ -1046,16 +1069,8 @@ function compileRawCode ($code, $simple = false, $constants = true, $full = true
        // Compile more through a filter
        $code = runFilterChain('compile_code', $code);
 
-       // Compile constants
-       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));
-
-               // BEFORE 0.2.1 : Not used
-               // WITH 0.2.1+  : Data constants
-               $code = str_replace('{!', "\" . constant('", str_replace('!}', "') . \"", $code));
-       } // END - if
+       // Compile message strings
+       $code = str_replace('{--', '{%message,', str_replace('--}', '%}', $code));
 
        // Compile QUOT and other non-HTML codes
        foreach ($secChars['to'] as $k => $to) {
@@ -1345,7 +1360,7 @@ function bigintval ($num, $castValue = true, $abortOnMismatch = true) {
        // Has the whole value changed?
        if (('' . $ret . '' != '' . $num . '') && ($abortOnMismatch === true)) {
                // Log the values
-               debug_report_bug('Problem with number found. ret=' . $ret . ', num='. $num);
+               debug_report_bug(__FUNCTION__, __LINE__, 'Problem with number found. ret=' . $ret . ', num='. $num);
        } // END - if
 
        // Return result
@@ -1357,7 +1372,7 @@ function generateImageOrCode ($img_code, $headerSent = true) {
        // Is the code size oversized or shouldn't we display it?
        if ((strlen($img_code) > 6) || (empty($img_code)) || (getConfig('code_length') == '0')) {
                // Stop execution of function here because of over-sized code length
-               debug_report_bug('img_code ' . $img_code .' has invalid length. img_code()=' . strlen($img_code) . ' code_length=' . getConfig('code_length'));
+               debug_report_bug(__FUNCTION__, __LINE__, 'img_code ' . $img_code .' has invalid length. img_code()=' . strlen($img_code) . ' code_length=' . getConfig('code_length'));
        } elseif ($headerSent === false) {
                // Return an HTML code here
                return '<img src="{%url=img.php?code=' . $img_code . '%}" alt="Image" />';
@@ -1708,7 +1723,10 @@ function addEmailNavigation ($PAGES, $offset, $show_form, $colspan, $return=fals
                }
 
                // Add seperator if we have not yet reached total pages
-               if ($page < $PAGES) $NAV .= '&nbsp;|&nbsp;';
+               if ($page < $PAGES) {
+                       // Add it
+                       $NAV .= '|';
+               } // END - if
        } // END - for
 
        // Define constants only once
@@ -2075,13 +2093,13 @@ function isUrlValid ($URL, $compile=true) {
 // Generate a list of administrative links to a given userid
 function generateMemberAdminActionLinks ($userid, $status = '') {
        // Make sure userid is a number
-       if ($userid != bigintval($userid)) debug_report_bug('userid is not a number!');
+       if ($userid != bigintval($userid)) debug_report_bug(__FUNCTION__, __LINE__, 'userid is not a number!');
 
        // Define all main targets
        $targetArray = array('del_user', 'edit_user', 'lock_user', 'add_points', 'sub_points');
 
        // Begin of navigation links
-       $OUT = '[&nbsp;';
+       $OUT = '[';
 
        foreach ($targetArray as $tar) {
                $OUT .= '<span class="admin_user_link"><a href="{%url=modules.php?module=admin&amp;what=' . $tar . '&amp;userid=' . $userid . '%}" title="{--ADMIN_LINK_';
@@ -2101,7 +2119,7 @@ function generateMemberAdminActionLinks ($userid, $status = '') {
                        // All other status is fine
                        $OUT .= strtoupper($tar);
                }
-               $OUT .= '--}</a></span>&nbsp;|&nbsp;';
+               $OUT .= '--}</a></span>|';
        }
 
        // Finish navigation link
@@ -2156,7 +2174,7 @@ function generateHash ($plainText, $salt = '', $hash = true) {
        // Do we miss an arry element here?
        if (!isConfigEntrySet('file_hash')) {
                // Stop here
-               debug_report_bug('Missing file_hash in ' . __FUNCTION__ . '.');
+               debug_report_bug(__FUNCTION__, __LINE__, 'Missing file_hash in ' . __FUNCTION__ . '.');
        } // END - if
 
        // When the salt is empty build a new one, else use the first x configured characters as the salt
@@ -2363,10 +2381,7 @@ function app_die ($F, $L, $message) {
                loadIncludeOnce('inc/header.php');
 
                // Rewrite message for output
-               $message = sprintf(getMessage('MXCHANGE_HAS_DIED'), basename($F), $L, $message);
-
-               // Better log this message away
-               if ($F != 'debug_report_bug') logDebugMessage($F, $L, $message);
+               $message = sprintf(getMessage('MAILER_HAS_DIED'), basename($F), $L, $message);
 
                // Load the message template
                loadTemplate('app_die_message', false, $message);
@@ -2375,12 +2390,12 @@ function app_die ($F, $L, $message) {
                loadIncludeOnce('inc/footer.php');
        } else {
                // Script tried to kill itself twice
-               debug_report_bug('Script wanted to kill itself more than once! Raw message=' . $message . ', file/function=' . $F . ', line=' . $L);
+               die('['.__FUNCTION__.':'.__LINE__.']: Script wanted to kill itself more than once! Raw message=' . $message . ', file/function=' . $F . ', line=' . $L);
        }
 }
 
 // Display parsing time and number of SQL queries in footer
-function displayParsingTime() {
+function displayParsingTime () {
        // Is the timer started?
        if (!isset($GLOBALS['startTime'])) {
                // Abort here
@@ -2397,9 +2412,10 @@ function displayParsingTime() {
        if ($runTime < 0) $runTime = '0';
 
        // Prepare output
+       // @TODO This can be easily moved out after the merge from EL branch to this is complete
        $content = array(
-               'runtime'  => translateComma($runTime),
-               'timeSQLs' => translateComma(getConfig('sql_time') * 1000),
+               'run_time' => $runTime,
+               'sql_time' => translateComma(getConfig('sql_time') * 1000),
        );
 
        // Load the template
@@ -2523,7 +2539,7 @@ function debug_get_mailable_backtrace () {
 }
 
 // Output a debug backtrace to the user
-function debug_report_bug ($message = '', $sendEmail = true) {
+function debug_report_bug ($F, $L, $message = '', $sendEmail = true) {
        // Is this already called?
        if (isset($GLOBALS[__FUNCTION__])) {
                // Other backtrace
@@ -2546,7 +2562,7 @@ function debug_report_bug ($message = '', $sendEmail = true) {
                );
 
                // @TODO Add a little more infos here
-               logDebugMessage(__FUNCTION__, __LINE__, strip_tags($message));
+               logDebugMessage($F, $L, strip_tags($message));
        } // END - if
 
        // Add output
@@ -2568,7 +2584,7 @@ function debug_report_bug ($message = '', $sendEmail = true) {
        } // END - if
 
        // And abort here
-       app_die(__FUNCTION__, __LINE__, $debug);
+       app_die($F, $L, $debug);
 }
 
 // Generates a ***weak*** seed
@@ -2615,7 +2631,7 @@ function getMessageFromErrorCode ($code) {
                        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;
 
@@ -2630,7 +2646,7 @@ function getMessageFromErrorCode ($code) {
                case getCode('URL_TLOCK'):
                        // @TODO Move this SQL code into a function, let's say 'getTimestampFromPoolId($id) ?
                        $result = SQL_QUERY_ESC("SELECT `timestamp` FROM `{?_MYSQL_PREFIX?}_pool` WHERE `id`=%s LIMIT 1",
-                               array(bigintval(getRequestParameter('id'))), __FILE__, __LINE__);
+                               array(bigintval(getRequestParameter('id'))), __FUNCTION__, __LINE__);
 
                        // Load timestamp from last order
                        list($timestamp) = SQL_FETCHROW($result);
@@ -2852,8 +2868,8 @@ function logDebugMessage ($funcFile, $line, $message, $force=true) {
                // Remove CRLF
                $message = str_replace("\r", '', str_replace("\n", '', $message));
 
-               // Log this message away, we better don't call app_die() here to prevent an endless loop
-               $fp = fopen(getConfig('CACHE_PATH') . 'debug.log', 'a') or die(__FUNCTION__.'['.__LINE__.']: Cannot write logfile debug.log!');
+               // Log this message away
+               $fp = fopen(getConfig('CACHE_PATH') . 'debug.log', 'a') or debug_report_bug(__FUNCTION__, __LINE__, 'Cannot write logfile debug.log!');
                fwrite($fp, date('d.m.Y|H:i:s', time()) . '|' . getModule(false) . '|' . basename($funcFile) . '|' . $line . '|' . $message . "\n");
                fclose($fp);
        } // END - if
@@ -3147,10 +3163,10 @@ function shutdown () {
        // Check if not in installation phase and the link is up
        if ((!isInstallationPhase()) && (SQL_IS_LINK_UP())) {
                // Close link
-               SQL_CLOSE(__FILE__, __LINE__);
+               SQL_CLOSE(__FUNCTION__, __LINE__);
        } elseif (!isInstallationPhase()) {
                // No database link
-               addFatalMessage(__FILE__, __LINE__, getMessage('NO_DB_LINK_SHUTDOWN'));
+               addFatalMessage(__FUNCTION__, __LINE__, getMessage('NO_DB_LINK_SHUTDOWN'));
        }
 
        // Stop executing here
@@ -3165,7 +3181,7 @@ function initMemberId () {
 // Setter for member id
 function setMemberId ($memberid) {
        // We should not set member id to zero
-       if ($memberid == '0') debug_report_bug('Userid should not be set zero.');
+       if ($memberid == '0') debug_report_bug(__FUNCTION__, __LINE__, 'Userid should not be set zero.');
 
        // Set it secured
        $GLOBALS['member_id'] = bigintval($memberid);
@@ -3218,7 +3234,7 @@ function getExtraTitle () {
        // Is the extra title set?
        if (!isExtraTitleSet()) {
                // No, then abort here
-               debug_report_bug('extra_title is not set!');
+               debug_report_bug(__FUNCTION__, __LINE__, 'extra_title is not set!');
        } // END - if
 
        // Return it
@@ -3260,12 +3276,12 @@ function generateExtensionNotInstalledMessage ($ext_name) {
        } // END - if
 
        // Default message
-       $message = getMaskedMessage('EXTENSION_PROBLEM_EXT_NOT_INSTALLED', $ext_name);
+       $message = getMaskedMessage('EXTENSION_PROBLEM_EXTENSION_NOT_INSTALLED', $ext_name);
 
        // Is an admin logged in?
        if (isAdmin()) {
                // Then output admin message
-               $message = getMaskedMessage('ADMIN_EXTENSION_PROBLEM_EXT_NOT_INSTALLED', $ext_name);
+               $message = getMaskedMessage('ADMIN_EXTENSION_PROBLEM_EXTENSION_NOT_INSTALLED', $ext_name);
        } // END - if
 
        // Return prepared message
@@ -3313,7 +3329,7 @@ function getArrayFromDirectory ($baseDir, $prefix, $fileIncludeDirs = false, $ad
        $files = array();
 
        // Open directory
-       $dirPointer = opendir(getConfig('PATH') . $baseDir) or app_die(__FUNCTION__, __LINE__, 'Cannot read directory ' . basename($baseDir) . '.');
+       $dirPointer = opendir(getConfig('PATH') . $baseDir) or debug_report_bug(__FUNCTION__, __LINE__, 'Cannot read directory ' . basename($baseDir) . '.');
 
        // Read all entries
        while ($baseFile = readdir($dirPointer)) {
@@ -3387,7 +3403,7 @@ function getArrayFromDirectory ($baseDir, $prefix, $fileIncludeDirs = false, $ad
                                }
                        } else {
                                // We found .php file but should not search for them, why?
-                               debug_report_bug('We should find files with extension=' . $extension . ', but we found a PHP script.');
+                               debug_report_bug(__FUNCTION__, __LINE__, 'We should find files with extension=' . $extension . ', but we found a PHP script.');
                        }
                } elseif (substr($baseFile, -4, 4) == $extension) {
                        // Other, generic file found
@@ -3466,7 +3482,7 @@ function initCacheInstance () {
        $GLOBALS['cache_instance'] = new CacheSystem();
        if ($GLOBALS['cache_instance']->getStatus() != 'done') {
                // Failed to initialize cache sustem
-               addFatalMessage(__FILE__, __LINE__, '(<font color="#0000aa">' . __LINE__ . '</font>): ' . getMessage('CACHE_CANNOT_INITIALIZE'));
+               addFatalMessage(__FUNCTION__, __LINE__, '(<font color="#0000aa">' . __LINE__ . '</font>): {--CACHE_CANNOT_INITIALIZE--}');
        } // END - if
 }
 
@@ -3552,16 +3568,16 @@ function determinePageTitle () {
                $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');
 
                // Do not add the fatal message in installation mode
-               if ((!isInstalling()) && (!isConfigurationLoaded())) addFatalMessage(__FILE__, __LINE__, getMessage('NO_CONFIG_FOUND'));
+               if ((!isInstalling()) && (!isConfigurationLoaded())) addFatalMessage(__FUNCTION__, __LINE__, getMessage('NO_CONFIG_FOUND'));
        }
 
        // Return title
@@ -3590,9 +3606,6 @@ function flushTemplateCache ($template, $eval) {
                // 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
@@ -3748,7 +3761,7 @@ function sendModeMails ($mod, $modes) {
 }
 
 // Generates a 'selection box' from given array
-function generateSelectionBoxFromArray ($options, $name, $optionValue, $optionContent='') {
+function generateSelectionBoxFromArray ($options, $name, $optionValue, $optionContent = '', $extraName = '') {
        // Start the output
        $OUT = '<select name="' . $name . '" size="1" class="admin_select">
 <option value="X" disabled="disabled">{--PLEASE_SELECT--}</option>';
@@ -3758,7 +3771,7 @@ function generateSelectionBoxFromArray ($options, $name, $optionValue, $optionCo
                // Add the <option> entry
                if (empty($optionContent)) {
                        // ... from template
-                       $OUT .= loadTemplate('select_' . $name . '_option', true, $option);
+                       $OUT .= loadTemplate('select_' . $name . $extraName . '_option', true, $option);
                } else {
                        // Direct HTML code
                        $OUT .= '<option value="' . $option[$optionValue] . '">' . $option[$optionContent] . '</option>';
@@ -3776,7 +3789,7 @@ function generateSelectionBoxFromArray ($options, $name, $optionValue, $optionCo
        );
 
        // Load template and return it
-       return loadTemplate('select_' . $name . '_box', true, $content);
+       return loadTemplate('select_' . $name . $extraName . '_box', true, $content);
 }
 
 // Get a module from filename and access level
@@ -3797,7 +3810,7 @@ function getModuleFromFileName ($file, $accessLevel) {
                        break;
 
                default: // Unsupported file name / access level
-                       debug_report_bug('Unsupported file name=' . basename($file) . '/access level=' . $accessLevel);
+                       debug_report_bug(__FUNCTION__, __LINE__, 'Unsupported file name=' . basename($file) . '/access level=' . $accessLevel);
                        break;
        }