]> git.mxchange.org Git - mailer.git/commitdiff
Major rewrite of template system:
authorRoland Häder <roland@mxchange.org>
Fri, 28 Dec 2012 22:21:08 +0000 (22:21 +0000)
committerRoland Häder <roland@mxchange.org>
Fri, 28 Dec 2012 22:21:08 +0000 (22:21 +0000)
- 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
inc/filters.php
inc/language/de.php
inc/libs/html_mail_functions.php
inc/module-functions.php
inc/template-functions.php
inc/wrapper-functions.php
inc/xml-functions.php
templates/de/html/admin/admin_list_refdepths_row.tpl

index 208cd59d8fd0dd80f9aeac0c2032e41a4425d93d..27b58fc3e90956a14fc0068f9c2ac47c0a76af3f 100644 (file)
 ./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
 ./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
 ./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
 ./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
index aeb102d24d49971166299bafed1632ca4863db09..8c2606b05c9094ed384f4da04f1eb4796716b917 100644 (file)
@@ -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
index 88c39bd99a371dbf54433ba598ce023cc14150ce..49166e65692e264dc915beac0d8e56e669643fcc 100644 (file)
@@ -1308,7 +1308,7 @@ addMessages(array(
 
        // Admin points data config - title
        'ADMIN_ADD_POINTS_DATA_TITLE' => "Benutzerdefiniertes Guthabenkonto erstellen",
-       'ADMIN_EDIT_POINTS_DATA_TITLE' => "&Auml;ndern von Guthabenhonten",
+       'ADMIN_EDIT_POINTS_DATA_TITLE' => "&Auml;ndern von Guthabenkonten",
        'ADMIN_LIST_POINTS_ACCOUNTS_TITLE' => "Alle Guthabenkonten auflisten",
 
        // Admin points data config - submit buttons
index be00219d6c76e24ca9e6b56181ce2a215b8416b1..62bc294d941e195bd9e7668648062492b832de36 100644 (file)
@@ -148,7 +148,7 @@ function insertUrlsIntoHtml ($text) {
        } // END - foreach
 
        // Replace new-lines agains <br />-s and finally compile possible own HTML tags out...
-       return preCompileCode(str_replace(PHP_EOL, "<br />" . PHP_EOL, $text));
+       return preCompileCode(str_replace(PHP_EOL, '<br />' . PHP_EOL, $text));
 }
 
 // [EOF]
index fd44d136dcd5b434a32e50cd2850709622ee97b3..3f4bcebfa695ac91e8b6ef94104daec587f20fbd 100644 (file)
@@ -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
index f53fc9115a00cd3c73838c308652d0e632793b28..dc13d3e1b95e30d8ae7aaab5dcd45c0c7e74afd1 100644 (file)
@@ -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('<pre>'.linenumberCode($code).'</pre>');
-               $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=<pre>'.linenumberCode($eval).'</pre>');
                eval($eval);
                //* DEBUG: */ if (!$insertComments) print('NEW=<pre>'.linenumberCode($newContent).'</pre>');
@@ -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 = '<!-- Template ' . $template . ' - Start //-->' . $GLOBALS['template_content']['html'][$template] . '<!-- Template ' . $template . ' - End //-->';
+                               $templateContent = '<!-- Template ' . $template . ' - Start //-->' . $GLOBALS['template_content']['html'][$template] . '<!-- Template ' . $template . ' - End //-->';
                                //* 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 = '<div class="para">
+                       $templateContent = '<div class="para">
        {--TEMPLATE_404--}
 </div>
 <div class="para">
@@ -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=<pre>' . print_r($content, TRUE) . '</pre>';
+       } // 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 = '<div class="para">
+                       $templateContent = '<div class="para">
        {--TEMPLATE_404--}: ' . $template . '
 </div>
 <div class="para">
@@ -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, '<?php ' . $eval . ' ?>', 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
index 60fccd2839885a52905aa0d3061e090bb1ade3ec..36d0bb2fe9f5fc7cf4e56c7fd328b2272c0b1d66 100644 (file)
@@ -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
index d31c992014f3966a9d4ad71afd88503b38a40916..3fc94edf0630eb861796ff4483fbfd128a7ab7ca 100644 (file)
@@ -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
index 8f30e9a517339003c346596627d082c8d5ccba22..1f8a19648b32eff2d52f42c5da74bb2f0255c3b7 100644 (file)
@@ -3,7 +3,7 @@
                <input type="checkbox" class="form_field" title="{--ID_SELECT--} $content[id]" name="id[$content[id]]" value="1" />
        </td>
        <td align="center" class="bottom right {%template,ColorSwitch%}">
-               $content[level]
+               {%pipe,convertNullToZero=$content[level]%}
        </td>
        <td align="center" class="bottom {%template,ColorSwitch%}">
                {%pipe,translateComma=$content[percents]%}&#37;