X-Git-Url: https://git.mxchange.org/?p=mailer.git;a=blobdiff_plain;f=inc%2Ftemplate-functions.php;h=4b6420a59f013706ed0e545a6329842f5762200a;hp=d840d71f44f012752b305a3e47f224cc2dc94e33;hb=b5e396d81912f97a5752b4a4e61ae08f7c1efbd5;hpb=35cbaaa8327e421adb0d19244e60713275842efe diff --git a/inc/template-functions.php b/inc/template-functions.php index d840d71f44..4b6420a59f 100644 --- a/inc/template-functions.php +++ b/inc/template-functions.php @@ -16,7 +16,7 @@ * $Author:: $ * * -------------------------------------------------------------------- * * Copyright (c) 2003 - 2009 by Roland Haeder * - * Copyright (c) 2009 - 2012 by Mailer Developer Team * + * Copyright (c) 2009 - 2013 by Mailer Developer Team * * For more information visit: http://mxchange.org * * * * This program is free software; you can redistribute it and/or modify * @@ -41,8 +41,8 @@ if (!defined('__SECURITY')) { } // END - if // Wrapper until we merged to the EL branch -function preCompileCode ($code, $template = '', $compiled = FALSE, $full = TRUE, $overwrite = FALSE) { - return compileCode($code, FALSE, TRUE, $full); +function preCompileCode ($code, $full = TRUE) { + return compileCode($code, $full); } // Setter for 'is_template_html' @@ -93,7 +93,7 @@ function getColorSwitchCode ($template) { } // Output HTML code directly or 'render' it. You addionally switch the new-line character off -function outputHtml ($htmlCode, $newLine = TRUE) { +function outputHtml ($htmlCode = NULL, $newLine = TRUE) { // Init output if (!isset($GLOBALS['__output'])) { $GLOBALS['__output'] = ''; @@ -101,7 +101,7 @@ function outputHtml ($htmlCode, $newLine = TRUE) { //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'getOutputMode()=' . getOutputMode() . ',htmlCode(length)=' . strlen($htmlCode) . ',output(length)=' . strlen($GLOBALS['__output'])); // Is there HTML-Code here? - if (!empty($htmlCode)) { + if ((!is_null($htmlCode)) && (!empty($htmlCode))) { // Yes, so we handle it as you have configured switch (getOutputMode()) { case 'render': @@ -180,6 +180,15 @@ function outputHtml ($htmlCode, $newLine = TRUE) { // Compiles the final output function compileFinalOutput () { //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, '__output(length)=' . strlen($GLOBALS['__output']) . ',getScriptOutputMode()=' . getScriptOutputMode() . ' - ENTERED!'); + // Is this function called? + if (isset($GLOBALS[__FUNCTION__])) { + // Abort here + reportBug(__FUNCTION__, __LINE__, 'Double call of ' . __FUNCTION__ . ' causes problems with sent headers.'); + } // END - if + + // Mark this function as called + $GLOBALS[__FUNCTION__] = TRUE; + // Add page header and footer addPageHeaderFooter(); //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, '__output(length)=' . strlen($GLOBALS['__output']) . ' - After addPageHeaderFooter() call.'); @@ -226,26 +235,26 @@ function doFinalCompilation ($code, $insertComments = TRUE, $enableCodes = TRUE) enableTemplateHtml($insertComments); // Init counter - $count = 0; + $totalCompilations = 0; // Compile all out - while (((isInString('{--', $code)) || (isInString('{DQUOTE}', $code)) || (isInString('{?', $code)) || (isInString('{%', $code) !== FALSE)) && ($count < 7)) { + while (((isInString('{--', $code)) || (isInString('{DQUOTE}', $code)) || (isInString('{?', $code)) || (isInString('{%', $code) !== FALSE)) && ($totalCompilations < 7)) { // Init common variables $content = array(); $newContent = ''; // Compile it - //* DEBUG: */ debugOutput('
'.linenumberCode($code).'
'); - $eval = '$newContent = "' . str_replace('{DQUOTE}', '"', compileCode(escapeQuotes($code), FALSE, TRUE, $enableCodes)) . '";'; - //* DEBUG: */ if (!$insertComments) print('EVAL=
'.linenumberCode($eval).'
'); + //* DEBUG: */ debugOutput('
'.lineNumberCode($code).'
'); + $eval = '$newContent = "' . str_replace('{DQUOTE}', '"', compileCode(escapeQuotes($code), $enableCodes)) . '";'; + //* DEBUG: */ if (!$insertComments) print('EVAL=
'.lineNumberCode($eval).'
'); eval($eval); - //* DEBUG: */ if (!$insertComments) print('NEW=
'.linenumberCode($newContent).'
'); + //* DEBUG: */ if (!$insertComments) print('NEW=
'.lineNumberCode($newContent).'
'); //* DEBUG: */ die('
'.encodeEntities($newContent).'
'); // Was that eval okay? if (empty($newContent)) { // Something went wrong! - reportBug(__FUNCTION__, __LINE__, 'Evaluation error:
' . linenumberCode($eval) . '
', FALSE); + reportBug(__FUNCTION__, __LINE__, 'Evaluation error:
' . lineNumberCode($eval) . '
', FALSE); } // END - if // Use it again @@ -258,13 +267,14 @@ function doFinalCompilation ($code, $insertComments = TRUE, $enableCodes = TRUE) } // END - if // Count round - $count++; + $totalCompilations++; } // END - while // Add debugging data in HTML code, if mode is enabled - if ((isDebugModeEnabled()) && ($insertComments === TRUE) && ((isHtmlOutputMode()) || (isCssOutputMode()))) { + if ((isDebugModeEnabled()) && ($insertComments === TRUE) && (isHtmlOutputMode())) { // Add loop count - $code .= ''; + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'isDebugModeEnabled()=' . intval(isDebugModeEnabled()) . ',insertComments=' . intval($insertComments) . ',isHtmlOutputMode()=' . intval(isHtmlOutputMode())); + $code .= ''; } // END - if // Return the compiled code @@ -301,9 +311,12 @@ function loadTemplate ($template, $return = FALSE, $content = array(), $compileC $GLOBALS['current_template'] = $template; // Is there cache? - if ((!isDebuggingTemplateCache()) && (isTemplateCached('html', $template))) { + if ((!isDebugTemplateCacheEnabled()) && (isTemplateCached('html', $template))) { // Evaluate the cache - eval(readTemplateCache('html', $template)); + $templateContent = readTemplateCache('html', $template, $content); + + // Better remove array element which is only needed in uncached mode + unset($GLOBALS['template_eval']['html'][$template]); } elseif (!isset($GLOBALS['template_eval']['html'][$template])) { // Make all template names lowercase $template = strtolower($template); @@ -339,29 +352,37 @@ function loadTemplate ($template, $return = FALSE, $content = array(), $compileC // Prepare eval() command //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Reached!'); - $GLOBALS['template_eval']['html'][$template] = '$ret = "' . getColorSwitchCode($template) . compileCode(escapeQuotes($code), FALSE, TRUE, TRUE, $compileCode) . '";'; + $GLOBALS['template_eval']['html'][$template] = '$templateContent = "' . getColorSwitchCode($template) . compileCode(escapeQuotes($code), TRUE, $compileCode) . '";'; } elseif (substr($template, 0, 3) == 'js_') { // JavaScripts don't like entities, dollar signs and timings //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Reached!'); - $GLOBALS['template_eval']['html'][$template] = '$ret = decodeEntities("' . compileRawCode(escapeJavaScriptQuotes($GLOBALS['template_content']['html'][$template]), FALSE, TRUE, TRUE, $compileCode) . '");'; + $GLOBALS['template_eval']['html'][$template] = '$templateContent = decodeEntities("' . compileRawCode(escapeJavaScriptQuotes($GLOBALS['template_content']['html'][$template]), TRUE, $compileCode) . '");'; + } elseif (isAjaxOutputMode()) { + // AJAX (JSON content) + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Reached!'); + $GLOBALS['template_eval']['html'][$template] = '$templateContent = "' . compileRawCode(escapeJavaScriptQuotes($GLOBALS['template_content']['html'][$template]), TRUE, $compileCode) . '";'; } else { // Prepare eval() command, other output doesn't like entities, maybe //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Reached!'); - $GLOBALS['template_eval']['html'][$template] = '$ret = decodeEntities("' . compileRawCode(escapeQuotes($GLOBALS['template_content']['html'][$template]), FALSE, TRUE, TRUE, $compileCode) . '");'; + $GLOBALS['template_eval']['html'][$template] = '$templateContent = decodeEntities("' . compileRawCode(escapeQuotes($GLOBALS['template_content']['html'][$template]), TRUE, $compileCode) . '");'; } } elseif (isHtmlOutputMode()) { // Add surrounding HTML comments to help finding bugs faster - $ret = '' . $GLOBALS['template_content']['html'][$template] . ''; + $templateContent = '' . $GLOBALS['template_content']['html'][$template] . ''; //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Reached!'); - $GLOBALS['template_eval']['html'][$template] = '$ret = "' . getColorSwitchCode($template) . compileRawCode(escapeQuotes($ret), FALSE, TRUE, TRUE, $compileCode) . '";'; + $GLOBALS['template_eval']['html'][$template] = '$templateContent = "' . getColorSwitchCode($template) . compileRawCode(escapeQuotes($templateContent), TRUE, $compileCode) . '";'; + } elseif (isAjaxOutputMode()) { + // AJAX (JSON content) + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Reached!'); + $GLOBALS['template_eval']['html'][$template] = '$templateContent = "' . compileRawCode(escapeJavaScriptQuotes($GLOBALS['template_content']['html'][$template]), TRUE, $compileCode) . '";'; } else { // JavaScript again //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Reached!'); - $GLOBALS['template_eval']['html'][$template] = '$ret = decodeEntities("' . compileRawCode(escapeJavaScriptQuotes($GLOBALS['template_content']['html'][$template]), FALSE, TRUE, TRUE, $compileCode) . '");'; + $GLOBALS['template_eval']['html'][$template] = '$templateContent = decodeEntities("' . compileRawCode(escapeJavaScriptQuotes($GLOBALS['template_content']['html'][$template]), TRUE, $compileCode) . '");'; } // END - if } elseif ((isAdmin()) || ((isInstalling()) && (!isInstalled()))) { // Only admins shall see this warning or when installation mode is active - $ret = '
+ $templateContent = '
{--TEMPLATE_404--}
@@ -387,18 +408,18 @@ function loadTemplate ($template, $return = FALSE, $content = array(), $compileC } // END - if // Is there some content to output or return? - if (!empty($ret)) { - // Not empty so let's put it out! ;) - if ($return === TRUE) { - // Return the HTML code - return $ret; - } else { - // Output directly - outputHtml($ret); - } - } elseif (isDebugModeEnabled()) { + if ((empty($templateContent)) && (isDebugModeEnabled())) { // Warning, empty output! return 'E:' . $template . ',content=
' . print_r($content, TRUE) . '
'; + } // END - if + + // Not empty so let's put it out! ;) + if ($return === TRUE) { + // Return the HTML code + return $templateContent; + } else { + // Output directly + outputHtml($templateContent); } } @@ -467,7 +488,7 @@ function loadEmailTemplate ($template, $content = array(), $userid = NULL, $load // Is content an array? if (is_array($content)) { // Add expiration to array - if ((isExtensionInstalled('autopurge')) && (getAutoPurge() == '0')) { + if ((isExtensionInstalled('autopurge')) && (isConfigEntrySet('auto_purge')) && (getAutoPurge() == '0')) { // Will never expire! $content['expiration'] = '{--MAIL_WILL_NEVER_EXPIRE--}'; } elseif ((isExtensionInstalled('autopurge')) && (isConfigEntrySet('auto_purge'))) { @@ -480,9 +501,12 @@ function loadEmailTemplate ($template, $content = array(), $userid = NULL, $load } // END - if // Is there cache? - if ((!isDebuggingTemplateCache()) && (isTemplateCached('email', $template))) { + if ((!isDebugTemplateCacheEnabled()) && (isTemplateCached('email', $template))) { // Evaluate the cache - eval(readTemplateCache('email', $template)); + $templateContent = readTemplateCache('email', $template, $content); + + // Better remove array element which is need only in uncached mode + unset($GLOBALS['template_eval']['email'][$template]); } elseif (!isset($GLOBALS['template_eval']['email'][$template])) { // Base directory $basePath = sprintf("%stemplates/%s/emails/", getPath(), getLanguage()); @@ -500,16 +524,17 @@ function loadEmailTemplate ($template, $content = array(), $userid = NULL, $load } // END - if // Now does the final template exists? - $newContent = ''; + $templateContent = ''; if (isFileReadable($FQFN)) { // The local file does exists so we load it. :) $GLOBALS['template_content']['email'][$template] = readFromFile($FQFN); // Run code - $GLOBALS['template_eval']['email'][$template] = '$newContent = decodeEntities("' . compileRawCode(escapeQuotes($GLOBALS['template_content']['email'][$template])) . '");'; + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Reached!'); + $GLOBALS['template_eval']['email'][$template] = '$templateContent = decodeEntities("' . compileRawCode(escapeQuotes($GLOBALS['template_content']['email'][$template])) . '");'; } elseif (!empty($template)) { // Template file not found - $newContent = '
+ $templateContent = '
{--TEMPLATE_404--}: ' . $template . '
@@ -523,11 +548,11 @@ function loadEmailTemplate ($template, $content = array(), $userid = NULL, $load // Debug mode not active? Then remove the HTML tags if (!isDebugModeEnabled()) { // Remove HTML tags - $newContent = secureString($newContent); + $templateContent = secureString($templateContent); } // END - if } else { // No template name supplied! - $newContent = '{--NO_TEMPLATE_SUPPLIED--}'; + $templateContent = '{--NO_TEMPLATE_SUPPLIED--}'; $GLOBALS['template_eval']['email'][$template] = '404'; } } @@ -536,20 +561,20 @@ function loadEmailTemplate ($template, $content = array(), $userid = NULL, $load if ((isset($GLOBALS['template_eval']['email'][$template])) && ($GLOBALS['template_eval']['email'][$template] != '404')) { // Eval the code //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'template=' . $template . ' - BEFORE EVAL'); - ///* DEBUG: */ print('
'.htmlentities($GLOBALS['template_eval']['email'][$template]).'
'); + //* DEBUG: */ print('
'.htmlentities($GLOBALS['template_eval']['email'][$template]).'
'); eval($GLOBALS['template_eval']['email'][$template]); //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'template=' . $template . ' - AFTER EVAL'); } // END - if // Are there some content? - if (empty($newContent)) { + if (empty($templateContent)) { // Compiling failed - $newContent = "Compiler error for template " . $template . " !\nUncompiled content:\n" . $GLOBALS['template_eval']['email'][$template]; + $templateContent = "Compiler error for template " . $template . " !\nUncompiled content:\n" . $GLOBALS['template_eval']['email'][$template]; // Add last error if the required function exists if (function_exists('error_get_last')) { // Add last error and some lines for better overview - $newContent .= "\n--------------------------------------\nDebug:\n" . print_r(error_get_last(), TRUE) . "--------------------------------------\nPlease don't alter these informations!\nThanx."; + $templateContent .= "\n--------------------------------------\nDebug:\n" . print_r(error_get_last(), TRUE) . "--------------------------------------\nPlease don't alter these informations!\nThanx."; } // END - if } // END - if @@ -557,7 +582,7 @@ function loadEmailTemplate ($template, $content = array(), $userid = NULL, $load unset($content); // Return content - return $newContent; + return $templateContent; } // "Getter" for menu CSS classes, mainly used in templates @@ -591,11 +616,11 @@ function getMenuCssClasses ($data) { // Generate XHTML code for the CAPTCHA function generateCaptchaCode ($code, $type, $urlId, $userid) { - return 'Code ' . $code . ''; + return 'Code ' . $code . ''; } // Compiles the given HTML/mail code -function compileCode ($code, $simple = FALSE, $constants = TRUE, $full = TRUE, $compileCode = TRUE) { +function compileCode ($code, $full = TRUE, $compileCode = TRUE) { // Is the code a string or should we not compile? if ((!is_string($code)) || ($compileCode === FALSE)) { // Silently return it @@ -606,7 +631,7 @@ function compileCode ($code, $simple = FALSE, $constants = TRUE, $full = TRUE, $ $startCompile = microtime(TRUE); // Comile the code - $code = compileRawCode($code, $simple, $constants, $full); + $code = compileRawCode($code, $full, $compileCode); // Get timing $compilationTime = $startCompile - microtime(TRUE); @@ -622,8 +647,7 @@ function compileCode ($code, $simple = FALSE, $constants = TRUE, $full = TRUE, $ } // Compiles the code -// @TODO $simple/$constants are deprecated -function compileRawCode ($code, $simple = FALSE, $constants = TRUE, $full = TRUE, $compileCode = TRUE) { +function compileRawCode ($code, $full = TRUE, $compileCode = TRUE) { // Is the code a string or shall we not compile? if ((!is_string($code)) || ($compileCode === FALSE)) { // Silently return it @@ -740,46 +764,30 @@ function compileRawCode ($code, $simple = FALSE, $constants = TRUE, $full = TRUE } // -function addSelectionBox ($type, $default, $prefix = '', $id = '0', $class = 'form_select') { +function addSelectionBox ($type, $default, $prefix = '', $id = NULL, $class = 'form_select') { $OUT = ''; if ($type == 'yn') { // This is a yes/no selection only! - if ($id > 0) $prefix .= '[' . $id . ']'; + if (isValidId($id)) $prefix .= '[' . $id . ']'; $OUT .= ''; } switch ($type) { - case 'day': // Day - for ($idx = 1; $idx < 32; $idx++) { - $OUT .= ''; - // Calculate earliest year depending on extension version - if (isExtensionInstalledAndNewer('other', '0.2.1')) { - // Use configured minimum age - $year = getYear() - getConfig('min_age'); - } else { - // Use fixed 16 years age - $year = getYear() - 16; - } // Construct year selection list - for ($idx = $minYear; $idx <= $year; $idx++) { + for ($idx = $minYear; $idx <= $startYear; $idx++) { $OUT .= '