From 3082135522e6e32a26061fd2363ddb5354a1272a Mon Sep 17 00:00:00 2001 From: =?utf8?q?Roland=20H=C3=A4der?= Date: Fri, 28 Dec 2012 22:21:08 +0000 Subject: [PATCH] Major rewrite of template system: - Major rewrite on template system: + Added code in flushTemplateCache() which will reduce compilation loops in doFinalCompilation() which gives a speed boost about 10-20% (not sure) + All template caches are now included, not read which gives another speed boost + DO ALWAYS PURGE YOUR TEMPLATE CACHES!!! - Other minor rewrites - Internal TODO closed by removing deprecated parameters - TODOs.txt updated --- DOCS/TODOs.txt | 49 ++++---- inc/filters.php | 12 +- inc/language/de.php | 2 +- inc/libs/html_mail_functions.php | 2 +- inc/module-functions.php | 2 +- inc/template-functions.php | 112 ++++++++++-------- inc/wrapper-functions.php | 2 +- inc/xml-functions.php | 8 +- .../html/admin/admin_list_refdepths_row.tpl | 2 +- 9 files changed, 104 insertions(+), 87 deletions(-) diff --git a/DOCS/TODOs.txt b/DOCS/TODOs.txt index 208cd59d8f..27b58fc3e9 100644 --- a/DOCS/TODOs.txt +++ b/DOCS/TODOs.txt @@ -53,14 +53,14 @@ ./inc/filter/bonus_filter.php:56: // @TODO This query isn't right, it will only update if the user was for a longer time away! ./inc/filter/cache_filter.php:94: // @TODO This should be rewritten not to load the cache file for just checking if it is there for save removal. ./inc/filter/forced_filter.php:73: // @TODO This part is unfinished -./inc/filters.php:1317: // @TODO No banner found, output some default banner -./inc/functions.php:1104: // @TODO Move this SQL code into a function, let's say 'getTimestampFromPoolId($id) ? -./inc/functions.php:1190: // @TODO Are these convertions still required? -./inc/functions.php:1211:// @TODO Rewrite this function to use readFromFile() and writeToFile() -./inc/functions.php:1820: // @TODO Find a way to cache this -./inc/functions.php:1924: // @TODO This is still very static, rewrite it somehow -./inc/functions.php:2128: // @TODO Rename column data_type to e.g. mail_status -./inc/functions.php:2478:// @TODO cacheFiles is not yet supported +./inc/filters.php:1310: // @TODO No banner found, output some default banner +./inc/functions.php:1106: // @TODO Move this SQL code into a function, let's say 'getTimestampFromPoolId($id) ? +./inc/functions.php:1192: // @TODO Are these convertions still required? +./inc/functions.php:1213:// @TODO Rewrite this function to use readFromFile() and writeToFile() +./inc/functions.php:1822: // @TODO Find a way to cache this +./inc/functions.php:1926: // @TODO This is still very static, rewrite it somehow +./inc/functions.php:2130: // @TODO Rename column data_type to e.g. mail_status +./inc/functions.php:2480:// @TODO cacheFiles is not yet supported ./inc/gen_sql_patches.php:95:// @TODO Rewrite this to a filter ./inc/header.php:66:// @TODO Find a way to not use direct module comparison ./inc/install-functions.php:446: // @TODO Comparing with DEFAULT_MAIN_TITLE doesn't work @@ -104,12 +104,12 @@ ./inc/mails/doubler_mails.php:53:// @TODO Can this be rewritten to a filter? ./inc/module-functions.php:273: // @TODO Nothing helped??? ./inc/module-functions.php:314: // @TODO Rewrite this to a filter -./inc/modules/admin/admin-inc.php:1043:// @TODO rawUserId/content is not yet supported -./inc/modules/admin/admin-inc.php:1068:// @TODO rawUserId/cacheFiles/content is not yet supported -./inc/modules/admin/admin-inc.php:163: // @TODO This and the next getCurrentAdminId() call might be moved into the templates? -./inc/modules/admin/admin-inc.php:236: // @TODO This can be rewritten into a filter -./inc/modules/admin/admin-inc.php:521:// @TODO Try to rewrite this to adminAddMenuSelectionBox() -./inc/modules/admin/admin-inc.php:868:// @TODO cacheFiles is not yet supported +./inc/modules/admin/admin-inc.php:1055:// @TODO rawUserId/content is not yet supported +./inc/modules/admin/admin-inc.php:1080:// @TODO rawUserId/cacheFiles/content is not yet supported +./inc/modules/admin/admin-inc.php:175: // @TODO This and the next getCurrentAdminId() call might be moved into the templates? +./inc/modules/admin/admin-inc.php:248: // @TODO This can be rewritten into a filter +./inc/modules/admin/admin-inc.php:533:// @TODO Try to rewrite this to adminAddMenuSelectionBox() +./inc/modules/admin/admin-inc.php:880:// @TODO cacheFiles is not yet supported ./inc/modules/admin/overview-inc.php:176: // @TODO Rewrite this to a filter ./inc/modules/admin/overview-inc.php:289: // @TODO Rewrite this to something with include files and/or filter ./inc/modules/admin/overview-inc.php:323: // @TODO This may also be rewritten to include files @@ -191,18 +191,17 @@ ./inc/mysql-manager.php:44:// @TODO Can we cache this? ./inc/purge/purge-inact.php:55: // @TODO Rewrite these if() blocks to a filter ./inc/revision-functions.php:168:// @TODO This function does also set and get in 'cache_array' -./inc/template-functions.php:1143: // @TODO Deprecate this thing -./inc/template-functions.php:1154: // @TODO Deprecate this thing -./inc/template-functions.php:1276: // @TODO This can be easily moved out after the merge from EL branch to this is complete -./inc/template-functions.php:1325: // @TODO Add a little more infos here -./inc/template-functions.php:1691:// @TODO Lame description for this function -./inc/template-functions.php:1713: // @TODO Move this in a filter +./inc/template-functions.php:1142: // @TODO Deprecate this thing +./inc/template-functions.php:1153: // @TODO Deprecate this thing +./inc/template-functions.php:1275: // @TODO This can be easily moved out after the merge from EL branch to this is complete +./inc/template-functions.php:1324: // @TODO Add a little more infos here +./inc/template-functions.php:1705:// @TODO Lame description for this function +./inc/template-functions.php:1727: // @TODO Move this in a filter ./inc/template-functions.php:200: * @TODO On some pages this is buggy -./inc/template-functions.php:2347: // @TODO Is this needed for e.g. $GLOBALS['template_content'] ? $this->setRawTemplateData($compactedContent); +./inc/template-functions.php:2361: // @TODO Is this needed for e.g. $GLOBALS['template_content'] ? $this->setRawTemplateData($compactedContent); ./inc/template-functions.php:288: // @TODO Remove these sanity checks if all is fine -./inc/template-functions.php:634:// @TODO $simple/$constants are deprecated -./inc/template-functions.php:732: // @TODO $userid is deprecated and should be removed from loadEmailTemplate() and replaced with $content[userid] in all templates -./inc/wrapper-functions.php:3176: // @TODO Find a way to not use direct module comparison +./inc/template-functions.php:731: // @TODO $userid is deprecated and should be removed from loadEmailTemplate() and replaced with $content[userid] in all templates +./inc/wrapper-functions.php:3197: // @TODO Find a way to not use direct module comparison ./inc/wrapper-functions.php:512:// @TODO Do some more sanity check here ./inc/xml-functions.php:240: // @TODO Handle characters ./mailid.php:102: // @TODO Rewrite this to a filter @@ -246,7 +245,7 @@ ./inc/libs/output_functions.php:2:// @DEPRECATED ./inc/load_extensions.php:2:// @DEPRECATED ./inc/mails/birthday_mails.php:2:// @DEPRECATED -./inc/modules/admin/admin-inc.php:522:// @DEPRECATED +./inc/modules/admin/admin-inc.php:534:// @DEPRECATED ./inc/modules/admin/what-admins_contact.php:2:// @DEPRECATED ./inc/modules/admin/what-autopurge.php:2:// @DEPRECATED ./inc/modules/admin/what-config_cache.php:2:// @DEPRECATED diff --git a/inc/filters.php b/inc/filters.php index aeb102d24d..8c2606b05c 100644 --- a/inc/filters.php +++ b/inc/filters.php @@ -998,14 +998,14 @@ function FILTER_DISPLAY_PARSING_TIME () { // Filter for flushing template cache function FILTER_FLUSH_TEMPLATE_CACHE () { // Do not flush when debugging the template cache - if (isDebuggingTemplateCache()) { + if (isDebugTemplateCacheEnabled()) { // Do not flush templates in debug-mode return; } // END - if // Is there cached eval() data? if ((isset($GLOBALS['template_eval'])) && (count($GLOBALS['template_eval']) > 0)) { - // Now flush all + // Flush all foreach ($GLOBALS['template_eval'] as $prefix => $templateArray) { foreach ($templateArray as $template => $eval) { // Flush the cache (if not yet found) @@ -1017,19 +1017,23 @@ function FILTER_FLUSH_TEMPLATE_CACHE () { // Filter for loading user data function FILTER_FETCH_USER_DATA ($userid = NULL) { - // Is the userid not set? Then use member id + // Is the userid not set? if (!isValidUserId($userid)) { + // Then use member id $userid = getMemberId(); } // END - if // Get user data if (!fetchUserData($userid)) { // Userid is not valid - reportBug(__FUNCTION__, __LINE__, 'User id '.$userid . ' is invalid.'); + reportBug(__FUNCTION__, __LINE__, 'User id ' . $userid . ' is invalid.'); } // END - if // Set member id setMemberId($userid); + + // Continue with next filter + return $userid; } // Filter for reseting users' last login failure, only available with latest ext-sql_patches diff --git a/inc/language/de.php b/inc/language/de.php index 88c39bd99a..49166e6569 100644 --- a/inc/language/de.php +++ b/inc/language/de.php @@ -1308,7 +1308,7 @@ addMessages(array( // Admin points data config - title 'ADMIN_ADD_POINTS_DATA_TITLE' => "Benutzerdefiniertes Guthabenkonto erstellen", - 'ADMIN_EDIT_POINTS_DATA_TITLE' => "Ändern von Guthabenhonten", + 'ADMIN_EDIT_POINTS_DATA_TITLE' => "Ändern von Guthabenkonten", 'ADMIN_LIST_POINTS_ACCOUNTS_TITLE' => "Alle Guthabenkonten auflisten", // Admin points data config - submit buttons diff --git a/inc/libs/html_mail_functions.php b/inc/libs/html_mail_functions.php index be00219d6c..62bc294d94 100644 --- a/inc/libs/html_mail_functions.php +++ b/inc/libs/html_mail_functions.php @@ -148,7 +148,7 @@ function insertUrlsIntoHtml ($text) { } // END - foreach // Replace new-lines agains
-s and finally compile possible own HTML tags out... - return preCompileCode(str_replace(PHP_EOL, "
" . PHP_EOL, $text)); + return preCompileCode(str_replace(PHP_EOL, '
' . PHP_EOL, $text)); } // [EOF] diff --git a/inc/module-functions.php b/inc/module-functions.php index fd44d136dc..3f4bcebfa6 100644 --- a/inc/module-functions.php +++ b/inc/module-functions.php @@ -116,7 +116,7 @@ function getModuleStatus ($module) { // Is the module_status entry there? if (!isModuleStatusSet($module)) { // Abort - reportBug('Module status not set. module=' . $module); + reportBug(__FUNCTION__, __LINE__, 'Module status not set. module=' . $module); } // END - if // Return it diff --git a/inc/template-functions.php b/inc/template-functions.php index f53fc9115a..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' @@ -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,37 +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] = '$ret = "' . compileRawCode(escapeJavaScriptQuotes($GLOBALS['template_content']['html'][$template]), FALSE, TRUE, TRUE, $compileCode) . '";'; + $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] = '$ret = "' . compileRawCode(escapeJavaScriptQuotes($GLOBALS['template_content']['html'][$template]), 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--}
@@ -395,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); } } @@ -488,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()); @@ -508,17 +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 //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Reached!'); - $GLOBALS['template_eval']['email'][$template] = '$newContent = decodeEntities("' . compileRawCode(escapeQuotes($GLOBALS['template_content']['email'][$template])) . '");'; + $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 . '
@@ -532,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'; } } @@ -551,14 +551,14 @@ function loadEmailTemplate ($template, $content = array(), $userid = NULL, $load } // 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 @@ -566,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 @@ -604,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 @@ -615,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); @@ -631,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 @@ -1627,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" @@ -1638,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? @@ -1655,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) @@ -1925,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 @@ -1954,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 diff --git a/inc/wrapper-functions.php b/inc/wrapper-functions.php index 60fccd2839..36d0bb2fe9 100644 --- a/inc/wrapper-functions.php +++ b/inc/wrapper-functions.php @@ -1100,7 +1100,7 @@ function unsetCurrentUserId () { } // Checks whether we are debugging template cache -function isDebuggingTemplateCache () { +function isDebugTemplateCacheEnabled () { // Is there cache? if (!isset($GLOBALS[__FUNCTION__])) { // Determine it diff --git a/inc/xml-functions.php b/inc/xml-functions.php index d31c992014..3fc94edf06 100644 --- a/inc/xml-functions.php +++ b/inc/xml-functions.php @@ -79,15 +79,15 @@ function doGenericXmlTemplateCallback ($template, $content = array(), $compileCo // Is it again readable? if (isFileReadable($FQFN)) { // Is there cache? - if ((!isDebuggingTemplateCache()) && (isTemplateCached('xml', $template))) { + if ((!isDebugTemplateCacheEnabled()) && (isTemplateCached('xml', $template))) { // Evaluate the cache - eval(readTemplateCache('xml', $template)); + $templateContent = readTemplateCache('xml', $template, $content); } else { // Read it $templateContent = readFromFile($FQFN); // Prepare it for finaly eval() command - $GLOBALS['template_eval']['xml'][$template] = '$templateContent = decodeEntities("' . compileRawCode(escapeJavaScriptQuotes($templateContent), FALSE, TRUE, TRUE, $compileCode) . '");'; + $GLOBALS['template_eval']['xml'][$template] = '$templateContent = decodeEntities("' . compileRawCode(escapeJavaScriptQuotes($templateContent), TRUE, $compileCode) . '");'; // Eval the code, this does insert any array elements from $content eval($GLOBALS['template_eval']['xml'][$template]); @@ -136,7 +136,7 @@ function parseXmlData ($content) { // Is there recode? if (!function_exists('recode')) { // No fallback ATM - reportBug('PHP extension recode is missing. Please install it.'); + reportBug(__FUNCTION__, __LINE__, 'PHP extension recode is missing. Please install it.'); } // END - if // Convert HTML entities to UTF-8 diff --git a/templates/de/html/admin/admin_list_refdepths_row.tpl b/templates/de/html/admin/admin_list_refdepths_row.tpl index 8f30e9a517..1f8a19648b 100644 --- a/templates/de/html/admin/admin_list_refdepths_row.tpl +++ b/templates/de/html/admin/admin_list_refdepths_row.tpl @@ -3,7 +3,7 @@ - $content[level] + {%pipe,convertNullToZero=$content[level]%} {%pipe,translateComma=$content[percents]%}% -- 2.39.5