]> git.mxchange.org Git - mailer.git/blobdiff - inc/functions.php
Several fixes applied:
[mailer.git] / inc / functions.php
index 0a38bdf44108522f4896ade1a1f49c3f22d1dc43..bac7b16a82c2a885ece8cd0f7738929d43bf0ecf 100644 (file)
@@ -136,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)) {
@@ -195,6 +169,44 @@ function compileFinalOutput () {
        flushHeaders();
 }
 
+// Main compilation loop
+function doFinalCompilation ($code, $insertComments = true) {
+       // Insert comments?
+       enableTemplateHtml($insertComments);
+
+       // Init counter
+       $cnt = 0;
+
+       // Compile all out
+       while (((strpos($code, '{--') !== false) || (strpos($code, '{DQUOTE}') !== false) || (strpos($code, '{!') !== false) || (strpos($code, '{?') !== false) || (strpos($code, '{%') !== false)) && ($cnt < 3)) {
+               // Init common variables
+               $content = array();
+               $newContent = '';
+
+               // Compile it
+               //* DEBUG: */ print '<pre>'.htmlentities($code).'</pre>';
+               $eval = '$newContent = "' . str_replace('{DQUOTE}', '"', compileCode(escapeQuotes($code))) . '";';
+               //* DEBUG: */ die('<pre>'.htmlentities($eval).'</pre>');
+               eval($eval);
+               //* DEBUG: */ die('<pre>'.htmlentities($newContent).'</pre>');
+
+               // Was that eval okay?
+               if (empty($newContent)) {
+                       // Something went wrong!
+                       debug_report_bug(__FUNCTION__, __LINE__, 'Evaluation error:<pre>' . linenumberCode($eval) . '</pre>', false);
+               } // END - if
+
+               // Use it again
+               $code = $newContent;
+
+               // Count round
+               $cnt++;
+       } // END - while
+
+       // Return the compiled code
+       return $code;
+}
+
 // Output the raw HTML code
 function outputRawCode ($htmlCode) {
        // Output stripped HTML code to avoid broken JavaScript code, etc.
@@ -557,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
@@ -566,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>
@@ -592,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);
@@ -602,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('Ending up: template=' . $template);
 }
 
 // Check to use wether legacy mail() command or PHPMailer class
@@ -614,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()) {
@@ -754,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;
@@ -814,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;
@@ -981,15 +987,15 @@ 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 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'] = '';
 
@@ -997,7 +1003,7 @@ function redirectToUrl ($URL, $allowSpider = true) {
                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');
@@ -1011,17 +1017,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
@@ -1041,8 +1038,11 @@ 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;
@@ -3871,6 +3871,9 @@ 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)