X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=inc%2Ftemplate-functions.php;h=dc13d3e1b95e30d8ae7aaab5dcd45c0c7e74afd1;hb=8b077b6e346bb473d05dc202d231b0cfc5179109;hp=d840d71f44f012752b305a3e47f224cc2dc94e33;hpb=aeec066f10841fd53a015a6bfc91a246c576506d;p=mailer.git diff --git a/inc/template-functions.php b/inc/template-functions.php index d840d71f44..dc13d3e1b9 100644 --- a/inc/template-functions.php +++ b/inc/template-functions.php @@ -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': @@ -236,7 +236,7 @@ function doFinalCompilation ($code, $insertComments = TRUE, $enableCodes = TRUE) // Compile it //* DEBUG: */ debugOutput('
'.linenumberCode($code).'
'); - $eval = '$newContent = "' . str_replace('{DQUOTE}', '"', compileCode(escapeQuotes($code), FALSE, TRUE, $enableCodes)) . '";'; + $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).'
'); @@ -301,9 +301,9 @@ 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); } elseif (!isset($GLOBALS['template_eval']['html'][$template])) { // Make all template names lowercase $template = strtolower($template); @@ -339,29 +339,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] = '$templateContent = "' . getColorSwitchCode($template) . compileRawCode(escapeQuotes($templateContent), TRUE, $compileCode) . '";'; + } elseif (isAjaxOutputMode()) { + // AJAX (JSON content) //* 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 = "' . 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 +395,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 +475,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 +488,9 @@ 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); } elseif (!isset($GLOBALS['template_eval']['email'][$template])) { // Base directory $basePath = sprintf("%stemplates/%s/emails/", getPath(), getLanguage()); @@ -500,16 +508,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 +532,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 +545,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 +566,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 @@ -595,7 +604,7 @@ function generateCaptchaCode ($code, $type, $urlId, $userid) { } // 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 +615,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 +631,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 @@ -1208,8 +1216,14 @@ function app_exit ($F, $L, $message) { // Make sure, that the script realy realy diese here and now $GLOBALS['app_died'] = TRUE; - // Set content type as text/html - setContentType('text/html'); + // Is this AJAX mode? + if (isAjaxOutputMode()) { + // Set content type as application/json + setContentType('application/json'); + } else { + // Set content type as text/html + setContentType('text/html'); + } // Load header loadIncludeOnce('inc/header.php'); @@ -1222,8 +1236,17 @@ function app_exit ($F, $L, $message) { $message ); - // Load the message template - loadTemplate('app_exit_message', FALSE, $message); + // Is this AJAX mode again + if (isAjaxOutputMode()) { + // Load the message template + $OUT = loadTemplate('ajax_app_exit_message', TRUE, $message); + + // Output it as JSON encoded + outputHtml(encodeJson(array('reply_content' => urlencode(doFinalCompilation($OUT))))); + } else { + // Load the message template + loadTemplate('app_exit_message', FALSE, $message); + } // Load footer loadIncludeOnce('inc/footer.php'); @@ -1549,17 +1572,8 @@ function determinePageTitle () { $pageTitle .= ' {%config,trim=title_middle%} {DQUOTE} . getModuleTitle(getModule()) . {DQUOTE}'; } // END - if - // Add title from what file - $menuMode = ''; - if (getModule() == 'login') { - $menuMode = 'member'; - } elseif (getModule() == 'index') { - $menuMode = 'guest'; - } elseif (getModule() == 'admin') { - $menuMode = 'admin'; - } elseif (getModule() == 'sponsor') { - $menuMode = 'sponsor'; - } + // Get menu mode from module + $menuMode = getMenuModeFromModule(); // Add middle part (always in admin area!) if ((!empty($menuMode)) && ((isWhatTitleEnabled()) || ($menuMode == 'admin'))) { @@ -1612,10 +1626,13 @@ function isTemplateCached ($prefix, $template) { // Flushes non-flushed template cache to disk function flushTemplateCache ($prefix, $template, $eval) { // Is this cache flushed? - if ((isDebuggingTemplateCache() === FALSE) && (isTemplateCached($prefix, $template) === FALSE) && ($eval != '404')) { + if ((isDebugTemplateCacheEnabled() === FALSE) && (isTemplateCached($prefix, $template) === FALSE) && ($eval != '404')) { // Generate FQFN $FQFN = generateCacheFqfn($prefix, $template); + // Compile code another round for better performance and preserve $ signs + $eval = str_replace(array(chr(92), '{DOLLAR}', '{BACK}', '{CONTENT}'), array('', '$', chr(92), '$content'), compileCode(str_replace(array('$content', chr(92)), array('{CONTENT}', '{BACK}'), $eval))); + // Is this a XML template? if ($prefix == 'xml') { // Compact only XML templates as emails needs new-line characters and HTML may contain required "comments" @@ -1623,16 +1640,16 @@ function flushTemplateCache ($prefix, $template, $eval) { } // END - if // And flush it - writeToFile($FQFN, $eval, TRUE); + writeToFile($FQFN, '', TRUE); } // END - if } // Reads a template cache -function readTemplateCache ($prefix, $template) { +function readTemplateCache ($prefix, $template, $content) { // Check it again - if ((isDebuggingTemplateCache()) || (!isTemplateCached($prefix, $template))) { + if ((isDebugTemplateCacheEnabled()) || (!isTemplateCached($prefix, $template))) { // This should not happen - reportBug('Wether debugging of template cache is enabled or template ' . $template . ' is not cached while expected.'); + reportBug(__FUNCTION__, __LINE__, 'Wether debugging of template cache is enabled or template ' . $template . ' is not cached while expected.'); } // END - if // Is it cached? @@ -1640,12 +1657,24 @@ function readTemplateCache ($prefix, $template) { // Generate FQFN $FQFN = generateCacheFqfn($prefix, $template); - // And read from it - $GLOBALS['template_eval'][$prefix][$template] = readFromFile($FQFN); + /* + * And read from it. + * + * WARNING: Do not replace this include() call with loadInclude() as it + * would hide local variables away which is here required to make this + * work. + */ + include($FQFN); + + // Is the template cache valid? + if (!isset($templateContent)) { + // Please clear your cache! + reportBug(__FUNCTION__, __LINE__, 'Template ' . $template . ' uses old structure. Please delete all template cache files and reload.'); + } // END - if } // END - if // And return it - return $GLOBALS['template_eval'][$prefix][$template]; + return $templateContent; } // Escapes quotes (default is only double-quotes) @@ -1687,7 +1716,7 @@ function sendModeMails ($mod, $modes) { $hash = encodeHashForCookie(getUserData('password')); // Does the hash match or should we change it? - if (($hash == getSession('u_hash')) || (postRequestElement('pass1') == postRequestElement('pass2'))) { + if (($hash == getSession('u_hash')) || (postRequestElement('password1') == postRequestElement('password2'))) { // Load the data $content = getUserDataArray(); @@ -1910,7 +1939,7 @@ function generateCacheFqfn ($prefix, $template) { if (!isset($GLOBALS['template_cache_fqfn'][$prefix][$template])) { // Generate the FQFN $GLOBALS['template_cache_fqfn'][$prefix][$template] = sprintf( - "%s_compiled/%s/%s.tpl.cache", + '%s_compiled/%s/%s.tpl.cache', getCachePath(), $prefix, $template @@ -1939,7 +1968,7 @@ function fixNullEmptyToDashes ($str, $num) { // Translates the "pool type" into human-readable function translatePoolType ($type) { // Return "translation" - return sprintf("{--POOL_TYPE_%s--}", strtoupper($type)); + return sprintf('{--POOL_TYPE_%s--}', strtoupper($type)); } // "Translates" given time unit @@ -2141,6 +2170,25 @@ function doTemplateNoYesSelectionBox ($templateName, $clear, $formField) { return $OUT; } +// Helper function to add extra content for guest area (module=index and others) +function doTemplateGuestFooterExtras ($templateName, $clear) { + // Init filter data + $filterData = array( + // Name of used template + 'template' => $templateName, + // Target array for gathered data + '__data' => array(), + // Where the HTML output will go + '__output' => '', + ); + + // Run the filter chain + $filterData = runFilterChain('guest_footer_extras', $filterData); + + // Return output + return $filterData['__output']; +} + // Helper function to add extra content for member area (module=login) function doTemplateMemberFooterExtras ($templateName, $clear) { // Is a member logged in?