X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=inc%2Ftemplate-functions.php;h=d08805fa50f5e7938fa4758b4af32ad3a3adb03a;hb=f40ee6b3fe47308625f3490dedb1c52174ddf9f1;hp=4086492753c43731870cf2d2198a478800be9d07;hpb=6bb119cb426a2ab3998a5c3dfe250d748f786a1c;p=mailer.git
diff --git a/inc/template-functions.php b/inc/template-functions.php
index 4086492753..d08805fa50 100644
--- a/inc/template-functions.php
+++ b/inc/template-functions.php
@@ -10,16 +10,9 @@
* -------------------------------------------------------------------- *
* Kurzbeschreibung : Template-Funktionen *
* -------------------------------------------------------------------- *
- * $Revision:: $ *
- * $Date:: $ *
- * $Tag:: 0.2.1-FINAL $ *
- * $Author:: $ *
- * Needs to be in all Files and every File needs "svn propset *
- * svn:keywords Date Revision" (autoprobset!) at least!!!!!! *
- * -------------------------------------------------------------------- *
* Copyright (c) 2003 - 2009 by Roland Haeder *
- * Copyright (c) 2009, 2010 by Mailer Developer Team *
- * For more information visit: http://www.mxchange.org *
+ * Copyright (c) 2009 - 2016 by Mailer Developer Team *
+ * For more information visit: http://mxchange.org *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
@@ -43,22 +36,22 @@ 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;
}
-// Checks wether the template is HTML or not by previously set flag
+// Checks whether the template is HTML or not by previously set flag
// Default: true
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'];
@@ -72,11 +65,8 @@ function debugOutput ($message) {
// "Fixes" an empty string into three dashes (use for templates)
function fixEmptyContentToDashes ($str) {
- // Trim the string
- $str = trim($str);
-
- // Is the string empty?
- if (empty($str)) $str = '---';
+ // Call inner function
+ $str = fixNullEmptyToDashes($str, 3);
// Return string
return $str;
@@ -91,60 +81,71 @@ 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'] = '';
+ if (!isset($GLOBALS['__output'])) {
+ $GLOBALS['__output'] = '';
} // END - if
- // Do we have HTML-Code here?
- if (!empty($htmlCode)) {
+ //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'getOutputMode()=' . getOutputMode() . ',htmlCode(length)=' . strlen($htmlCode) . ',output(length)=' . strlen($GLOBALS['__output']));
+ // Is there HTML-Code here?
+ if ((!is_null($htmlCode)) && (!empty($htmlCode))) {
// Yes, so we handle it as you have configured
switch (getOutputMode()) {
case 'render':
- // That's why you don't need any \n at the end of your HTML code... :-)
+ // But if PHP is caching, then we don't need to do that
if (getPhpCaching() == 'on') {
// Output into PHP's internal buffer
outputRawCode($htmlCode);
// That's why you don't need any \n at the end of your HTML code... :-)
- if ($newLine === true) print("\n");
+ if ($newLine === TRUE) {
+ outputRawCode(PHP_EOL);
+ } // END - if
} else {
// Render mode for old or lame servers...
- $GLOBALS['output'] .= $htmlCode;
+ $GLOBALS['__output'] .= $htmlCode;
// That's why you don't need any \n at the end of your HTML code... :-)
- if ($newLine === true) $GLOBALS['output'] .= "\n";
+ if ($newLine === TRUE) {
+ $GLOBALS['__output'] .= PHP_EOL;
+ } // END - if
}
break;
case 'direct':
- // If we are switching from render to direct output rendered code
- if ((!empty($GLOBALS['output'])) && (getPhpCaching() != 'on')) { outputRawCode($GLOBALS['output']); $GLOBALS['output'] = ''; }
+ // If we are switching from 'render' to 'direct' mode, all data in '__output' must be flushed and cleared
+ if ((!empty($GLOBALS['__output'])) && (getPhpCaching() != 'on')) {
+ outputRawCode($GLOBALS['__output']);
+ $GLOBALS['__output'] = '';
+ } // END - if
// The same as above... ^
outputRawCode($htmlCode);
- if ($newLine === true) print("\n");
+ if ($newLine === TRUE) {
+ outputRawCode(PHP_EOL);
+ } // END - if
break;
default:
// Huh, something goes wrong or maybe you have edited config.php ???
- debug_report_bug(__FUNCTION__, __LINE__, '{--FATAL_ERROR--}: {--NO_RENDER_DIRECT--}');
+ reportBug(__FUNCTION__, __LINE__, '{--FATAL_ERROR--}: {--NO_RENDER_DIRECT--}');
break;
} // END - switch
- } elseif ((getPhpCaching() == 'on') && ((!isset($GLOBALS['header'])) || (count($GLOBALS['header']) == 0))) {
+ } elseif ((getPhpCaching() == 'on') && (!isFilledArray($GLOBALS['http_header'])) && (!isRawOutputMode())) {
+ //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'getPhpCaching()=' . getPhpCaching() . ',isset(http_header)=' . intval(isset($GLOBALS['http_header'])) . ',getScriptOutputMode()=' . getScriptOutputMode() . '');
// Output cached HTML code
- $GLOBALS['output'] = ob_get_contents();
+ $GLOBALS['__output'] = ob_get_contents();
// Clear output buffer for later output if output is found
- if (!empty($GLOBALS['output'])) {
+ if (!empty($GLOBALS['__output'])) {
clearOutputBuffer();
} // END - if
@@ -155,8 +156,8 @@ function outputHtml ($htmlCode, $newLine = true) {
compileFinalOutput();
// Output code here, DO NOT REMOVE! ;-)
- outputRawCode($GLOBALS['output']);
- } elseif ((getOutputMode() == 'render') && (!empty($GLOBALS['output']))) {
+ outputRawCode($GLOBALS['__output']);
+ } elseif ((getOutputMode() == 'render') && (!empty($GLOBALS['__output'])) && (!isRawOutputMode())) {
// Send all HTTP headers
sendHttpHeaders();
@@ -164,85 +165,117 @@ function outputHtml ($htmlCode, $newLine = true) {
compileFinalOutput();
// Output code here, DO NOT REMOVE! ;-)
- outputRawCode($GLOBALS['output']);
+ outputRawCode($GLOBALS['__output']);
} else {
// And flush all headers
- flushHeaders();
+ flushHttpHeaders();
}
}
// 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'] = 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())) {
- $GLOBALS['output'] = rewriteLinksInCode($GLOBALS['output']);
+ $GLOBALS['__output'] = rewriteLinksInCode($GLOBALS['__output']);
} // END - if
// Compress it?
/**
* @TODO On some pages this is buggy
- if (!empty($_SERVER['HTTP_ACCEPT_ENCODING']) && (strpos('gzip', $_SERVER['HTTP_ACCEPT_ENCODING']) !== null)) {
+ if (!empty($_SERVER['HTTP_ACCEPT_ENCODING']) && (isInStringIgnoreCase('gzip', $_SERVER['HTTP_ACCEPT_ENCODING']))) {
// Compress it for HTTP gzip
- $GLOBALS['output'] = gzencode($GLOBALS['output'], 9);
+ $GLOBALS['__output'] = gzencode($GLOBALS['__output'], 9);
// Add header
- sendHeader('Content-Encoding: gzip');
- } elseif (!empty($_SERVER['HTTP_ACCEPT_ENCODING']) && (strpos('deflate', $_SERVER['HTTP_ACCEPT_ENCODING']) !== null)) {
+ addHttpHeader('Content-Encoding: gzip');
+ } elseif (!empty($_SERVER['HTTP_ACCEPT_ENCODING']) && (isInStringIgnoreCase('deflate', $_SERVER['HTTP_ACCEPT_ENCODING']))) {
// Compress it for HTTP deflate
- $GLOBALS['output'] = gzcompress($GLOBALS['output'], 9);
+ $GLOBALS['__output'] = gzcompress($GLOBALS['__output'], 9);
// Add header
- sendHeader('Content-Encoding: deflate');
+ addHttpHeader('Content-Encoding: deflate');
}
*/
// Add final length
- sendHeader('Content-Length: ' . strlen($GLOBALS['output']));
+ addHttpHeader('Content-Length: ' . strlen($GLOBALS['__output']));
// Flush all headers
- flushHeaders();
+ flushHttpHeaders();
}
// Main compilation loop
-function doFinalCompilation ($code, $insertComments = true, $enableCodes = true) {
+function doFinalCompilation ($code, $insertComments = TRUE, $enableCodes = TRUE) {
+ // Code must not be an array (happens in installer)
+ assert(!is_array($code));
+
// Insert comments? (Only valid with HTML templates, of course)
enableTemplateHtml($insertComments);
// Init counter
- $cnt = 0;
+ $totalCompilations = 0;
// Compile all out
- while (((strpos($code, '{--') !== false) || (strpos($code, '{DQUOTE}') !== false) || (strpos($code, '{?') !== false) || (strpos($code, '{%') !== false)) && ($cnt < 5)) {
+ while (((isInString('{--', $code)) || (isInString('{DQUOTE}', $code)) || (isInString('{?', $code)) || (isInString('{%', $code) !== FALSE)) && ($totalCompilations < 7)) {
// Init common variables
$content = array();
$newContent = '';
// Compile it
- //* DEBUG: */ debugOutput('
');
+ eval($GLOBALS['template_eval']['html'][$template]);
+ //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'template=' . $template . ' - AFTER EVAL');
} // END - if
- // Do we have 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()) {
+ // Is there some content to output or return?
+ 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 = '';
- // Do we have cache?
- if (!isset($GLOBALS['extra_path'][$template])) {
+ // Is there cache?
+ if (!isset($GLOBALS['extra_path'][$prefix][$template])) {
// Check for admin/guest/member/etc. templates
if (substr($template, 0, 6) == 'admin_') {
// Admin template found
@@ -409,174 +469,192 @@ 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 = '0') {
- global $DATA;
-
+function loadEmailTemplate ($template, $content = array(), $userid = NULL, $loadUserData = TRUE) {
// Make sure all template names are lowercase!
$template = strtolower($template);
+ // Set current template
+ $GLOBALS['current_template'] = $template;
+
// 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'] = createFancyTime(getAutoPurge());
+ $content['expiration'] = '{%config,createFancyTime=auto_purge%}';
} else {
// Missing entry
$content['expiration'] = '{--MAIL_NO_CONFIG_AUTO_PURGE--}';
}
} // END - if
- // Load user's data
- //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "UID={$userid},template={$template},content[]=".gettype($content));
- if ((isValidUserId($userid)) && (is_array($content))) {
- // If nickname extension is installed, fetch nickname as well
- if ((isExtensionActive('nickname')) && (isNicknameUsed($userid))) {
- //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "NICKNAME! ");
- // Load by nickname
- fetchUserData($userid, 'nickname');
- } else {
- //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "NO-NICK! ");
- /// Load by userid
- fetchUserData($userid);
- }
-
- // Merge data if valid
- //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "content()=".count($content)." - PRE ");
- if (isUserDataValid()) {
- $content = merge_array($content, getUserDataArray());
- } // END - if
- //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, "content()=".count($content)." - AFTER ");
- } // END - if
+ // Is there cache?
+ if ((!isDebugTemplateCacheEnabled()) && (isTemplateCached('email', $template))) {
+ // Evaluate the cache
+ $templateContent = readTemplateCache('email', $template, $content);
- // Base directory
- $basePath = sprintf("%stemplates/%s/emails/", getPath(), getLanguage());
+ // 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 = getTemplateBasePath('emails');
- // 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'] = readFromFile($FQFN);
-
- // Run code
- $GLOBALS['tpl_content'] = '$newContent = decodeEntities("' . compileRawCode(escapeQuotes($GLOBALS['tpl_content'])) . '");';
- eval($GLOBALS['tpl_content']);
- } 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) . '
- {--TEMPLATE_DATA--}
-
' . print_r($DATA, true) . '
+ {--TEMPLATE_CONTENT--}:
+
' . print_r($content, TRUE) . '
';
- // Debug mode not active? Then remove the HTML tags
- if (!isDebugModeEnabled()) $newContent = secureString($newContent);
- } 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 some content?
- if (empty($newContent)) {
+ // 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('