X-Git-Url: https://git.mxchange.org/?p=mailer.git;a=blobdiff_plain;f=inc%2Ffunctions.php;h=1d7c71f5d230274e05c92a05351c2c551fb2fa97;hp=a8935e8c2c38ac5917d416a2e5034de479989290;hb=995488beda665a1fc3de65df95f2d1ae236d1245;hpb=d82ad60fff612012db4d72d1f0eadd755a0a62d4 diff --git a/inc/functions.php b/inc/functions.php index a8935e8c2c..1d7c71f5d2 100644 --- a/inc/functions.php +++ b/inc/functions.php @@ -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 '
'.htmlentities($GLOBALS['output']).'
'; - $eval = '$newContent = "' . str_replace('{DQUOTE}', '"', compileCode(escapeQuotes($GLOBALS['output']))) . '";'; - //* DEBUG: */ die('
'.htmlentities($eval).'
'); - eval($eval); - //* DEBUG: */ die('
'.htmlentities($newContent).'
'); - - // Was that eval okay? - if (empty($newContent)) { - // Something went wrong! - debug_report_bug(__FUNCTION__, __LINE__, 'Evaluation error:
' . linenumberCode($eval) . '
', 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? + 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 '
'.htmlentities($code).'
'; + $eval = '$newContent = "' . str_replace('{DQUOTE}', '"', compileCode(escapeQuotes($code))) . '";'; + //* DEBUG: */ die('
'.htmlentities($eval).'
'); + eval($eval); + //* DEBUG: */ die('
'.htmlentities($newContent).'
'); + + // Was that eval okay? + if (empty($newContent)) { + // Something went wrong! + debug_report_bug(__FUNCTION__, __LINE__, 'Evaluation error:
' . linenumberCode($eval) . '
', 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}
"); // 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('$', '$', 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('
@@ -599,6 +592,9 @@ To      : ' . htmlentities(utf8_decode($toEmail)) . '
 Subject : ' . htmlentities(utf8_decode($subject)) . '
 Message : ' . htmlentities(utf8_decode($message)) . '
 
'); + + // 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=
'.print_r($content, true).'
'); + debug_report_bug(__FUNCTION__, __LINE__, 'Unsupported visible value detected. content=
'.print_r($content, true).'
'); 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=
'.print_r($content, true).'
'); + debug_report_bug(__FUNCTION__, __LINE__, 'Unsupported locked value detected. content=
'.print_r($content, true).'
'); break; } // END - switch @@ -988,20 +987,23 @@ 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('' . $URL . ''); + outputHtml('' . secureString($URL) . ''); } elseif (!headers_sent()) { + // Clear output buffer + clearOutputBuffer(); + // Clear own output buffer $GLOBALS['output'] = ''; + // Set header + setHttpStatus('302 Found'); + // Load URL when headers are not sent - sendHeader('Location: '.str_replace('&', '&', $URL)); + sendRawRedirect(doFinalCompilation(str_replace('&', '&', $URL), false)); } else { // Output error message loadInclude('inc/header.php'); @@ -1015,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 @@ -1045,15 +1038,18 @@ function compileCode ($code, $simple = false, $constants = true, $full = true) { // Get timing $compiled = microtime(true); - // Add timing - $code .= ''; + // Add timing if enabled + if (isTemplateHtml()) { + // Add timing, this should be disabled in + $code .= ''; + } // 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 +1066,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 +2411,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), ); @@ -3491,7 +3479,7 @@ function initCacheInstance () { $GLOBALS['cache_instance'] = new CacheSystem(); if ($GLOBALS['cache_instance']->getStatus() != 'done') { // Failed to initialize cache sustem - addFatalMessage(__FUNCTION__, __LINE__, '(' . __LINE__ . '): ' . getMessage('CACHE_CANNOT_INITIALIZE')); + addFatalMessage(__FUNCTION__, __LINE__, '(' . __LINE__ . '): {--CACHE_CANNOT_INITIALIZE--}'); } // END - if } @@ -3615,9 +3603,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 @@ -3878,6 +3863,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)