From 60d48f200225d995a844418bbea0f1a088d14481 Mon Sep 17 00:00:00 2001 From: "Michael Kaufmann (d00p)" Date: Sat, 29 Nov 2014 07:43:33 +0100 Subject: [PATCH] make template-fallback work for overwriting themes partially Signed-off-by: Michael Kaufmann (d00p) --- lib/functions/output/function.getTemplate.php | 84 +++++++++++-------- 1 file changed, 51 insertions(+), 33 deletions(-) diff --git a/lib/functions/output/function.getTemplate.php b/lib/functions/output/function.getTemplate.php index ae36c28c..cea1eb37 100644 --- a/lib/functions/output/function.getTemplate.php +++ b/lib/functions/output/function.getTemplate.php @@ -26,52 +26,43 @@ * @author Florian Lippert */ -function getTemplate($template, $noarea = 0) -{ +function getTemplate($template, $noarea = 0) { + global $templatecache, $theme; - if(!isset($theme) || $theme == '') - { - $theme = 'Froxlor'; + $fallback_theme = 'Sparkle'; + + if (!isset($theme) || $theme == '') { + $theme = $fallback_theme; } - if($noarea != 1) - { + if ($noarea != 1) { $template = AREA . '/' . $template; } - if(!isset($templatecache[$theme][$template])) - { + if (!isset($templatecache[$theme][$template])) { + $filename = './templates/' . $theme . '/' . $template . '.tpl'; - if(file_exists($filename) - && is_readable($filename)) - { - $templatefile = addcslashes(file_get_contents($filename), '"\\'); + // check the current selected theme for the template + $templatefile = _checkAndParseTpl($filename); - // loop through template more than once in case we have an "if"-statement in another one + if ($templatefile == false && $theme != $fallback_theme) { + // check fallback + $filename = './templates/' . $fallback_theme . '/' . $template . '.tpl'; + $templatefile = _checkAndParseTpl($filename); - while(preg_match('/(.*)(<\/if>|(.*)<\/if>)/Uis', $templatefile)) - { - $templatefile = preg_replace('/(.*)(<\/if>|(.*)<\/if>)/Uis', '".( ($1) ? ("$2") : ("$4") )."', $templatefile); + if ($templatefile == false) { + // check for old layout + $filename = './templates/' . $template . '.tpl'; + $templatefile = _checkAndParseTpl($filename); + + if ($templatefile == false) { + // not found + $templatefile = 'TEMPLATE NOT FOUND: ' . $filename; + } } } - elseif(file_exists('./templates/' . $template . '.tpl') && is_readable('./templates/' . $template . '.tpl')) - { - $filename = './templates/' . $template . '.tpl'; - $templatefile = addcslashes(file_get_contents($filename), '"\\'); - - // loop through template more than once in case we have an "if"-statement in another one - - while(preg_match('/(.*)(<\/if>|(.*)<\/if>)/Uis', $templatefile)) - { - $templatefile = preg_replace('/(.*)(<\/if>|(.*)<\/if>)/Uis', '".( ($1) ? ("$2") : ("$4") )."', $templatefile); - } - } - else - { - $templatefile = 'TEMPLATE NOT FOUND: ' . $filename; - } $output = $templatefile; // Minify_HTML::minify($templatefile, array('cssMinifier', 'jsMinifier')); $templatecache[$theme][$template] = $output; @@ -79,3 +70,30 @@ function getTemplate($template, $noarea = 0) return $templatecache[$theme][$template]; } + +/** + * check whether a tpl file exists and if so, return it's content or else return false + * + * @param string $filename + * + * @return string|bool content on success, else false + */ +function _checkAndParseTpl($filename) { + + $templatefile = ""; + + if (file_exists($filename) + && is_readable($filename) + ) { + + $templatefile = addcslashes(file_get_contents($filename), '"\\'); + + // loop through template more than once in case we have an "if"-statement in another one + while (preg_match('/(.*)(<\/if>|(.*)<\/if>)/Uis', $templatefile)) { + $templatefile = preg_replace('/(.*)(<\/if>|(.*)<\/if>)/Uis', '".( ($1) ? ("$2") : ("$4") )."', $templatefile); + } + + return $templatefile; + } + return false; +}