]> 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 2a9a94bc21a5a9d19db3ddb3a786ebf4d57b719e..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
@@ -140,37 +136,11 @@ 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'], '{DQUOTE}') !== false) || (strpos($GLOBALS['output'], '{!') !== false) || (strpos($GLOBALS['output'], '{?') !== false) || (strpos($GLOBALS['output'], '{%') !== false)) && ($cnt < 3)) {
-               // Init common variables
-               $content = array();
-               $newContent = '';
-
-               // Compile it
-               //* DEBUG: */ print '<pre>'.htmlentities($GLOBALS['output']).'</pre>';
-               $eval = '$newContent = "' . str_replace('{DQUOTE}', '"', compileCode(escapeQuotes($GLOBALS['output']))) . '";';
-               //* DEBUG: */ die('<pre>'.htmlentities($eval).'</pre>');
-               eval($eval);
-               //* DEBUG: */ die('<pre>'.htmlentities($newContent).'</pre>');
-
-               // Was that eval okay?
-               if (empty($newContent)) {
-                       // Something went wrong!
-                       debug_report_bug(__FUNCTION__, __LINE__, 'Evaluation error:<pre>' . linenumberCode($eval) . '</pre>', false);
-               } // END - if
-
-               // Use it again
-               $GLOBALS['output'] = $newContent;
-
-               // Count round
-               $cnt++;
-       } // END - while
+       // Do the final compilation
+       $GLOBALS['output'] = doFinalCompilation($GLOBALS['output']);
 
        // Extension 'rewrite' installed?
        if ((isExtensionActive('rewrite')) && (getOutputMode() != 1)) {
@@ -199,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.
@@ -266,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);
 
@@ -301,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
@@ -564,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
@@ -573,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>
@@ -599,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);
@@ -609,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
@@ -621,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()) {
@@ -761,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;
@@ -821,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;
@@ -881,7 +880,7 @@ function translateMenuVisibleLocked ($content, $prefix = '') {
                case 'N': $content[$prefix . 'visible_css'] = $prefix . 'menu_invisible'; break;
                default:
                        // Please report this
-                       debug_report_bug('Unsupported visible value detected. content=<pre>'.print_r($content, true).'</pre>');
+                       debug_report_bug(__FUNCTION__, __LINE__, 'Unsupported visible value detected. content=<pre>'.print_r($content, true).'</pre>');
                        break;
        } // END - switch
 
@@ -892,7 +891,7 @@ function translateMenuVisibleLocked ($content, $prefix = '') {
                case 'N': $content[$prefix . 'locked_css'] = $prefix . 'menu_unlocked'; break;
                default:
                        // Please report this
-                       debug_report_bug('Unsupported locked value detected. content=<pre>'.print_r($content, true).'</pre>');
+                       debug_report_bug(__FUNCTION__, __LINE__, 'Unsupported locked value detected. content=<pre>'.print_r($content, true).'</pre>');
                        break;
        } // END - switch
 
@@ -988,20 +987,26 @@ function redirectToUrl ($URL, $allowSpider = true) {
 
        // 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');
@@ -1015,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(__FUNCTION__, __LINE__, sprintf("Configuration entry %s is not set!", $configEntry));
-       } // END - if
-
        // Load the URL
-       redirectToUrl($URL);
+       redirectToUrl(getConfig($configEntry));
 }
 
 // Compiles the given HTML/mail code
@@ -1045,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)) {
@@ -1070,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) {
@@ -2423,7 +2414,7 @@ function displayParsingTime () {
        // Prepare output
        // @TODO This can be easily moved out after the merge from EL branch to this is complete
        $content = array(
-               'run_time' => translateComma($runTime),
+               'run_time' => $runTime,
                'sql_time' => translateComma(getConfig('sql_time') * 1000),
        );
 
@@ -2640,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;
 
@@ -3491,7 +3482,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
 }
 
@@ -3577,10 +3568,10 @@ 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');
@@ -3615,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