]> git.mxchange.org Git - mailer.git/blobdiff - inc/functions.php
Next wave of lesser getMessage()
[mailer.git] / inc / functions.php
index bac7b16a82c2a885ece8cd0f7738929d43bf0ecf..107542e91f55811176def121dbff5a08e4c21e8f 100644 (file)
@@ -171,22 +171,22 @@ function compileFinalOutput () {
 
 // Main compilation loop
 function doFinalCompilation ($code, $insertComments = true) {
-       // Insert comments?
+       // 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) || (strpos($code, '{%') !== false)) && ($cnt < 3)) {
+       while (((strpos($code, '{--') !== false) || (strpos($code, '{DQUOTE}') !== false) || (strpos($code, '{?') !== false) || (strpos($code, '{%') !== false)) && ($cnt < 4)) {
                // Init common variables
                $content = array();
                $newContent = '';
 
                // Compile it
-               //* DEBUG: */ print '<pre>'.htmlentities($code).'</pre>';
+               //* DEBUG: */ debugOutput('<pre>'.htmlentities($code).'</pre>');
                $eval = '$newContent = "' . str_replace('{DQUOTE}', '"', compileCode(escapeQuotes($code))) . '";';
-               //* DEBUG: */ die('<pre>'.htmlentities($eval).'</pre>');
+               //* DEBUG: */ if ($insertComments) die('<pre>'.linenumberCode($eval).'</pre>');
                eval($eval);
                //* DEBUG: */ die('<pre>'.htmlentities($newContent).'</pre>');
 
@@ -270,7 +270,7 @@ function loadTemplate ($template, $return = false, $content = array()) {
        global $DATA;
 
        // Do we have cache?
-       if (isTemplateCached($template)) {
+       if ((isDebuggingTemplateCache() === false) && (isTemplateCached($template))) {
                // Evaluate the cache
                eval(readTemplateCache($template));
        } elseif (!isset($GLOBALS['template_eval'][$template])) {
@@ -306,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
@@ -331,14 +331,18 @@ function loadTemplate ($template, $return = false, $content = array()) {
                        $GLOBALS['template_eval'][$template] = $eval;
                } 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 />
-(' . $template . ')<br />
-<br />
-{--TEMPLATE_CONTENT--}
-<pre>' . print_r($content, true) . '</pre>
-{--TEMPLATE_DATA--}
-<pre>' . print_r($DATA, true) . '</pre>
-<br /><br />';
+                       $ret = '<div class="para">
+       <span class="guest_failed">{--TEMPLATE_404--}</span>
+</div>
+<div class="para">
+       (' . $template . ')
+</div>
+<div class="para">
+       {--TEMPLATE_CONTENT--}
+       <pre>' . print_r($content, true) . '</pre>
+       {--TEMPLATE_DATA--}
+       <pre>' . print_r($DATA, true) . '</pre>
+</div>';
                } else {
                        // No file!
                        $GLOBALS['template_eval'][$template] = '404';
@@ -428,29 +432,23 @@ function loadEmailTemplate ($template, $content = array(), $userid = '0') {
        // Make sure all template names are lowercase!
        $template = strtolower($template);
 
-       // Default 'nickname' if extension is not installed
-       $nick = '---';
-
-       // Neutral email address is default
-       $email = getConfig('WEBMASTER');
-
        // Is content an array?
        if (is_array($content)) {
                // Add expiration to array
                if ((isConfigEntrySet('auto_purge')) && (getConfig('auto_purge') == '0')) {
                        // Will never expire!
-                       $content['expiration'] = getMessage('MAIL_WILL_NEVER_EXPIRE');
+                       $content['expiration'] = '{--MAIL_WILL_NEVER_EXPIRE--}';
                } elseif (isConfigEntrySet('auto_purge')) {
                        // Create nice date string
                        $content['expiration'] = createFancyTime(getConfig('auto_purge'));
                } else {
                        // Missing entry
-                       $content['expiration'] = getMessage('MAIL_NO_CONFIG_AUTO_PURGE');
+                       $content['expiration'] = '{--MAIL_NO_CONFIG_AUTO_PURGE--}';
                }
        } // END - if
 
        // Load user's data
-       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "UID={$userid},template={$template},content[]=".gettype($content).'<br />');
+       //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "UID={$userid},template={$template},content[]=".gettype($content));
        if (($userid > 0) && (is_array($content))) {
                // If nickname extension is installed, fetch nickname as well
                if ((isExtensionActive('nickname')) && (isNicknameUsed($userid))) {
@@ -471,9 +469,6 @@ function loadEmailTemplate ($template, $content = array(), $userid = '0') {
                //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "content()=".count($content)." - AFTER<br />");
        } // END - if
 
-       // Translate M to male or F to female if present
-       if (isset($content['gender'])) $content['gender'] = translateGender($content['gender']);
-
        // Overwrite email from data if present
        if (isset($content['email'])) $email = $content['email'];
 
@@ -507,18 +502,21 @@ function loadEmailTemplate ($template, $content = array(), $userid = '0') {
                eval($GLOBALS['tpl_content']);
        } elseif (!empty($template)) {
                // Template file not found!
-               $newContent = '{--TEMPLATE_404--}: ' . $template . '<br />
-{--TEMPLATE_CONTENT--}
-<pre>' . print_r($content, true) . '</pre>
-{--TEMPLATE_DATA--}
-<pre>' . print_r($DATA, true) . '</pre>
-<br /><br />';
+               $newContent = '<div class="para">
+       {--TEMPLATE_404--}: ' . $template . '
+</div>
+<div class="para">
+       {--TEMPLATE_CONTENT--}
+       <pre>' . print_r($content, true) . '</pre>
+       {--TEMPLATE_DATA--}
+       <pre>' . print_r($DATA, true) . '</pre>
+</div>';
 
                // Debug mode not active? Then remove the HTML tags
                if (!isDebugModeEnabled()) $newContent = secureString($newContent);
        } else {
                // No template name supplied!
-               $newContent = getMessage('NO_TEMPLATE_SUPPLIED');
+               $newContent = '{--NO_TEMPLATE_SUPPLIED--}';
        }
 
        // Is there some content?
@@ -607,7 +605,7 @@ Message : ' . htmlentities(utf8_decode($message)) . '
        }
 
        // Why did we end up here? This should not happen
-       debug_report_bug('Ending up: template=' . $template);
+       debug_report_bug(__FUNCTION__, __LINE__, 'Ending up: template=' . $template);
 }
 
 // Check to use wether legacy mail() command or PHPMailer class
@@ -754,8 +752,8 @@ function translateYesNo ($yn) {
        // Default
        $translated = '??? (' . $yn . ')';
        switch ($yn) {
-               case 'Y': $translated = getMessage('YES'); break;
-               case 'N': $translated = getMessage('NO'); break;
+               case 'Y': $translated = '{--YES--}'; break;
+               case 'N': $translated = '{--NO--}'; break;
                default:
                        // Log unknown value
                        logDebugMessage(__FUNCTION__, __LINE__, sprintf("Unknown value %s. Expected Y/N!", $yn));
@@ -833,9 +831,9 @@ function translateGender ($gender) {
 
        // Male/female or company?
        switch ($gender) {
-               case 'M': $ret = getMessage('GENDER_M'); break;
-               case 'F': $ret = getMessage('GENDER_F'); break;
-               case 'C': $ret = getMessage('GENDER_C'); break;
+               case 'M': $ret = '{--GENDER_M--}'; break;
+               case 'F': $ret = '{--GENDER_F--}'; break;
+               case 'C': $ret = '{--GENDER_C--}'; break;
                default:
                        // Please report bugs on unknown genders
                        debug_report_bug(__FUNCTION__, __LINE__, sprintf("Unknown gender %s detected.", $gender));
@@ -858,7 +856,7 @@ function translateUserStatus ($status) {
 
                case '':
                case null:
-                       $ret = getMessage('ACCOUNT_DELETED');
+                       $ret = '{--ACCOUNT_DELETED--}';
                        break;
 
                default:
@@ -874,24 +872,24 @@ function translateUserStatus ($status) {
 // "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']) {
+       switch ($content['visible']) {
                // Should be visible
-               case 'Y': $content[$prefix . 'visible_css'] = $prefix . 'menu_visible'  ; break;
-               case 'N': $content[$prefix . 'visible_css'] = $prefix . 'menu_invisible'; break;
+               case 'Y': $content['visible_css'] = $prefix . 'menu_visible'  ; break;
+               case 'N': $content['visible_css'] = $prefix . 'menu_invisible'; break;
                default:
                        // Please report this
-                       debug_report_bug('Unsupported visible value detected. content=<pre>'.print_r($content, true).'</pre>');
+                       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']) {
+       switch ($content['locked']) {
                // Should be locked
-               case 'Y': $content[$prefix . 'locked_css'] = $prefix . 'menu_locked'  ; break;
-               case 'N': $content[$prefix . 'locked_css'] = $prefix . 'menu_unlocked'; break;
+               case 'Y': $content['locked_css'] = $prefix . 'menu_locked'  ; break;
+               case 'N': $content['locked_css'] = $prefix . 'menu_unlocked'; break;
                default:
                        // Please report this
-                       debug_report_bug('Unsupported locked value detected. content=<pre>'.print_r($content, true).'</pre>');
+                       debug_report_bug(__FUNCTION__, __LINE__, 'Unsupported locked value detected. content=<pre>' . print_r($content, true) . '</pre>');
                        break;
        } // END - switch
 
@@ -899,6 +897,25 @@ function translateMenuVisibleLocked ($content, $prefix = '') {
        return $content;
 }
 
+// "Getter" for menu CSS classes, mainly used in templates
+function getMenuCssClasses ($data) {
+       // $data needs to be converted into an array
+       $content = explode('|', $data);
+
+       // Non-existent index 2 will happen in menu blocks
+       if (!isset($content[2])) $content[2] = '';
+
+       // Re-construct the array: 0=visible,1=locked,2=prefix
+       $content['visible'] = $content[0];
+       $content['locked']  = $content[1];
+
+       // Call our "translator" function
+       $content = translateMenuVisibleLocked($content, $content[2]);
+
+       // Return CSS classes
+       return ($content['visible_css'] . ' ' . $content['locked_css']);
+}
+
 // Generates an URL for the dereferer
 function generateDerefererUrl ($URL) {
        // Don't de-refer our own links!
@@ -987,6 +1004,9 @@ function redirectToUrl ($URL, $allowSpider = true) {
 
        // Simple probe for bots/spiders from search engines
        if ((isSpider()) && ($allowSpider === true)) {
+               // Set HTTP-Status
+               setHttpStatus('200 OK');
+
                // Set content-type here to fix a missing array element
                setContentType('text/html');
 
@@ -1049,7 +1069,7 @@ function compileCode ($code, $simple = false, $constants = true, $full = true) {
 }
 
 // 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)) {
@@ -1066,16 +1086,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('{--', "{DQUOTE} . getMessage('", str_replace('--}', "') . {DQUOTE}", $code));
-
-               // BEFORE 0.2.1 : Not used
-               // WITH 0.2.1+  : Data constants
-               $code = str_replace('{!', "{DQUOTE} . constant('", str_replace('!}', "') . {DQUOTE}", $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) {
@@ -1114,7 +1126,7 @@ function compileRawCode ($code, $simple = false, $constants = true, $full = true
                        if ($fuzzyFound === true) continue;
 
                        // Take all string elements
-                       if ((is_string($matches[4][$key])) && (!isset($matchesFound[$match])) && (!isset($matchesFound[$key."_" . $matches[4][$key]]))) {
+                       if ((is_string($matches[4][$key])) && (!isset($matchesFound[$match])) && (!isset($matchesFound[$key.'_' . $matches[4][$key]]))) {
                                // Replace it in the code
                                //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "key={$key},match={$match}<br />");
                                $newMatch = str_replace('[', "['", str_replace(']', "']", $match));
@@ -1195,7 +1207,7 @@ function addSelectionBox ($type, $default, $prefix = '', $id = '0', $class = 're
                $OUT .= '<select name="' . $prefix . '" class="' . $class . '" size="1">';
        } else {
                // Begin with regular selection box here
-               if (!empty($prefix)) $prefix .= "_";
+               if (!empty($prefix)) $prefix .= '_';
                $type2 = $type;
                if ($id > 0) $type2 .= '[' . $id . ']';
                $OUT .= '<select name="' . strtolower($prefix . $type2) . '" class="' . $class . '" size="1">';
@@ -1442,7 +1454,7 @@ function createTimeSelections ($timestamp, $prefix = '', $display = '', $align =
 
        // Calculate 2-seconds timestamp
        $stamp = round($timestamp);
-       //* DEBUG: */ print("*" . $stamp.'/' . $timestamp."*<br />");
+       //* DEBUG: */ debugOutput('*' . $stamp .'/' . $timestamp . '*');
 
        // Do we have a leap year?
        $SWITCH = '0';
@@ -1451,29 +1463,29 @@ function createTimeSelections ($timestamp, $prefix = '', $display = '', $align =
        $M2 = date('m', (time() + $timestamp));
 
        // If so and if current time is before 02/29 and estimated time is after 02/29 then add 86400 seconds (one day)
-       if ((floor($TEST) == $TEST) && ($M1 == "02") && ($M2 > "02"))  $SWITCH = getConfig('ONE_DAY');
+       if ((floor($TEST) == $TEST) && ($M1 == '02') && ($M2 > '02'))  $SWITCH = getConfig('ONE_DAY');
 
        // First of all years...
        $Y = abs(floor($timestamp / (31536000 + $SWITCH)));
-       //* DEBUG: */ print("Y={$Y}<br />");
+       //* DEBUG: */ debugOutput('Y=' . $Y);
        // Next months...
        $M = abs(floor($timestamp / 2628000 - $Y * 12));
-       //* DEBUG: */ print("M={$M}<br />");
+       //* DEBUG: */ debugOutput('M=' . $M);
        // Next weeks
        $W = abs(floor($timestamp / 604800 - $Y * ((365 + $SWITCH / getConfig('ONE_DAY')) / 7) - ($M / 12 * (365 + $SWITCH / getConfig('ONE_DAY')) / 7)));
-       //* DEBUG: */ print("W={$W}<br />");
+       //* DEBUG: */ debugOutput('W=' . $W);
        // Next days...
        $D = abs(floor($timestamp / 86400 - $Y * (365 + $SWITCH / getConfig('ONE_DAY')) - ($M / 12 * (365 + $SWITCH / getConfig('ONE_DAY'))) - $W * 7));
-       //* DEBUG: */ print("D={$D}<br />");
+       //* DEBUG: */ debugOutput('D=' . $D);
        // Next hours...
        $h = abs(floor($timestamp / 3600 - $Y * (365 + $SWITCH / getConfig('ONE_DAY')) * 24 - ($M / 12 * (365 + $SWITCH / getConfig('ONE_DAY')) * 24) - $W * 7 * 24 - $D * 24));
-       //* DEBUG: */ print("h={$h}<br />");
+       //* DEBUG: */ debugOutput('h=' . $h);
        // Next minutes..
        $m = abs(floor($timestamp / 60 - $Y * (365 + $SWITCH / getConfig('ONE_DAY')) * 24 * 60 - ($M / 12 * (365 + $SWITCH / getConfig('ONE_DAY')) * 24 * 60) - $W * 7 * 24 * 60 - $D * 24 * 60 - $h * 60));
-       //* DEBUG: */ print("m={$m}<br />");
+       //* DEBUG: */ debugOutput('m=' . $m);
        // And at last seconds...
        $s = abs(floor($timestamp - $Y * (365 + $SWITCH / getConfig('ONE_DAY')) * 24 * 3600 - ($M / 12 * (365 + $SWITCH / getConfig('ONE_DAY')) * 24 * 3600) - $W * 7 * 24 * 3600 - $D * 24 * 3600 - $h * 3600 - $m * 60));
-       //* DEBUG: */ print("s={$s}<br />");
+       //* DEBUG: */ debugOutput('s=' . $s);
 
        // Is seconds zero and time is < 60 seconds?
        if (($s == '0') && ($timestamp < 60)) {
@@ -1695,62 +1707,6 @@ function createFancyTime ($stamp) {
        return $ret;
 }
 
-// Generates a navigation row for listing emails
-function addEmailNavigation ($PAGES, $offset, $show_form, $colspan, $return=false) {
-       $TOP = '';
-       if ($show_form === false) {
-               $TOP = ' top';
-       } // END - if
-
-       $NAV = '';
-       for ($page = 1; $page <= $PAGES; $page++) {
-               // Is the page currently selected or shall we generate a link to it?
-               if (($page == getRequestParameter('page')) || ((!isGetRequestParameterSet('page')) && ($page == 1))) {
-                       // Is currently selected, so only highlight it
-                       $NAV .= '<strong>-';
-               } else {
-                       // Open anchor tag and add base URL
-                       $NAV .= '<a href="{%url=modules.php?module=admin&amp;what=' . getWhat() . '&amp;page=' . $page . '&amp;offset=' . $offset;
-
-                       // Add userid when we shall show all mails from a single member
-                       if ((isGetRequestParameterSet('userid')) && (bigintval(getRequestParameter('userid')) > 0)) $NAV .= '&amp;userid=' . bigintval(getRequestParameter('userid'));
-
-                       // Close open anchor tag
-                       $NAV .= '%}">';
-               }
-               $NAV .= $page;
-               if (($page == getRequestParameter('page')) || ((!isGetRequestParameterSet('page')) && ($page == 1))) {
-                       // Is currently selected, so only highlight it
-                       $NAV .= '-</strong>';
-               } else {
-                       // Close anchor tag
-                       $NAV .= '</a>';
-               }
-
-               // Add seperator if we have not yet reached total pages
-               if ($page < $PAGES) {
-                       // Add it
-                       $NAV .= '|';
-               } // END - if
-       } // END - for
-
-       // Define constants only once
-       $content['nav']  = $NAV;
-       $content['span'] = $colspan;
-       $content['top']  = $TOP;
-
-       // Load navigation template
-       $OUT = loadTemplate('admin_email_nav_row', true, $content);
-
-       if ($return === true) {
-               // Return generated HTML-Code
-               return $OUT;
-       } else {
-               // Output HTML-Code
-               outputHtml($OUT);
-       }
-}
-
 // Extract host from script name
 function extractHostnameFromUrl (&$script) {
        // Use default SERVER_URL by default... ;) So?
@@ -1770,7 +1726,7 @@ function extractHostnameFromUrl (&$script) {
        if (isInString('/', $host)) $host = substr($host, 0, strpos($host, '/'));
 
        // Generate relative URL
-       //* DEBUG: */ print('SCRIPT=' . $script.'<br />');
+       //* DEBUG: */ debugOutput('SCRIPT=' . $script);
        if (substr(strtolower($script), 0, 7) == 'http://') {
                // But only if http:// is in front!
                $script = substr($script, (strlen($url) + 7));
@@ -1779,7 +1735,7 @@ function extractHostnameFromUrl (&$script) {
                $script = substr($script, (strlen($url) + 8));
        }
 
-       //* DEBUG: */ print('SCRIPT=' . $script.'<br />');
+       //* DEBUG: */ debugOutput('SCRIPT=' . $script);
        if (substr($script, 0, 1) == '/') $script = substr($script, 1);
 
        // Return host name
@@ -1893,7 +1849,7 @@ function sendRawRequest ($host, $request) {
        $resolver = new HostnameResolver();
 
        // Open connection
-       //* DEBUG: */ die('SCRIPT=' . $script.'<br />');
+       //* DEBUG: */ die('SCRIPT=' . $script);
        if ($useProxy === true) {
                // Resolve hostname into IP address
                $ip = $resolver->resolveHostname(compileRawCode(getConfig('proxy_host')));
@@ -1993,8 +1949,8 @@ function sendRawRequest ($host, $request) {
                }
        } // END - foreach
 
-       //* DEBUG: */ print('<strong>Request:</strong><pre>'.print_r($request, true).'</pre>');
-       //* DEBUG: */ print('<strong>Response:</strong><pre>'.print_r($response, true).'</pre>');
+       //* DEBUG: */ debugOutput('<strong>Request:</strong><pre>'.print_r($request, true).'</pre>');
+       //* DEBUG: */ debugOutput('<strong>Response:</strong><pre>'.print_r($response, true).'</pre>');
 
        // Proxy agent found or something went wrong?
        if (!isset($response[0])) {
@@ -2036,7 +1992,7 @@ function setupProxyTunnel ($host, $resource) {
 
        // Add last new-line
        $proxyTunnel .= getConfig('HTTP_EOL');
-       //* DEBUG: */ print('<strong>proxyTunnel=</strong><pre>' . $proxyTunnel.'</pre>');
+       //* DEBUG: */ debugOutput('<strong>proxyTunnel=</strong><pre>' . $proxyTunnel.'</pre>');
 
        // Write request
        fwrite($fp, $proxyTunnel);
@@ -2078,11 +2034,11 @@ function isEmailValid ($email) {
 function isUrlValid ($URL, $compile=true) {
        // Trim URL a little
        $URL = trim(urldecode($URL));
-       //* DEBUG: */ outputHtml($URL.'<br />');
+       //* DEBUG: */ debugOutput($URL);
 
        // Compile some chars out...
        if ($compile === true) $URL = compileUriCode($URL, false, false, false);
-       //* DEBUG: */ outputHtml($URL.'<br />');
+       //* DEBUG: */ debugOutput($URL);
 
        // Check for the extension filter
        if (isExtensionActive('filter')) {
@@ -2096,19 +2052,22 @@ function isUrlValid ($URL, $compile=true) {
 }
 
 // Generate a list of administrative links to a given userid
-function generateMemberAdminActionLinks ($userid, $status = '') {
+function generateMemberAdminActionLinks ($userid) {
        // Make sure userid is 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');
 
+       // Get user status
+       $status = getFetchedUserData('userid', $userid, 'status');
+
        // Begin of navigation links
        $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_';
-               //* DEBUG: */ outputHtml('*' . $tar.'/' . $status.'*<br />');
+               //* DEBUG: */ debugOutput('*' . $tar.'/' . $status.'*');
                if (($tar == 'lock_user') && ($status == 'LOCKED')) {
                        // Locked accounts shall be unlocked
                        $OUT .= 'UNLOCK_USER';
@@ -2125,10 +2084,10 @@ function generateMemberAdminActionLinks ($userid, $status = '') {
                        $OUT .= strtoupper($tar);
                }
                $OUT .= '--}</a></span>|';
-       }
+       } // END - foreach
 
        // Finish navigation link
-       $OUT = substr($OUT, 0, -7) . ']';
+       $OUT = substr($OUT, 0, -1) . ']';
 
        // Return string
        return $OUT;
@@ -2161,7 +2120,7 @@ function generateEmailLink ($email, $table = 'admins') {
 // Generate a hash for extra-security for all passwords
 function generateHash ($plainText, $salt = '', $hash = true) {
        // Debug output
-       //* DEBUG: */ outputHtml('plainText=' . $plainText . ',salt=' . $salt . ',hash='.intval($hash).'<br />');
+       //* DEBUG: */ debugOutput('plainText=' . $plainText . ',salt=' . $salt . ',hash='.intval($hash));
 
        // Is the required extension 'sql_patches' there and a salt is not given?
        // 0123                            4                      43    3     4     432    2                  3             32    2                             3                3210
@@ -2198,20 +2157,20 @@ function generateHash ($plainText, $salt = '', $hash = true) {
 
                // Generate SHA1 sum from modula of number and the prime number
                $sha1 = sha1(($a % getConfig('_PRIME')) . $server . getConfig('ENCRYPT_SEPERATOR') . $keys . getConfig('ENCRYPT_SEPERATOR') . $data . getConfig('ENCRYPT_SEPERATOR') . getConfig('DATE_KEY') . getConfig('ENCRYPT_SEPERATOR') . $a);
-               //* DEBUG: */ outputHtml('SHA1=' . $sha1.' ('.strlen($sha1).')<br />');
+               //* DEBUG: */ debugOutput('SHA1=' . $sha1.' ('.strlen($sha1).')<br />');
                $sha1 = scrambleString($sha1);
-               //* DEBUG: */ outputHtml('Scrambled=' . $sha1.' ('.strlen($sha1).')<br />');
+               //* DEBUG: */ debugOutput('Scrambled=' . $sha1.' ('.strlen($sha1).')<br />');
                //* DEBUG: */ $sha1b = descrambleString($sha1);
-               //* DEBUG: */ outputHtml('Descrambled=' . $sha1b.' ('.strlen($sha1b).')<br />');
+               //* DEBUG: */ debugOutput('Descrambled=' . $sha1b.' ('.strlen($sha1b).')<br />');
 
                // Generate the password salt string
                $salt = substr($sha1, 0, getConfig('salt_length'));
-               //* DEBUG: */ outputHtml($salt.' ('.strlen($salt).')<br />');
+               //* DEBUG: */ debugOutput($salt.' ('.strlen($salt).')<br />');
        } else {
                // Use given salt
-               //* DEBUG: */ outputHtml('salt=' . $salt . '<br />');
+               //* DEBUG: */ debugOutput('salt=' . $salt);
                $salt = substr($salt, 0, getConfig('salt_length'));
-               //* DEBUG: */ outputHtml('salt=' . $salt . '(' . strlen($salt) . '/' . getConfig('salt_length') . ')<br />');
+               //* DEBUG: */ debugOutput('salt=' . $salt . '(' . strlen($salt) . '/' . getConfig('salt_length') . ')<br />');
 
                // Sanity check on salt
                if (strlen($salt) != getConfig('salt_length')) {
@@ -2224,7 +2183,7 @@ function generateHash ($plainText, $salt = '', $hash = true) {
        $finalHash = $salt . sha1($salt . $plainText);
 
        // Debug output
-       //* DEBUG: */ outputHtml('finalHash=' . $finalHash);
+       //* DEBUG: */ debugOutput('finalHash=' . $finalHash);
 
        // Return hash
        return $finalHash;
@@ -2251,7 +2210,7 @@ function scrambleString($str) {
        if (strlen($str) != count($scrambleNums)) return $str;
 
        // Scramble string here
-       //* DEBUG: */ outputHtml('***Original=' . $str.'***<br />');
+       //* DEBUG: */ debugOutput('***Original=' . $str.'***<br />');
        for ($idx = 0; $idx < strlen($str); $idx++) {
                // Get char on scrambled position
                $char = substr($str, $scrambleNums[$idx], 1);
@@ -2261,7 +2220,7 @@ function scrambleString($str) {
        } // END - for
 
        // Return scrambled string
-       //* DEBUG: */ outputHtml('***Scrambled=' . $scrambled.'***<br />');
+       //* DEBUG: */ debugOutput('***Scrambled=' . $scrambled.'***<br />');
        return $scrambled;
 }
 
@@ -2278,14 +2237,14 @@ function descrambleString($str) {
 
        // Begin descrambling
        $orig = str_repeat(' ', 40);
-       //* DEBUG: */ outputHtml('+++Scrambled=' . $str.'+++<br />');
+       //* DEBUG: */ debugOutput('+++Scrambled=' . $str.'+++<br />');
        for ($idx = 0; $idx < 40; $idx++) {
                $char = substr($str, $idx, 1);
                $orig = substr_replace($orig, $char, $scrambleNums[$idx], 1);
        } // END - for
 
        // Return scrambled string
-       //* DEBUG: */ outputHtml('+++Original=' . $orig.'+++<br />');
+       //* DEBUG: */ debugOutput('+++Original=' . $orig.'+++<br />');
        return $orig;
 }
 
@@ -2436,14 +2395,14 @@ function isBooleanConstantAndTrue ($constName) { // : Boolean
        // In cache?
        if (isset($GLOBALS['cache_array']['const'][$constName])) {
                // Use cache
-               //* DEBUG: */ outputHtml(__FUNCTION__ . '(<font color="#0000aa">' . __LINE__ . '</font>): ' . $constName."-CACHE!<br />");
+               //* DEBUG: */ debugOutput(__FUNCTION__ . '(<font color="#0000aa">' . __LINE__ . '</font>): ' . $constName."-CACHE!<br />");
                $res = ($GLOBALS['cache_array']['const'][$constName] === true);
        } else {
                // Check constant
-               //* DEBUG: */ outputHtml(__FUNCTION__ . '(<font color="#0000aa">' . __LINE__ . '</font>): ' . $constName."-RESOLVE!<br />");
+               //* DEBUG: */ debugOutput(__FUNCTION__ . '(<font color="#0000aa">' . __LINE__ . '</font>): ' . $constName."-RESOLVE!<br />");
                if (defined($constName)) {
                        // Found!
-                       //* DEBUG: */ outputHtml(__FUNCTION__ . '(<font color="#0000aa">' . __LINE__ . '</font>): ' . $constName."-FOUND!<br />");
+                       //* DEBUG: */ debugOutput(__FUNCTION__ . '(<font color="#0000aa">' . __LINE__ . '</font>): ' . $constName."-FOUND!<br />");
                        $res = (constant($constName) === true);
                } // END - if
 
@@ -2507,7 +2466,7 @@ function generateErrorCodeFromUserStatus ($status='') {
 // Back-ported from the new ship-simu engine. :-)
 function debug_get_printable_backtrace () {
        // Init variable
-       $backtrace = "<ol>\n";
+       $backtrace = '<ol>';
 
        // Get and prepare backtrace for output
        $backtraceArray = debug_backtrace();
@@ -2515,11 +2474,11 @@ function debug_get_printable_backtrace () {
                if (!isset($trace['file'])) $trace['file'] = __FUNCTION__;
                if (!isset($trace['line'])) $trace['line'] = __LINE__;
                if (!isset($trace['args'])) $trace['args'] = array();
-               $backtrace .= "<li class=\"debug_list\"><span class=\"backtrace_file\">".basename($trace['file'])."</span>:" . $trace['line'].", <span class=\"backtrace_function\">" . $trace['function'].'('.count($trace['args']).")</span></li>\n";
+               $backtrace .= '<li class="debug_list"><span class="backtrace_file">' . basename($trace['file']) . '</span>:' . $trace['line'].", <span class=\"backtrace_function\">" . $trace['function'] . '(' . count($trace['args']) . ')</span></li>';
        } // END - foreach
 
        // Close it
-       $backtrace .= "</ol>\n";
+       $backtrace .= '</ol>';
 
        // Return the backtrace
        return $backtrace;
@@ -2571,17 +2530,18 @@ function debug_report_bug ($F, $L, $message = '', $sendEmail = true) {
        } // END - if
 
        // Add output
-       $debug .= "Please report this bug at <a title=\"Direct link to the bug-tracker\" href=\"http://bugs.mxchange.org\" rel=\"external\" target=\"_blank\">http://bugs.mxchange.org</a> and include the logfile from <strong>" . str_replace(getConfig('PATH'), '', getConfig('CACHE_PATH')) . "debug.log</strong> in your report (you can now attach files):<pre>";
+       $debug .= 'Please report this bug at <a title="Direct link to the bug-tracker" href="http://bugs.mxchange.org" rel="external" target="_blank">http://bugs.mxchange.org</a> and include the logfile from <strong>' . str_replace(getConfig('PATH'), '', getConfig('CACHE_PATH')) . 'debug.log</strong> in your report (you can now attach files):<pre>';
        $debug .= debug_get_printable_backtrace();
-       $debug .= "</pre>\nRequest-URI: " . getRequestUri()."<br />\n";
-       $debug .= "Thank you for finding bugs.";
+       $debug .= '</pre>';
+       $debug .= '<div>Request-URI: ' . getRequestUri() . '</div>';
+       $debug .= '<div>Thank you for finding bugs.</div>';
 
        // Send an email? (e.g. not wanted for evaluation errors)
        if (($sendEmail === true) && (!isInstallationPhase())) {
                // Prepare content
                $content = array(
-                       'message'     => trim($message),
-                       'backtrace'   => trim(debug_get_mailable_backtrace())
+                       'message'   => trim($message),
+                       'backtrace' => trim(debug_get_mailable_backtrace())
                );
 
                // Send email to webmaster
@@ -2602,39 +2562,39 @@ function getMessageFromErrorCode ($code) {
        $message = '';
        switch ($code) {
                case '': break;
-               case getCode('LOGOUT_DONE')        : $message = getMessage('LOGOUT_DONE'); break;
+               case getCode('LOGOUT_DONE')        : $message = '{--LOGOUT_DONE--}'; break;
                case getCode('LOGOUT_FAILED')      : $message = '<span class="guest_failed">{--LOGOUT_FAILED--}</span>'; break;
-               case getCode('DATA_INVALID')       : $message = getMessage('MAIL_DATA_INVALID'); break;
-               case getCode('POSSIBLE_INVALID')   : $message = getMessage('MAIL_POSSIBLE_INVALID'); break;
-               case getCode('USER_404')           : $message = getMessage('USER_404'); break;
-               case getCode('STATS_404')          : $message = getMessage('MAIL_STATS_404'); break;
-               case getCode('ALREADY_CONFIRMED')  : $message = getMessage('MAIL_ALREADY_CONFIRMED'); break;
-               case getCode('WRONG_PASS')         : $message = getMessage('LOGIN_WRONG_PASS'); break;
-               case getCode('WRONG_ID')           : $message = getMessage('LOGIN_WRONG_ID'); break;
-               case getCode('ACCOUNT_LOCKED')     : $message = getMessage('LOGIN_STATUS_LOCKED'); break;
-               case getCode('ACCOUNT_UNCONFIRMED'): $message = getMessage('LOGIN_STATUS_UNCONFIRMED'); break;
-               case getCode('COOKIES_DISABLED')   : $message = getMessage('LOGIN_COOKIES_DISABLED'); break;
-               case getCode('BEG_SAME_AS_OWN')    : $message = getMessage('BEG_SAME_UID_AS_OWN'); break;
-               case getCode('LOGIN_FAILED')       : $message = getMessage('LOGIN_FAILED_GENERAL'); break;
-               case getCode('MODULE_MEM_ONLY')    : $message = getMaskedMessage('MODULE_MEM_ONLY', getRequestParameter('mod')); break;
-               case getCode('OVERLENGTH')         : $message = getMessage('MEMBER_TEXT_OVERLENGTH'); break;
-               case getCode('URL_FOUND')          : $message = getMessage('MEMBER_TEXT_CONTAINS_URL'); break;
-               case getCode('SUBJ_URL')           : $message = getMessage('MEMBER_SUBJ_CONTAINS_URL'); break;
-               case getCode('BLIST_URL')          : $message = "{--MEMBER_URL_BLACK_LISTED--}<br />\n{--MEMBER_BLIST_TIME--}: ".generateDateTime(getRequestParameter('blist'), 0); break;
-               case getCode('NO_RECS_LEFT')       : $message = getMessage('MEMBER_SELECTED_MORE_RECS'); break;
-               case getCode('INVALID_TAGS')       : $message = getMessage('MEMBER_HTML_INVALID_TAGS'); break;
-               case getCode('MORE_POINTS')        : $message = getMessage('MEMBER_MORE_POINTS_NEEDED'); break;
-               case getCode('MORE_RECEIVERS1')    : $message = getMessage('MEMBER_ENTER_MORE_RECEIVERS'); break;
-               case getCode('MORE_RECEIVERS2')    : $message = getMessage('MEMBER_NO_MORE_RECEIVERS_FOUND'); break;
-               case getCode('MORE_RECEIVERS3')    : $message = getMessage('MEMBER_ENTER_MORE_MIN_RECEIVERS'); break;
-               case getCode('INVALID_URL')        : $message = getMessage('MEMBER_ENTER_INVALID_URL'); break;
-               case getCode('NO_MAIL_TYPE')       : $message = getMessage('MEMBER_NO_MAIL_TYPE_SELECTED'); break;
-               case getCode('UNKNOWN_ERROR')      : $message = getMessage('LOGIN_UNKNOWN_ERROR'); break;
-               case getCode('UNKNOWN_STATUS')     : $message = getMessage('LOGIN_UNKNOWN_STATUS'); break;
+               case getCode('DATA_INVALID')       : $message = '{--MAIL_DATA_INVALID--}'; break;
+               case getCode('POSSIBLE_INVALID')   : $message = '{--MAIL_POSSIBLE_INVALID--}'; break;
+               case getCode('USER_404')           : $message = '{--USER_404--}'; break;
+               case getCode('STATS_404')          : $message = '{--MAIL_STATS_404--}'; break;
+               case getCode('ALREADY_CONFIRMED')  : $message = '{--MAIL_ALREADY_CONFIRMED--}'; break;
+               case getCode('WRONG_PASS')         : $message = '{--LOGIN_WRONG_PASS--}'; break;
+               case getCode('WRONG_ID')           : $message = '{--LOGIN_WRONG_ID--}'; break;
+               case getCode('ACCOUNT_LOCKED')     : $message = '{--LOGIN_STATUS_LOCKED--}'; break;
+               case getCode('ACCOUNT_UNCONFIRMED'): $message = '{--LOGIN_STATUS_UNCONFIRMED--}'; break;
+               case getCode('COOKIES_DISABLED')   : $message = '{--LOGIN_COOKIES_DISABLED--}'; break;
+               case getCode('BEG_SAME_AS_OWN')    : $message = '{--BEG_SAME_UID_AS_OWN--}'; break;
+               case getCode('LOGIN_FAILED')       : $message = '{--LOGIN_FAILED_GENERAL--}'; break;
+               case getCode('MODULE_MEMBER_ONLY') : $message = getMaskedMessage('MODULE_MEMBER_ONLY', getRequestParameter('mod')); break;
+               case getCode('OVERLENGTH')         : $message = '{--MEMBER_TEXT_OVERLENGTH--}'; break;
+               case getCode('URL_FOUND')          : $message = '{--MEMBER_TEXT_CONTAINS_URL--}'; break;
+               case getCode('SUBJ_URL')           : $message = '{--MEMBER_SUBJ_CONTAINS_URL--}'; break;
+               case getCode('BLIST_URL')          : $message = '{--MEMBER_URL_BLACK_LISTED--}<br />{--MEMBER_BLIST_TIME--}: ' . generateDateTime(getRequestParameter('blist'), 0); break;
+               case getCode('NO_RECS_LEFT')       : $message = '{--MEMBER_SELECTED_MORE_RECS--}'; break;
+               case getCode('INVALID_TAGS')       : $message = '{--MEMBER_HTML_INVALID_TAGS--}'; break;
+               case getCode('MORE_POINTS')        : $message = '{--MEMBER_MORE_POINTS_NEEDED--}'; break;
+               case getCode('MORE_RECEIVERS1')    : $message = '{--MEMBER_ENTER_MORE_RECEIVERS--}'; break;
+               case getCode('MORE_RECEIVERS2')    : $message = '{--MEMBER_NO_MORE_RECEIVERS_FOUND--}'; break;
+               case getCode('MORE_RECEIVERS3')    : $message = '{--MEMBER_ENTER_MORE_MIN_RECEIVERS--}'; break;
+               case getCode('INVALID_URL')        : $message = '{--MEMBER_ENTER_INVALID_URL--}'; break;
+               case getCode('NO_MAIL_TYPE')       : $message = '{--MEMBER_NO_MAIL_TYPE_SELECTED--}'; break;
+               case getCode('UNKNOWN_ERROR')      : $message = '{--LOGIN_UNKNOWN_ERROR--}'; break;
+               case getCode('UNKNOWN_STATUS')     : $message = '{--LOGIN_UNKNOWN_STATUS--}'; break;
 
                case getCode('ERROR_MAILID'):
                        if (isExtensionActive('mailid', true)) {
-                               $message = getMessage('ERROR_CONFIRMING_MAIL');
+                               $message = '{--ERROR_CONFIRMING_MAIL--}';
                        } else {
                                $message = getMaskedMessage('EXTENSION_PROBLEM_EXTENSION_NOT_INSTALLED', 'mailid');
                        }
@@ -2644,7 +2604,7 @@ function getMessageFromErrorCode ($code) {
                        if (isGetRequestParameterSet('ext')) {
                                $message = generateExtensionInactiveNotInstalledMessage(getRequestParameter('ext'));
                        } else {
-                               $message = getMessage('EXTENSION_PROBLEM_UNSET_EXT');
+                               $message = '{--EXTENSION_PROBLEM_UNSET_EXT--}';
                        }
                        break;
 
@@ -2765,7 +2725,7 @@ function isUrlValidSimple ($url) {
                        // @TODO Are these convertions still required?
                        $pat = str_replace('.', "&#92;&#46;", $pat);
                        $pat = str_replace('@', "&#92;&#64;", $pat);
-                       //* DEBUG: */ outputHtml($key."=&nbsp;" . $pat . '<br />');
+                       //* DEBUG: */ debugOutput($key."=&nbsp;" . $pat);
                } // END - if
 
                // Check if expression matches
@@ -2794,12 +2754,12 @@ function changeDataInFile ($FQFN, $comment, $prefix, $suffix, $DATA, $seek=0) {
                $tmp = $FQFN . '.tmp';
 
                // Open the source file
-               $fp = fopen($FQFN, 'r') or outputHtml('<strong>READ:</strong> ' . $FQFN . '<br />');
+               $fp = fopen($FQFN, 'r') or debug_report_bug(__FUNCTION__, __LINE__, 'Cannot read. file=' . basename($FQFN));
 
                // Is the resource valid?
                if (is_resource($fp)) {
                        // Open temporary file
-                       $fp_tmp = fopen($tmp, 'w') or outputHtml('<strong>WRITE:</strong> ' . $tmp . '<br />');
+                       $fp_tmp = fopen($tmp, 'w') or debug_report_bug(__FUNCTION__, __LINE__, 'Cannot write. tmp=' . basename($tmp) . ',file=' . $FQFN);
 
                        // Is the resource again valid?
                        if (is_resource($fp_tmp)) {
@@ -2848,7 +2808,7 @@ function changeDataInFile ($FQFN, $comment, $prefix, $suffix, $DATA, $seek=0) {
                }
        } else {
                // File not found, not readable or writeable
-               outputHtml('<strong>404:</strong> ' . $FQFN . '<br />');
+               debug_report_bug(__FUNCTION__, __LINE__, 'File not readable/writeable. file=' . basename($FQFN));
        }
 
        // An error was detected!
@@ -3067,25 +3027,27 @@ function addNewBonusMail ($data, $mode = '', $output=true) {
        if (!empty($receiver)) {
                // Add bonus mail to queue
                addBonusMailToQueue(
-               $data['subject'],
-               $data['text'],
-               $receiver,
-               $data['points'],
-               $data['seconds'],
-               $data['url'],
-               $data['cat'],
-               $mode,
-               $data['receiver']
+                       $data['subject'],
+                       $data['text'],
+                       $receiver,
+                       $data['points'],
+                       $data['seconds'],
+                       $data['url'],
+                       $data['cat'],
+                       $mode,
+                       $data['receiver']
                );
 
                // Mail inserted into bonus pool
-               if ($output) loadTemplate('admin_settings_saved', false, getMessage('ADMIN_BONUS_SEND'));
-       } elseif ($output) {
+               if ($output === true) {
+                       loadTemplate('admin_settings_saved', false, '{--ADMIN_BONUS_SEND--}');
+               } // END - if
+       } elseif ($output === true) {
                // More entered than can be reached!
-               loadTemplate('admin_settings_saved', false, getMessage('ADMIN_MORE_SELECTED'));
+               loadTemplate('admin_settings_saved', false, '{--ADMIN_MORE_SELECTED--}');
        } else {
                // Debug log
-               logDebugMessage(__FUNCTION__, __LINE__, "cat={$data['cat']},receiver={$data['receiver']},data=".base64_encode(serialize($data))." More selected, than available!");
+               logDebugMessage(__FUNCTION__, __LINE__, 'cat=' . $data['cat'] . ',receiver=' . $data['receiver'] . ',data=' . base64_encode(serialize($data)) . ' More selected, than available!');
        }
 }
 
@@ -3171,7 +3133,7 @@ function shutdown () {
                SQL_CLOSE(__FUNCTION__, __LINE__);
        } elseif (!isInstallationPhase()) {
                // No database link
-               addFatalMessage(__FUNCTION__, __LINE__, getMessage('NO_DB_LINK_SHUTDOWN'));
+               addFatalMessage(__FUNCTION__, __LINE__, '{--NO_DB_LINK_SHUTDOWN--}');
        }
 
        // Stop executing here
@@ -3256,7 +3218,7 @@ function generateExtensionInactiveMessage ($ext_name) {
        // Is the extension empty?
        if (empty($ext_name)) {
                // This should not happen
-               debug_report_bug(__FUNCTION__ . ': Parameter ext is empty. This should not happen.');
+               debug_report_bug(__FUNCTION__, __LINE__, 'Parameter ext is empty. This should not happen.');
        } // END - if
 
        // Default message
@@ -3277,7 +3239,7 @@ function generateExtensionNotInstalledMessage ($ext_name) {
        // Is the extension empty?
        if (empty($ext_name)) {
                // This should not happen
-               debug_report_bug(__FUNCTION__ . ': Parameter ext is empty. This should not happen.');
+               debug_report_bug(__FUNCTION__, __LINE__, 'Parameter ext is empty. This should not happen.');
        } // END - if
 
        // Default message
@@ -3341,7 +3303,7 @@ function getArrayFromDirectory ($baseDir, $prefix, $fileIncludeDirs = false, $ad
                // Exclude '.', '..' and entries in $excludeArray automatically
                if (in_array($baseFile, $excludeArray, true))  {
                        // Exclude them
-                       //* DEBUG: */ outputHtml('excluded=' . $baseFile . '<br />');
+                       //* DEBUG: */ debugOutput('excluded=' . $baseFile);
                        continue;
                } // END - if
 
@@ -3355,9 +3317,9 @@ function getArrayFromDirectory ($baseDir, $prefix, $fileIncludeDirs = false, $ad
                // Check if the base filenname matches an exclusion pattern and if the pattern is not empty
                if ((!empty($excludePattern)) && (preg_match($excludePattern, $baseFile, $match))) {
                        // These Lines are only for debugging!!
-                       //* DEBUG: */ outputHtml('baseDir:' . $baseDir . '<br />');
-                       //* DEBUG: */ outputHtml('baseFile:' . $baseFile . '<br />');
-                       //* DEBUG: */ outputHtml('FQFN:' . $FQFN . '<br />');
+                       //* DEBUG: */ debugOutput('baseDir:' . $baseDir);
+                       //* DEBUG: */ debugOutput('baseFile:' . $baseFile);
+                       //* DEBUG: */ debugOutput('FQFN:' . $FQFN);
 
                        // Exclude this one
                        continue;
@@ -3487,7 +3449,7 @@ function initCacheInstance () {
        $GLOBALS['cache_instance'] = new CacheSystem();
        if ($GLOBALS['cache_instance']->getStatus() != 'done') {
                // Failed to initialize cache sustem
-               addFatalMessage(__FUNCTION__, __LINE__, '(<font color="#0000aa">' . __LINE__ . '</font>): ' . getMessage('CACHE_CANNOT_INITIALIZE'));
+               addFatalMessage(__FUNCTION__, __LINE__, '(<font color="#0000aa">' . __LINE__ . '</font>): {--CACHE_CANNOT_INITIALIZE--}');
        } // END - if
 }
 
@@ -3573,16 +3535,16 @@ function determinePageTitle () {
                $pageTitle = '[-- ' . getConfig('MAIN_TITLE') . ' - ' . getModuleTitle(getModule()) . ' --]';
        } elseif ((isInstalled()) && (!isAdminRegistered())) {
                // Installed but no admin registered
-               $pageTitle = getMessage('SETUP_OF_MAILER');
+               $pageTitle = '{--SETUP_OF_MAILER--}';
        } elseif ((!isInstalled()) || (!isAdminRegistered())) {
                // Installation mode
-               $pageTitle = getMessage('INSTALLATION_OF_MAILER');
+               $pageTitle = '{--INSTALLATION_OF_MAILER--}';
        } else {
                // Configuration not found!
-               $pageTitle = getMessage('NO_CONFIG_FOUND_TITLE');
+               $pageTitle = '{--NO_CONFIG_FOUND_TITLE--}';
 
                // Do not add the fatal message in installation mode
-               if ((!isInstalling()) && (!isConfigurationLoaded())) addFatalMessage(__FUNCTION__, __LINE__, getMessage('NO_CONFIG_FOUND'));
+               if ((!isInstalling()) && (!isConfigurationLoaded())) addFatalMessage(__FUNCTION__, __LINE__, '{--NO_CONFIG_FOUND--}');
        }
 
        // Return title
@@ -3619,7 +3581,13 @@ function flushTemplateCache ($template, $eval) {
 // Reads a template cache
 function readTemplateCache ($template) {
        // Check it again
-       if ((isDebuggingTemplateCache() === false) && (isTemplateCached($template))) {
+       if ((isDebuggingTemplateCache()) || (!isTemplateCached($template))) {
+               // This should not happen
+               debug_report_bug('Wether debugging of template cache is enabled or template ' . $template . ' is not cached while expected.');
+       } // END - if
+
+       // Is it cached?
+       if (!isset($GLOBALS['template_eval'][$template])) {
                // Generate FQFN
                $FQFN = generateCacheFqfn($template);
 
@@ -3671,9 +3639,6 @@ function sendModeMails ($mod, $modes) {
                        // Load the data
                        $content = getUserDataArray();
 
-                       // Translate gender
-                       $content['gender'] = translateGender($content['gender']);
-
                        // Clear/init the content variable
                        $content['message'] = '';
 
@@ -3685,16 +3650,16 @@ function sendModeMails ($mod, $modes) {
                                                switch ($mode) {
                                                        case 'normal': break; // Do not add any special lines
                                                        case 'email': // Email was changed!
-                                                               $content['message'] = getMessage('MEMBER_CHANGED_EMAIL').": ".postRequestParameter('old_email')."\n";
+                                                               $content['message'] = '{--MEMBER_CHANGED_EMAIL--}' . ': ' . postRequestParameter('old_email') . "\n";
                                                                break;
 
                                                        case 'pass': // Password was changed
-                                                               $content['message'] = getMessage('MEMBER_CHANGED_PASS')."\n";
+                                                               $content['message'] = '{--MEMBER_CHANGED_PASS--}' . "\n";
                                                                break;
 
                                                        default:
                                                                logDebugMessage(__FUNCTION__, __LINE__, sprintf("Unknown mode %s detected.", $mode));
-                                                               $content['message'] = getMessage('MEMBER_UNKNOWN_MODE') . ': ' . $mode . "\n\n";
+                                                               $content['message'] = '{--MEMBER_UNKNOWN_MODE--}' . ': ' . $mode . "\n\n";
                                                                break;
                                                } // END - switch
                                        } // END - foreach
@@ -3713,7 +3678,7 @@ function sendModeMails ($mod, $modes) {
                                        if (getConfig('admin_notify') == 'Y') {
                                                // The admin needs to be notified about a profile change
                                                $message_admin = 'admin_mydata_notify';
-                                               $sub_adm   = getMessage('ADMIN_CHANGED_DATA');
+                                               $sub_adm   = '{--ADMIN_CHANGED_DATA--}';
                                        } else {
                                                // No mail to admin
                                                $message_admin = '';
@@ -3721,7 +3686,7 @@ function sendModeMails ($mod, $modes) {
                                        }
 
                                        // Set subject lines
-                                       $sub_mem = getMessage('MEMBER_CHANGED_DATA');
+                                       $sub_mem = '{--MEMBER_CHANGED_DATA--}';
 
                                        // Output success message
                                        $content = '<span class="member_done">{--MYDATA_MAIL_SENT--}</span>';
@@ -3754,7 +3719,7 @@ function sendModeMails ($mod, $modes) {
                        sendAdminNotification($sub_adm, $message_admin, $content, getMemberId());
                } elseif (getConfig('admin_notify') == 'Y') {
                        // Cannot send mails to admin!
-                       $content = getMessage('CANNOT_SEND_ADMIN_MAILS');
+                       $content = '{--CANNOT_SEND_ADMIN_MAILS--}';
                } else {
                        // No mail to admin
                        $content = '<span class="member_done">{--MYDATA_MAIL_SENT--}</span>';
@@ -3871,9 +3836,6 @@ function isSpider () {
 
 // 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)
@@ -3919,11 +3881,16 @@ function generateMetaDescriptionCode () {
 }
 
 // Generates an FQFN for template cache from the given template name
-function generateCacheFqfn ($template) {
+function generateCacheFqfn ($template, $mode = 'html') {
        // Is this cached?
        if (!isset($GLOBALS['template_cache_fqfn'][$template])) {
                // Generate the FQFN
-               $GLOBALS['template_cache_fqfn'][$template] = sprintf("%s_compiled/html/%s.tpl.cache", getConfig('CACHE_PATH'), $template);
+               $GLOBALS['template_cache_fqfn'][$template] = sprintf(
+                       "%s_compiled/%s/%s.tpl.cache",
+                       getConfig('CACHE_PATH'),
+                       $mode,
+                       $template
+               );
        } // END - if
 
        // Return it