1
0

Fix fallback chain

Engine: default in info.txt will now lead to the template to use template/default as fallback before the default-template (2k11 currently). An approach to fix #130

Also, template_engine is not automatically set to default, as this was implicitly always the case
This commit is contained in:
onli
2014-04-27 20:23:56 +02:00
parent 4efba7e295
commit 99c1f4c87c
3 changed files with 26 additions and 31 deletions

View File

@ -71,7 +71,12 @@ if ($serendipity['GET']['adminAction'] == 'install' ) {
serendipity_plugin_api::hook_event('backend_templates_install', $serendipity['GET']['theme'], $themeInfo); serendipity_plugin_api::hook_event('backend_templates_install', $serendipity['GET']['theme'], $themeInfo);
serendipity_set_config_var('template', htmlspecialchars($serendipity['GET']['theme'])); serendipity_set_config_var('template', htmlspecialchars($serendipity['GET']['theme']));
serendipity_set_config_var('template_engine', isset($themeInfo['engine']) ? $themeInfo['engine'] : 'default');
// template_engine was set by default to default, which screws up the fallback chain (to the default-template first)
serendipity_set_config_var('template_engine', null);
if ($themeInfo['engine']) {
serendipity_set_config_var('template_engine', $themeInfo['engine']);
}
serendipity_set_config_var('last_template_change', time()); serendipity_set_config_var('last_template_change', time());
$data["adminAction"] = "install"; $data["adminAction"] = "install";

View File

@ -88,7 +88,6 @@ function serendipity_remove_config_var($name, $authorid = 0) {
* @param string The name of the configuration value * @param string The name of the configuration value
* @param string The value of the configuration item * @param string The value of the configuration item
* @param int The ID of the owner of the config value (0: global) * @param int The ID of the owner of the config value (0: global)
* @return null
*/ */
function serendipity_set_config_var($name, $val, $authorid = 0) { function serendipity_set_config_var($name, $val, $authorid = 0) {
global $serendipity; global $serendipity;
@ -263,11 +262,11 @@ function serendipity_getTemplateFile($file, $key = 'serendipityHTTPPath') {
$directories = array(); $directories = array();
$directories[] = isset($serendipity['template']) ? $serendipity['template'] . '/' : ''; $directories[] = isset($serendipity['template']) ? $serendipity['template'] . '/' : '';
if (isset($serendipity['template_engine']) && (stristr($file, 'admin/') === false || $serendipity['template_engine'] != 'default')) { if (isset($serendipity['template_engine'])) {
$p = explode(',', $serendipity['template_engine']); $p = explode(',', $serendipity['template_engine']);
foreach($p AS $te) { foreach($p AS $te) {
$directories[] = trim($te) . '/'; $directories[] = trim($te) . '/';
} }
} }
$directories[] = $serendipity['defaultTemplate'] .'/'; $directories[] = $serendipity['defaultTemplate'] .'/';

View File

@ -117,33 +117,24 @@ class Serendipity_Smarty extends Smarty
Set all directory setters Set all directory setters
Smarty will always use the first template found in order of the given array. Move the least significant directory to the end. Smarty will always use the first template found in order of the given array. Move the least significant directory to the end.
*/ */
// initiate templateDir setter
$this->setTemplateDir(array(S9Y_TEMPLATE_USERDEFAULT));
// set addTemplate array with the blogs used template anyway $template_engine = serendipity_get_config_var('template_engine');
$serendipity['addTemplateDir'] = array($serendipity['serendipityPath'] . $serendipity['templatePath'] . $serendipity['defaultTemplate']); $template_dirs = array();
/* if ($template_engine) {
Note: Ian $template_dirs[] = $serendipity['serendipityPath'] . $serendipity['templatePath'] . $template_engine;
BEWARE: Bulletproof and default template do not have any engine settings, so the next will be empty. This is why adding defaultTemplate was necessary. }
*/ $template_dirs[] = $serendipity['serendipityPath'] . $serendipity['templatePath'] . $serendipity['defaultTemplate'];
// merge engine only templates to addTemplate array
$p = explode(',', $serendipity['template_engine']);
foreach($p AS $te) {
$serendipity['addTemplateDir'][] = $serendipity['serendipityPath'] . $serendipity['templatePath'] . $te;
}
// add secure dir to template path, in case engine did have entries // add secure dir to template path, in case engine did have entries
$serendipity['addTemplateDir'][] = S9Y_TEMPLATE_SECUREDIR; if (S9Y_TEMPLATE_SECUREDIR != $serendipity['serendipityPath'] . $serendipity['templatePath']) {
// disable plugin dir as added template dir is not adviced, if set security is enabled (backend & frontend need access to fetch plugin templates) $template_dirs[] = S9Y_TEMPLATE_SECUREDIR;
$serendipity['addTemplateDir'][] = $serendipity['serendipityPath'] . 'plugins'; }
// add default template to addTemplate array, if not already set in engine
$serendipity['addTemplateDir'][] = S9Y_TEMPLATE_FALLBACK;
// expand smarty objects (add)TemplateDir setter with $serendipity['addTemplateDir'] as is // disable plugin dir as added template dir is not adviced, if set security is enabled (backend & frontend need access to fetch plugin templates)
$this->addTemplateDir($serendipity['addTemplateDir']); $template_dirs[] = $serendipity['serendipityPath'] . 'plugins';
// add default template to addTemplate array, if not already set in engine
// setTemplateDir again to unified getTemplateDir() to avoid doubles for (engine, default and main templates) $template_dirs[] = S9Y_TEMPLATE_FALLBACK;
$this->setTemplateDir(array_values(array_unique($this->getTemplateDir()))); // reset keys to be unique
$this->setTemplateDir($template_dirs);
$this->setCompileDir($serendipity['serendipityPath'] . PATH_SMARTY_COMPILE); $this->setCompileDir($serendipity['serendipityPath'] . PATH_SMARTY_COMPILE);