summaryrefslogtreecommitdiff
authorTomas Cohen Arazi <tomascohen@gmail.com>2014-10-31 14:00:22 (GMT)
committer Tomas Cohen Arazi <tomascohen@gmail.com>2014-11-01 12:11:07 (GMT)
commita4a2159aad6d7276fc7efb9abb24830f7f473102 (patch) (side-by-side diff)
tree99b2a0e6a7b22c661c5ebcfb5d99acd30e6c53af
parentd4a7fa85807301ceb5268817d035235bdcf313a3 (diff)
Bug 13169: C4::Templates::themelanguage fails if the DB is not populated
With the aim to remove hardcoded themes the C4::Templates::themelanguage got dependent on the DB being populated. This patch reintroduced the hardcoded defaults as a last resort. To test: - Do a fresh install, clean your browser's cache, empty DB - Open the staff interface => FAIL: A "Software error" screen shows "Template process failed: file error..." - Apply the patch - Reload => SUCCESS: The webinstaller prompts for login correctly. - Sign off :-D Regards Signed-off-by: Nick Clemens <nick@quecheelibrary.org> Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de> Signed-off-by: Tomas Cohen Arazi <tomascohen@gmail.com>
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--C4/Templates.pm40
1 files changed, 31 insertions, 9 deletions
diff --git a/C4/Templates.pm b/C4/Templates.pm
index 7d09a58..3a3a65c 100644
--- a/C4/Templates.pm
+++ b/C4/Templates.pm
@@ -6,3 +6,3 @@ use Carp;
use CGI;
-use List::MoreUtils qw/any/;
+use List::MoreUtils qw/any uniq/;
@@ -252,5 +252,16 @@ sub gettemplate {
-#---------------------------------------------------------------------------------------------------------
-# FIXME - POD
-# FIXME - Rewritten to remove hardcoded theme with minimal changes, need to be rethinked
+=head2 themelanguage
+
+ my ($theme,$lang,\@themes) = themelanguage($htdocs,$tmpl,$interface,query);
+
+This function returns the theme and language to be used for rendering the UI.
+It also returns the list of themes that should be applied as a fallback. This is
+used for the theme overlay feature (i.e. if a file doesn't exist on the requested
+theme, fallback to the configured fallback).
+
+Important: this function is used on the webinstaller too, so always consider
+the use case where the DB is not populated already when rewriting/fixing.
+
+=cut
+
sub themelanguage {
@@ -263,5 +274,16 @@ sub themelanguage {
# Get theme
- my @themes = ( C4::Context->preference( ($interface eq 'intranet') ? 'template' : 'opacthemes' ) );
- my $fallback = C4::Context->preference( ($interface eq 'intranet') ? 'template' : 'OPACFallback' );
- push @themes, $fallback;
+ my @themes;
+ my $theme_syspref = ($interface eq 'intranet') ? 'template' : 'opacthemes';
+ my $fallback_syspref = ($interface eq 'intranet') ? 'template' : 'OPACFallback';
+ # Yeah, hardcoded, last resort if the DB is not populated
+ my $hardcoded_theme = ($interface eq 'intranet') ? 'prog' : 'bootstrap';
+
+ # Configured theme is the first one
+ push @themes, C4::Context->preference( $theme_syspref )
+ if C4::Context->preference( $theme_syspref );
+ # Configured fallback next
+ push @themes, C4::Context->preference( $fallback_syspref )
+ if C4::Context->preference( $fallback_syspref );
+ # The hardcoded fallback theme is the last one
+ push @themes, $hardcoded_theme;
@@ -270,3 +292,3 @@ sub themelanguage {
if ( -e "$htdocs/$theme/$lang/modules/$tmpl" ) {
- return ($theme, $lang, \@themes);
+ return ( $theme, $lang, uniq( \@themes ) );
}
@@ -276,3 +298,3 @@ sub themelanguage {
if ( -e "$htdocs/$theme/en/modules/$tmpl" ) {
- return ($theme, 'en', \@themes);
+ return ( $theme, 'en', uniq( \@themes ) );
}