View | Details | Raw Unified | Return to bug 13169
Collapse All | Expand All

(-)a/C4/Templates.pm (-10 / +31 lines)
Lines 4-10 use strict; Link Here
4
use warnings;
4
use warnings;
5
use Carp;
5
use Carp;
6
use CGI;
6
use CGI;
7
use List::MoreUtils qw/any/;
7
use List::MoreUtils qw/any uniq/;
8
8
9
# Copyright 2009 Chris Cormack and The Koha Dev Team
9
# Copyright 2009 Chris Cormack and The Koha Dev Team
10
#
10
#
Lines 250-258 sub gettemplate { Link Here
250
}
250
}
251
251
252
252
253
#---------------------------------------------------------------------------------------------------------
253
=head2 themelanguage
254
# FIXME - POD
254
255
# FIXME - Rewritten to remove hardcoded theme with minimal changes, need to be rethinked
255
    my ($theme,$lang,\@themes) = themelanguage($htdocs,$tmpl,$interface,query);
256
257
This function returns the theme and language to be used for rendering the UI.
258
It also returns the list of themes that should be applied as a fallback. This is
259
used for the theme overlay feature (i.e. if a file doesn't exist on the requested
260
theme, fallback to the configured fallback).
261
262
Important: this function is used on the webinstaller too, so always consider
263
the use case where the DB is not populated already when rewriting/fixing.
264
265
=cut
266
256
sub themelanguage {
267
sub themelanguage {
257
    my ($htdocs, $tmpl, $interface, $query) = @_;
268
    my ($htdocs, $tmpl, $interface, $query) = @_;
258
    ($query) or warn "no query in themelanguage";
269
    ($query) or warn "no query in themelanguage";
Lines 261-280 sub themelanguage { Link Here
261
    my $lang = C4::Languages::getlanguage($query);
272
    my $lang = C4::Languages::getlanguage($query);
262
273
263
    # Get theme
274
    # Get theme
264
    my @themes   = ( C4::Context->preference( ($interface eq 'intranet') ? 'template' : 'opacthemes' ) );
275
    my @themes;
265
    my $fallback =   C4::Context->preference( ($interface eq 'intranet') ? 'template' : 'OPACFallback' );
276
    my $theme_syspref    = ($interface eq 'intranet') ? 'template' : 'opacthemes';
266
    push @themes, $fallback;
277
    my $fallback_syspref = ($interface eq 'intranet') ? 'template' : 'OPACFallback';
278
    # Yeah, hardcoded, last resort if the DB is not populated
279
    my $hardcoded_theme = ($interface eq 'intranet') ? 'prog' : 'bootstrap';
280
281
    # Configured theme is the first one
282
    push @themes, C4::Context->preference( $theme_syspref )
283
        if C4::Context->preference( $theme_syspref );
284
    # Configured fallback next
285
    push @themes, C4::Context->preference( $fallback_syspref )
286
        if C4::Context->preference( $fallback_syspref );
287
    # The hardcoded fallback theme is the last one
288
    push @themes, $hardcoded_theme;
267
289
268
    # Try to find first theme for the selected theme/lang, then for fallback/lang
290
    # Try to find first theme for the selected theme/lang, then for fallback/lang
269
    for my $theme (@themes) {
291
    for my $theme (@themes) {
270
        if ( -e "$htdocs/$theme/$lang/modules/$tmpl" ) {
292
        if ( -e "$htdocs/$theme/$lang/modules/$tmpl" ) {
271
            return ($theme, $lang, \@themes);
293
            return ( $theme, $lang, uniq( \@themes ) );
272
        }
294
        }
273
    }
295
    }
274
    # Otherwise return theme/'en', last resort fallback/'en'
296
    # Otherwise return theme/'en', last resort fallback/'en'
275
    for my $theme (@themes) {
297
    for my $theme (@themes) {
276
        if ( -e "$htdocs/$theme/en/modules/$tmpl" ) {
298
        if ( -e "$htdocs/$theme/en/modules/$tmpl" ) {
277
            return ($theme, 'en', \@themes);
299
            return ( $theme, 'en', uniq( \@themes ) );
278
        }
300
        }
279
    }
301
    }
280
}
302
}
281
- 

Return to bug 13169