X-Git-Url: https://git.mxchange.org/?p=mailer.git;a=blobdiff_plain;f=inc%2Ftemplate-functions.php;h=7003ffd1eaba9330a1b99823b024df0708ddc249;hp=e2b65de7493b5ff4ce6d1d2a7793549796265bed;hb=ba69a4633825777ad8e257f776ab30c96e3d8ae8;hpb=96d8f54d3fee1d51c38dd6b79c28215f7f5c83ec diff --git a/inc/template-functions.php b/inc/template-functions.php index e2b65de749..7003ffd1ea 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,12 +41,12 @@ 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' -function enableTemplateHtml ($enable = true) { +function enableTemplateHtml ($enable = TRUE) { $GLOBALS['is_template_html'] = (bool) $enable; } @@ -56,7 +56,7 @@ function isTemplateHtml () { // Is the output_mode other than 0 (HTML), then no comments are enabled if (!isHtmlOutputMode()) { // No HTML - return false; + return FALSE; } else { // Maybe HTML? return $GLOBALS['is_template_html']; @@ -86,14 +86,14 @@ function initTemplateColorSwitch ($template) { // "Getter" for color switch code function getColorSwitchCode ($template) { // Prepare the code - $code = "{DQUOTE} . doTemplateColorSwitch('" . $template . "', false, false) . {DQUOTE}"; + $code = "{DQUOTE} . doTemplateColorSwitch('" . $template . "', FALSE, FALSE) . {DQUOTE}"; // And return it return $code; } // 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': @@ -111,16 +111,16 @@ function outputHtml ($htmlCode, $newLine = true) { outputRawCode($htmlCode); // That's why you don't need any \n at the end of your HTML code... :-) - if ($newLine === true) { - outputRawCode(chr(10)); + if ($newLine === TRUE) { + outputRawCode(PHP_EOL); } // END - if } else { // Render mode for old or lame servers... $GLOBALS['__output'] .= $htmlCode; // That's why you don't need any \n at the end of your HTML code... :-) - if ($newLine === true) { - $GLOBALS['__output'] .= chr(10); + if ($newLine === TRUE) { + $GLOBALS['__output'] .= PHP_EOL; } // END - if } break; @@ -134,8 +134,8 @@ function outputHtml ($htmlCode, $newLine = true) { // The same as above... ^ outputRawCode($htmlCode); - if ($newLine === true) { - outputRawCode(chr(10)); + if ($newLine === TRUE) { + outputRawCode(PHP_EOL); } // END - if break; @@ -180,12 +180,24 @@ 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.'); - // Do the final compilation - $GLOBALS['__output'] = compileUriCode(doFinalCompilation($GLOBALS['__output'])); + // Do the final (general) compilation + $GLOBALS['__output'] = doFinalCompilation($GLOBALS['__output']); + + // Compile any other things out + $GLOBALS['__output'] = compileUriCode($GLOBALS['__output']); // Extension 'rewrite' installed? if ((isExtensionActive('rewrite')) && (!isCssOutputMode())) { @@ -218,50 +230,51 @@ function compileFinalOutput () { } // Main compilation loop -function doFinalCompilation ($code, $insertComments = true, $enableCodes = true) { +function doFinalCompilation ($code, $insertComments = TRUE, $enableCodes = TRUE) { // Insert comments? (Only valid with HTML templates, of course) 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 $code = $newContent; // Compile the final code if insertComments is true - if ($insertComments == true) { + if ($insertComments == TRUE) { // ... because SQL queries shall keep OPEN_CONFIG and such in $code = compileRawCode($code); } // 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 @@ -281,7 +294,7 @@ function outputRawCode ($htmlCode) { } // Load a template file and return it's content (only it's name; do not use ' or ") -function loadTemplate ($template, $return = false, $content = array(), $compileCode = true) { +function loadTemplate ($template, $return = FALSE, $content = array(), $compileCode = TRUE) { // @TODO Remove these sanity checks if all is fine if (!is_bool($return)) { // $return has to be boolean @@ -298,16 +311,19 @@ function loadTemplate ($template, $return = false, $content = array(), $compileC $GLOBALS['current_template'] = $template; // Is there cache? - if ((!isDebuggingTemplateCache()) && (isTemplateCached($template))) { + if ((!isDebugTemplateCacheEnabled()) && (isTemplateCached('html', $template))) { // Evaluate the cache - eval(readTemplateCache($template)); - } elseif (!isset($GLOBALS['template_eval'][$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); // Base directory $basePath = sprintf("%stemplates/%s/html/", getPath(), getLanguage()); - $extraPath = detectExtraTemplatePath($template); + $extraPath = detectExtraTemplatePath('html', $template); // Generate FQFN $FQFN = $basePath . $extraPath . $template . '.tpl'; @@ -325,35 +341,48 @@ function loadTemplate ($template, $return = false, $content = array(), $compileC incrementConfigEntry('num_templates'); // The local file does exists so we load it. :) - $GLOBALS['tpl_content'][$template] = readFromFile($FQFN); + $GLOBALS['template_content']['html'][$template] = readFromFile($FQFN); // Is there to compile the code? - if ((isInString('$', $GLOBALS['tpl_content'][$template])) || (isInString('{--', $GLOBALS['tpl_content'][$template])) || (isInString('{?', $GLOBALS['tpl_content'][$template])) || (isInString('{%', $GLOBALS['tpl_content'][$template]))) { + if ((isInString('$', $GLOBALS['template_content']['html'][$template])) || (isInString('{--', $GLOBALS['template_content']['html'][$template])) || (isInString('{?', $GLOBALS['template_content']['html'][$template])) || (isInString('{%', $GLOBALS['template_content']['html'][$template]))) { // Normal HTML output? if ((isHtmlOutputMode()) && (substr($template, 0, 3) != 'js_')) { // Add surrounding HTML comments to help finding bugs faster - $code = '' . $GLOBALS['tpl_content'][$template] . ''; + $code = '' . $GLOBALS['template_content']['html'][$template] . ''; // Prepare eval() command - $GLOBALS['template_eval'][$template] = '$ret = "' . getColorSwitchCode($template) . compileCode(escapeQuotes($code), false, true, true, $compileCode) . '";'; + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Reached!'); + $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 - $GLOBALS['template_eval'][$template] = '$ret = decodeEntities("' . compileRawCode(escapeJavaScriptQuotes($GLOBALS['tpl_content'][$template]), false, true, true, $compileCode) . '");'; + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Reached!'); + $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 - $GLOBALS['template_eval'][$template] = '$ret = decodeEntities("' . compileRawCode(escapeQuotes($GLOBALS['tpl_content'][$template]), false, true, true, $compileCode) . '");'; + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Reached!'); + $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['tpl_content'][$template] . ''; - $GLOBALS['template_eval'][$template] = '$ret = "' . getColorSwitchCode($template) . compileRawCode(escapeQuotes($ret), false, true, true, $compileCode) . '";'; + $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] = '$templateContent = "' . compileRawCode(escapeJavaScriptQuotes($GLOBALS['template_content']['html'][$template]), TRUE, $compileCode) . '";'; } else { // JavaScript again - $GLOBALS['template_eval'][$template] = '$ret = decodeEntities("' . compileRawCode(escapeJavaScriptQuotes($GLOBALS['tpl_content'][$template]), false, true, true, $compileCode) . '");'; + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Reached!'); + $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--}
@@ -361,46 +390,46 @@ function loadTemplate ($template, $return = false, $content = array(), $compileC
{--TEMPLATE_CONTENT--}: -
' . print_r($content, true) . '
+
' . print_r($content, TRUE) . '
'; } else { // No file! - $GLOBALS['template_eval'][$template] = '404'; + $GLOBALS['template_eval']['html'][$template] = '404'; } } // Code set? - if ((isset($GLOBALS['template_eval'][$template])) && ($GLOBALS['template_eval'][$template] != '404')) { + if ((isset($GLOBALS['template_eval']['html'][$template])) && ($GLOBALS['template_eval']['html'][$template] != '404')) { // Eval the code //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'template=' . $template . ' - BEFORE EVAL'); - ///* DEBUG: */ print('
'.htmlentities($GLOBALS['template_eval'][$template]).'
'); - eval($GLOBALS['template_eval'][$template]); + ///* DEBUG: */ print('
'.htmlentities($GLOBALS['template_eval']['html'][$template]).'
'); + eval($GLOBALS['template_eval']['html'][$template]); //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'template=' . $template . ' - AFTER EVAL'); } // 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) . '
'; + 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); } } // Detects the extra template path from given template name -function detectExtraTemplatePath ($template) { +function detectExtraTemplatePath ($prefix, $template) { // Default is empty $extraPath = ''; // Is there cache? - if (!isset($GLOBALS['extra_path'][$template])) { + if (!isset($GLOBALS['extra_path'][$prefix][$template])) { // Check for admin/guest/member/etc. templates if (substr($template, 0, 6) == 'admin_') { // Admin template found @@ -441,15 +470,15 @@ function detectExtraTemplatePath ($template) { } // Store it in cache - $GLOBALS['extra_path'][$template] = $extraPath; + $GLOBALS['extra_path'][$prefix][$template] = $extraPath; } // END - if // Return result - return $GLOBALS['extra_path'][$template]; + return $GLOBALS['extra_path'][$prefix][$template]; } // Loads an email template and compiles it -function loadEmailTemplate ($template, $content = array(), $userid = NULL, $loadUserData = true) { +function loadEmailTemplate ($template, $content = array(), $userid = NULL, $loadUserData = TRUE) { // Make sure all template names are lowercase! $template = strtolower($template); @@ -459,10 +488,10 @@ function loadEmailTemplate ($template, $content = array(), $userid = NULL, $load // Is content an array? if (is_array($content)) { // Add expiration to array - if ((isConfigEntrySet('auto_purge')) && (getAutoPurge() == '0')) { + if ((isExtensionInstalled('autopurge')) && (isConfigEntrySet('auto_purge')) && (getAutoPurge() == '0')) { // Will never expire! $content['expiration'] = '{--MAIL_WILL_NEVER_EXPIRE--}'; - } elseif (isConfigEntrySet('auto_purge')) { + } elseif ((isExtensionInstalled('autopurge')) && (isConfigEntrySet('auto_purge'))) { // Create nice date string $content['expiration'] = '{%config,createFancyTime=auto_purge%}'; } else { @@ -471,59 +500,81 @@ function loadEmailTemplate ($template, $content = array(), $userid = NULL, $load } } // END - if - // Base directory - $basePath = sprintf("%stemplates/%s/emails/", getPath(), getLanguage()); + // Is there cache? + if ((!isDebugTemplateCacheEnabled()) && (isTemplateCached('email', $template))) { + // Evaluate the cache + $templateContent = readTemplateCache('email', $template, $content); - // Detect extra path - $extraPath = detectExtraTemplatePath($template); + // 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()); - // Generate full FQFN - $FQFN = $basePath . $extraPath . $template . '.tpl'; + // Detect extra path + $extraPath = detectExtraTemplatePath('email', $template); - // Does the special template exists? - if (!isFileReadable($FQFN)) { - // Reset to default template - $FQFN = $basePath . $template . '.tpl'; - } // END - if + // Generate full FQFN + $FQFN = $basePath . $extraPath . $template . '.tpl'; + + // Does the special template exists? + if (!isFileReadable($FQFN)) { + // Reset to default template + $FQFN = $basePath . $template . '.tpl'; + } // END - if - // Now does the final template exists? - $newContent = ''; - if (isFileReadable($FQFN)) { - // The local file does exists so we load it. :) - $GLOBALS['tpl_content'][$template] = readFromFile($FQFN); - - // Run code - $GLOBALS['tpl_content'][$template] = '$newContent = decodeEntities("' . compileRawCode(escapeQuotes($GLOBALS['tpl_content'][$template])) . '");'; - eval($GLOBALS['tpl_content'][$template]); - } elseif (!empty($template)) { - // Template file not found - $newContent = '
+ // Now does the final template exists? + $templateContent = ''; + if (isFileReadable($FQFN)) { + // The local file does exists so we load it. :) + $GLOBALS['template_content']['email'][$template] = readFromFile($FQFN); + + // Run code + //* 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 + $templateContent = '
{--TEMPLATE_404--}: ' . $template . '
{--TEMPLATE_CONTENT--}: -
' . print_r($content, true) . '
+
' . print_r($content, TRUE) . '
'; - // Debug mode not active? Then remove the HTML tags - if (!isDebugModeEnabled()) { - // Remove HTML tags - $newContent = secureString($newContent); - } // END - if - } else { - // No template name supplied! - $newContent = '{--NO_TEMPLATE_SUPPLIED--}'; + // Don't cache this, as there is no template to cache + $GLOBALS['template_eval']['email'][$template] = '404'; + + // Debug mode not active? Then remove the HTML tags + if (!isDebugModeEnabled()) { + // Remove HTML tags + $templateContent = secureString($templateContent); + } // END - if + } else { + // No template name supplied! + $templateContent = '{--NO_TEMPLATE_SUPPLIED--}'; + $GLOBALS['template_eval']['email'][$template] = '404'; + } } + // Is there something to eval? + 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]).'
'); + 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['tpl_content'][$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 @@ -531,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 @@ -565,25 +616,25 @@ 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)) { + if ((!is_string($code)) || ($compileCode === FALSE)) { // Silently return it return $code; } // END - if // Start couting - $startCompile = microtime(true); + $startCompile = microtime(TRUE); // Comile the code - $code = compileRawCode($code, $simple, $constants, $full); + $code = compileRawCode($code, $full, $compileCode); // Get timing - $compilationTime = $startCompile - microtime(true); + $compilationTime = $startCompile - microtime(TRUE); // Add timing if enabled if (isTemplateHtml()) { @@ -596,10 +647,9 @@ 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)) { + if ((!is_string($code)) || ($compileCode === FALSE)) { // Silently return it return $code; } // END - if @@ -608,7 +658,7 @@ function compileRawCode ($code, $simple = false, $constants = true, $full = true $secChars = $GLOBALS['url_chars']; // Select full set of chars to replace when we e.g. want to compile URLs - if ($full === true) { + if ($full === TRUE) { $secChars = $GLOBALS['security_chars']; } // END - if @@ -632,7 +682,7 @@ function compileRawCode ($code, $simple = false, $constants = true, $full = true $matchesFound = array(); foreach ($matches[0] as $key => $match) { // Fuzzy look has failed by default - $fuzzyFound = false; + $fuzzyFound = FALSE; // Fuzzy look on match if already found foreach ($matchesFound as $found => $set) { @@ -644,13 +694,13 @@ function compileRawCode ($code, $simple = false, $constants = true, $full = true if ($test == $match) { // Match found //* NOISY-DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'fuzzyFound!'); - $fuzzyFound = true; + $fuzzyFound = TRUE; break; } // END - if } // END - foreach // Skip this entry? - if ($fuzzyFound === true) { + if ($fuzzyFound === TRUE) { continue; } // END - if @@ -661,7 +711,7 @@ function compileRawCode ($code, $simple = false, $constants = true, $full = true $newMatch = str_replace(array('[', ']', '$'), array("['", "']", '{COMPILE_DOLLAR}'), $match); $code = str_replace($match, '".' . $newMatch . '."', $code); $matchesFound[$key . '_' . $matches[3][$key]] = 1; - $matchesFound[$match] = true; + $matchesFound[$match] = TRUE; } elseif (!isset($matchesFound[$match])) { // Not yet replaced! //* NOISY-DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'match=' . $match); @@ -714,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 .= ''; // Allow none? - if ($allowNone === true) { + if ($allowNone === TRUE) { // Then add it $OUT .= ''; } // END - if @@ -1791,10 +1820,10 @@ function generateSelectionBoxFromArray ($options, $name, $optionKey, $optionCont // Is a template name given? if (empty($templateName)) { // ... $name template - $OUT .= loadTemplate('select_' . $name . $extraName . '_option', true, $option); + $OUT .= loadTemplate('select_' . $name . $extraName . '_option', TRUE, $option); } else { // ... $templateName template - $OUT .= loadTemplate('select_' . $templateName . $extraName . '_option', true, $option); + $OUT .= loadTemplate('select_' . $templateName . $extraName . '_option', TRUE, $option); } } else { // ... direct HTML code @@ -1813,10 +1842,10 @@ function generateSelectionBoxFromArray ($options, $name, $optionKey, $optionCont // Load template and return it if (empty($templateName)) { // Use name from $name + $extraName - return loadTemplate('select_' . $name . $extraName . '_box', true, $content); + return loadTemplate('select_' . $name . $extraName . '_box', TRUE, $content); } else { // Use name from $templateName + $extraName - return loadTemplate('select_' . $templateName . $extraName . '_box', true, $content); + return loadTemplate('select_' . $templateName . $extraName . '_box', TRUE, $content); } } @@ -1861,7 +1890,7 @@ function addPageHeaderFooter () { // Generates meta description for current module and 'what' value function generateMetaDescriptionCode () { - // Only include from guest area and if sql_patches has correct version + // Only include from guest area and if ext-sql_patches has correct version if ((getModule() == 'index') && (isExtensionInstalledAndNewer('sql_patches', '0.1.6'))) { // Output it directly $GLOBALS['__page_header'] .= ''; @@ -1872,20 +1901,20 @@ function generateMetaDescriptionCode () { } // Generates an FQFN for template cache from the given template name -function generateCacheFqfn ($template, $mode = 'html') { +function generateCacheFqfn ($prefix, $template) { // Is this cached? - if (!isset($GLOBALS['template_cache_fqfn'][$template])) { + if (!isset($GLOBALS['template_cache_fqfn'][$prefix][$template])) { // Generate the FQFN - $GLOBALS['template_cache_fqfn'][$template] = sprintf( - "%s_compiled/%s/%s.tpl.cache", + $GLOBALS['template_cache_fqfn'][$prefix][$template] = sprintf( + '%s_compiled/%s/%s.tpl.cache', getCachePath(), - $mode, + $prefix, $template ); } // END - if // Return it - return $GLOBALS['template_cache_fqfn'][$template]; + return $GLOBALS['template_cache_fqfn'][$prefix][$template]; } // "Fixes" null or empty string to count of dashes @@ -1906,7 +1935,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 @@ -1928,11 +1957,17 @@ function translateTimeUnit ($unit) { } // Displays given message in admin_settings_saved template -function displayMessage ($message, $return = false) { +function displayMessage ($message, $return = FALSE) { // Load the template return loadTemplate('admin_settings_saved', $return, $message); } +// Displays given error message in admin_settings_saved template +function displayErrorMessage ($message, $return = FALSE) { + // Load the template + return loadTemplate('admin_settings_unsaved', $return, $message); +} + // Generates a selection box for (maybe) given gender function generateGenderSelectionBox ($selectedGender = '', $fieldName = 'gender') { // Start the HTML code @@ -2016,24 +2051,89 @@ function addJavaScriptMenuContent ($menuMode, $mainAction, $action, $what) { return $OUT; } +// Tries to anonymize some sensitive data (e.g. IP address, user agent, referrer, etc.) +function anonymizeSensitiveData ($data) { + // Trim it + $data = trim($data); + + // Is it empty? + if (empty($data)) { + // Then add three dashes + $data = '---'; + } elseif (isUrlValid($data)) { + // Is a referrer, so is it black-listed? + if (isAdmin()) { + // Is admin, has always priority + $data = '[{--ADMIN_TEST_URL--}]'; + } elseif ((isExtensionActive('blacklist')) && (isUrlBlacklisted($data))) { + // Yes, so replace it with text + $data = '{--URL_IS_BLACKLISTED--}'; + } else { + // A member is viewing this referral URL + $data = '[{--MEMBER_TEST_URL--}]'; + } + } elseif (isIp4AddressValid($data)) { + // Is an IPv4 address + $ipArray = explode('.', $data); + + // Only display first 2 octets + $data = $ipArray[0] . '.' . $ipArray[1] . '.?.?'; + } else { + // Generic data + $data = '{--DATA_IS_HIDDEN--}'; + } + + // Return it (hopefully) anonymized + return $data; +} + +/** + * Removes all comments, tabs and new-line characters to compact the content + * + * @param $uncompactedContent The uncompacted content + * @return $compactedContent The compacted content + */ +function compactContent ($uncompactedContent) { + // First, remove all tab/new-line/revert characters + $compactedContent = str_replace(chr(9), '', str_replace(PHP_EOL, '', str_replace(chr(13), '', $uncompactedContent))); + + // Make a space after > + $compactedContent = str_replace(array('>', ' '), array('> ', ' '), $compactedContent); + + // Then regex all comments like away + preg_match_all('//', $compactedContent, $matches); + + // Do we have entries? + if (isset($matches[0][0])) { + // Remove all + foreach ($matches[0] as $match) { + // Remove the match + $compactedContent = str_replace($match, '', $compactedContent); + } // END - foreach + } // END - if + + // Return compacted content + return $compactedContent; +} + //----------------------------------------------------------------------------- // Template helper functions for EL code //----------------------------------------------------------------------------- // Color-switch helper function -function doTemplateColorSwitch ($templateName, $clear = false, $return = true) { +function doTemplateColorSwitch ($templateName, $clear = FALSE, $return = TRUE) { // Is it there? if (!isset($GLOBALS['color_switch'][$templateName])) { // Initialize it initTemplateColorSwitch($templateName); - } elseif ($clear === false) { + } elseif ($clear === FALSE) { // Switch color if called from loadTemplate() //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'SWITCH:' . $templateName); $GLOBALS['color_switch'][$templateName] = 3 - $GLOBALS['color_switch'][$templateName]; } // Return CSS class name - if ($return === true) { + if ($return === TRUE) { //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'RETURN:' . $templateName . '=' . $GLOBALS['color_switch'][$templateName]); return 'switch_sw' . $GLOBALS['color_switch'][$templateName]; } // END - if @@ -2050,7 +2150,7 @@ function doTemplateExtensionRegistrationLink ($templateName, $clear, $ext_name) $OUT = '---'; } elseif (isExtensionProductive($ext_name)) { // Productive code - $OUT = '{--ADMIN_REGISTER_EXTENSION--}'; + $OUT = '{--ADMIN_REGISTER_EXTENSION--}'; } // Return code @@ -2060,13 +2160,13 @@ function doTemplateExtensionRegistrationLink ($templateName, $clear, $ext_name) // Helper function to create bonus mail admin links function doTemplateAdminBonusMailLinks ($templateName, $clear, $bonusId) { // Call the inner function - return generateAdminMailLinks('bid', $bonusId); + return generateAdminMailLinks('bonus', $bonusId); } // Helper function to create member mail admin links function doTemplateAdminMemberMailLinks ($templateName, $clear, $mailId) { // Call the inner function - return generateAdminMailLinks('mid', $mailId); + return generateAdminMailLinks('normal', $mailId); } // Helper function to create a selection box for YES/NO configuration entries @@ -2108,6 +2208,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? @@ -2177,7 +2296,7 @@ function doTemplateGetTermsConditionsLink ($templateName, $clear) { } // Template helper function to create selection box for "locked points mode" -function doTemplatePointsLockedModeSelectionBox ($templateName, $clear = false, $default = NULL) { +function doTemplatePointsLockedModeSelectionBox ($templateName, $clear = FALSE, $default = NULL) { // Init array $lockedModes = array( 0 => array('mode' => 'LOCKED'), @@ -2192,7 +2311,7 @@ function doTemplatePointsLockedModeSelectionBox ($templateName, $clear = false, } // Template helper function to create selection box for payment method -function doTemplatePointsPaymentMethodSelectionBox ($templateName, $clear = false, $default = NULL) { +function doTemplatePointsPaymentMethodSelectionBox ($templateName, $clear = FALSE, $default = NULL) { // Init array $paymentMethods = array( 0 => array('method' => 'DIRECT'), @@ -2206,40 +2325,41 @@ function doTemplatePointsPaymentMethodSelectionBox ($templateName, $clear = fals return $content; } -// Tries to anonymize some sensitive data (e.g. IP address, user agent, referrer, etc.) -function anonymizeSensitiveData ($data) { - // Trim it - $data = trim($data); +// Template helper function to create a deferrer code if URL is not empty +function doTemplateDereferrerUrl ($templateName, $clear = FALSE, $url = NULL) { + // Is the URL not NULL and not empty? + if ((!is_null($url)) && (!empty($url))) { + // Set HTML with EL code + $url = '{--ADMIN_TEST_URL--}'; + } // END - if - // Is it empty? - if (empty($data)) { - // Then add three dashes - $data = '---'; - } elseif (isUrlValid($data)) { - // Is a referrer, so is it black-listed? - if (isAdmin()) { - // Is admin, has always priority - $data = '[{--ADMIN_TEST_URL--}]'; - } elseif (isUrlBlacklisted($data)) { - // Yes, so replace it with text - $data = '{--URL_IS_BLACKLISTED--}'; - } else { - // A member is viewing this referral URL - $data = '[{--MEMBER_TEST_URL--}]'; - } - } elseif (isIp4AddressValid($data)) { - // Is an IPv4 address - $ipArray = explode('.', $data); + // Return URL (or content) or dashes if empty + return fixEmptyContentToDashes($url); +} - // Only display first 2 octets - $data = $ipArray[0] . '.' . $ipArray[1] . '.?.?'; - } else { - // Generic data - $data = '{--DATA_IS_HIDDEN--}'; - } +// Load another template and return its content +function doTemplateLoadTemplate ($templateName, $clear = FALSE, $theTemplate, $content = array()) { + // Load "the" template + return loadTemplate($theTemplate, TRUE, $content); +} - // Return it (hopefully) anonymized - return $data; +// Output HTML code for favicon.ico, if found +function doTemplateMetaFavIcon ($templateName, $clear = FALSE) { + // Default is not found + $out = ''; + + // Check all common extensions + foreach (array('ico', 'gif', 'png') as $extension) { + // Is the file there? + if (isFileReadable(getPath() . 'favicon.' . $extension)) { + // Then use this and abort + $out = ''; + break; + } // END - if + } // END - while + + // Return code + return $out; } // [EOF]