X-Git-Url: https://git.mxchange.org/?p=mailer.git;a=blobdiff_plain;f=inc%2Ftemplate-functions.php;h=9c7192ab1a5d40132d25ab1f45c122e2a11e93cf;hp=00642e5d25dca5bddb080862334ac6b5caa5a286;hb=6560179e7c8dc565485503f374d4e31f333ffd0e;hpb=8fad776382e63b3f73f8dbe289f229d79cfc2c22 diff --git a/inc/template-functions.php b/inc/template-functions.php index 00642e5d25..9c7192ab1a 100644 --- a/inc/template-functions.php +++ b/inc/template-functions.php @@ -298,16 +298,16 @@ function loadTemplate ($template, $return = false, $content = array(), $compileC $GLOBALS['current_template'] = $template; // Is there cache? - if ((!isDebuggingTemplateCache()) && (isTemplateCached($template))) { + if ((!isDebuggingTemplateCache()) && (isTemplateCached('html', $template))) { // Evaluate the cache - eval(readTemplateCache($template)); - } elseif (!isset($GLOBALS['template_eval'][$template])) { + eval(readTemplateCache('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,31 +325,31 @@ 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) . '";'; + $GLOBALS['template_eval']['html'][$template] = '$ret = "' . getColorSwitchCode($template) . compileCode(escapeQuotes($code), false, true, 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) . '");'; + $GLOBALS['template_eval']['html'][$template] = '$ret = decodeEntities("' . compileRawCode(escapeJavaScriptQuotes($GLOBALS['template_content']['html'][$template]), false, true, 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) . '");'; + $GLOBALS['template_eval']['html'][$template] = '$ret = decodeEntities("' . compileRawCode(escapeQuotes($GLOBALS['template_content']['html'][$template]), false, true, 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) . '";'; + $ret = '' . $GLOBALS['template_content']['html'][$template] . ''; + $GLOBALS['template_eval']['html'][$template] = '$ret = "' . getColorSwitchCode($template) . compileRawCode(escapeQuotes($ret), false, true, true, $compileCode) . '";'; } else { // JavaScript again - $GLOBALS['template_eval'][$template] = '$ret = decodeEntities("' . compileRawCode(escapeJavaScriptQuotes($GLOBALS['tpl_content'][$template]), false, true, true, $compileCode) . '");'; + $GLOBALS['template_eval']['html'][$template] = '$ret = decodeEntities("' . compileRawCode(escapeJavaScriptQuotes($GLOBALS['template_content']['html'][$template]), false, true, true, $compileCode) . '");'; } // END - if } elseif ((isAdmin()) || ((isInstalling()) && (!isInstalled()))) { // Only admins shall see this warning or when installation mode is active @@ -365,16 +365,16 @@ function loadTemplate ($template, $return = false, $content = array(), $compileC '; } 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 @@ -395,12 +395,12 @@ function loadTemplate ($template, $return = false, $content = array(), $compileC } // 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,11 +441,11 @@ 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 @@ -471,33 +471,37 @@ function loadEmailTemplate ($template, $content = array(), $userid = NULL, $load } } // END - if - // Base directory - $basePath = sprintf("%stemplates/%s/emails/", getPath(), getLanguage()); + // Is there cache? + if ((!isDebuggingTemplateCache()) && (isTemplateCached('email', $template))) { + // Evaluate the cache + eval(readTemplateCache('email', $template)); + } elseif (!isset($GLOBALS['template_eval']['email'][$template])) { + // Base directory + $basePath = sprintf("%stemplates/%s/emails/", getPath(), getLanguage()); - // Detect extra path - $extraPath = detectExtraTemplatePath($template); + // Detect extra path + $extraPath = detectExtraTemplatePath('email', $template); - // Generate full FQFN - $FQFN = $basePath . $extraPath . $template . '.tpl'; + // 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 + // 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? + $newContent = ''; + 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])) . '");'; + } elseif (!empty($template)) { + // Template file not found + $newContent = '
{--TEMPLATE_404--}: ' . $template . '
@@ -505,25 +509,39 @@ function loadEmailTemplate ($template, $content = array(), $userid = NULL, $load
' . 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 + $newContent = secureString($newContent); + } // END - if + } else { + // No template name supplied! + $newContent = '{--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)) { // Compiling failed - $newContent = "Compiler error for template " . $template . " !\nUncompiled content:\n" . $GLOBALS['tpl_content'][$template]; + $newContent = "Compiler error for template " . $template . " !\nUncompiled content:\n" . $GLOBALS['template_content']['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."; + $newContent .= "\n--------------------------------------\nDebug:\n" . print_r(error_get_last(), true) . "--------------------------------------\nPlease don't alter these informations!\nThanx."; } // END - if } // END - if @@ -1568,26 +1586,32 @@ function determinePageTitle () { } // Checks whethere there is a cache file there. This function is cached. -function isTemplateCached ($template) { +function isTemplateCached ($prefix, $template) { // Is there cached this result? - if (!isset($GLOBALS['template_cache'][$template])) { + if (!isset($GLOBALS['template_cache'][$prefix][$template])) { // Generate FQFN - $FQFN = generateCacheFqfn($template); + $FQFN = generateCacheFqfn($prefix, $template); // Is it there? - $GLOBALS['template_cache'][$template] = isFileReadable($FQFN); + $GLOBALS['template_cache'][$prefix][$template] = isFileReadable($FQFN); } // END - if // Return it - return $GLOBALS['template_cache'][$template]; + return $GLOBALS['template_cache'][$prefix][$template]; } // Flushes non-flushed template cache to disk -function flushTemplateCache ($template, $eval) { +function flushTemplateCache ($prefix, $template, $eval) { // Is this cache flushed? - if ((isDebuggingTemplateCache() === false) && (isTemplateCached($template) === false) && ($eval != '404')) { + if ((isDebuggingTemplateCache() === false) && (isTemplateCached($prefix, $template) === false) && ($eval != '404')) { // Generate FQFN - $FQFN = generateCacheFqfn($template); + $FQFN = generateCacheFqfn($prefix, $template); + + // Is this a XML template? + if ($prefix == 'xml') { + // Compact only XML templates as emails needs new-line characters and HTML may contain required "comments" + $eval = compactContent($eval); + } // END - if // And flush it writeToFile($FQFN, $eval, true); @@ -1595,24 +1619,24 @@ function flushTemplateCache ($template, $eval) { } // Reads a template cache -function readTemplateCache ($template) { +function readTemplateCache ($prefix, $template) { // Check it again - if ((isDebuggingTemplateCache()) || (!isTemplateCached($template))) { + if ((isDebuggingTemplateCache()) || (!isTemplateCached($prefix, $template))) { // This should not happen reportBug('Wether debugging of template cache is enabled or template ' . $template . ' is not cached while expected.'); } // END - if // Is it cached? - if (!isset($GLOBALS['template_eval'][$template])) { + if (!isset($GLOBALS['template_eval'][$prefix][$template])) { // Generate FQFN - $FQFN = generateCacheFqfn($template); + $FQFN = generateCacheFqfn($prefix, $template); // And read from it - $GLOBALS['template_eval'][$template] = readFromFile($FQFN); + $GLOBALS['template_eval'][$prefix][$template] = readFromFile($FQFN); } // END - if // And return it - return $GLOBALS['template_eval'][$template]; + return $GLOBALS['template_eval'][$prefix][$template]; } // Escapes quotes (default is only double-quotes) @@ -1872,20 +1896,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( + $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 @@ -2206,5 +2230,70 @@ 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); + + // 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); + + // 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 commentd, 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(chr(10), '', str_replace(chr(13), '', $uncompactedContent))); + + // 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 + + // Set the content again + // @TODO Is this needed for e.g. $GLOBALS['template_content'] ? $this->setRawTemplateData($compactedContent); + + // Return compacted content + return $compactedContent; +} + // [EOF] ?>