# templates.
use strict;
-require Exporter;
use C4::Context;
-use C4::Languages qw(getTranslatedLanguages get_bidi regex_lang_subtags language_get_description);
+use C4::Languages qw(getTranslatedLanguages get_bidi regex_lang_subtags language_get_description accept_language );
use HTML::Template::Pro;
use vars qw($VERSION @ISA @EXPORT);
-# set the version for version checking
-$VERSION = 3.00;
+BEGIN {
+ # set the version for version checking
+ $VERSION = 3.01;
+ require Exporter;
+ @ISA = qw(Exporter);
+ push @EXPORT, qw(
+ &themelanguage &gettemplate setlanguagecookie pagination_bar
+ );
+ push @EXPORT, qw(
+ &output_html_with_http_headers
+ );
+}
=head1 NAME
=cut
-@ISA = qw(Exporter);
-push @EXPORT, qw(
- &themelanguage &gettemplate setlanguagecookie pagination_bar
-);
-
-#Output
-push @EXPORT, qw(
- &output_html_with_http_headers
-);
-
-
#FIXME: this is a quick fix to stop rc1 installing broken
#Still trying to figure out the correct fix.
my $path = C4::Context->config('intrahtdocs') . "/prog/en/includes/";
# FIXME - POD
sub gettemplate {
my ( $tmplbase, $interface, $query ) = @_;
- if ( !$query ) {
- warn "no query in gettemplate";
- }
+ ($query) or warn "no query in gettemplate";
my $htdocs;
if ( $interface ne "intranet" ) {
$htdocs = C4::Context->config('opachtdocs');
}
my $path = C4::Context->preference('intranet_includes') || 'includes';
- # warn "PATH : $path";
my ( $theme, $lang ) = themelanguage( $htdocs, $tmplbase, $interface, $query );
my $opacstylesheet = C4::Context->preference('opacstylesheet');
# if the template doesn't exist, load the English one as a last resort
- my $filename = "$htdocs/$theme/$lang/".($interface eq 'intranet'?"modules":"")."/$tmplbase";
+ my $filename = "$htdocs/$theme/$lang/modules/$tmplbase";
unless (-f $filename) {
$lang = 'en';
$filename = "$htdocs/$theme/$lang/".($interface eq 'intranet'?"modules":"")."/$tmplbase";
lang => $lang
);
- # Language, Script, and Locale
- my $language_subtags_hashref = regex_lang_subtags($lang);
+ # Bidirectionality
+ my $current_lang = regex_lang_subtags($lang);
my $bidi;
- $bidi = get_bidi($language_subtags_hashref->{script}) if $language_subtags_hashref->{script};
+ $bidi = get_bidi($current_lang->{script}) if $current_lang->{script};
+
+ # Languages
my @template_languages;
my $languages_loop = getTranslatedLanguages($interface,$theme);
+
for my $language_hashref (@$languages_loop) {
- $language_hashref->{'language_script_description'} = language_get_description($language_hashref->{'language_script'},$lang);
- $language_hashref->{'language_region_description'} = language_get_description($language_hashref->{'language_region'},$lang);
- $language_hashref->{'language_variant_description'} = language_get_description($language_hashref->{'language_variant'},$lang);
-
- if ($language_hashref->{'language_code'} eq $lang) {
- warn "LANG: $lang";
- warn "Code:".$language_hashref->{'language_code'};
- #language_hashref->{language_code} eq $language_subtags_hashref->{language}) {
+ $language_hashref->{'current_lang'} = $current_lang->{'language'};
+ $language_hashref->{'native_description'} = language_get_description($language_hashref->{'language_code'},$language_hashref->{'language_code'},'language');
+ #warn "($language_hashref->{'language_code'},$language_hashref->{'current_lang'},$language_hashref->{'script_code'}";
+ $language_hashref->{'locale_description'} = language_get_description($language_hashref->{'language_code'},$language_hashref->{'current_lang'},'language');
+ $language_hashref->{'language_description'} = language_get_description($language_hashref->{'language_code'},$language_hashref->{'current_lang'},'language');
+ $language_hashref->{'script_description'} = language_get_description($language_hashref->{'script_code'},$language_hashref->{'current_lang'},'script');
+ $language_hashref->{'region_description'} = language_get_description($language_hashref->{'region_code'},$language_hashref->{'current_lang'},'region');
+ $language_hashref->{'variant_description'} = language_get_description($language_hashref->{'variant_code'},$language_hashref->{'current_lang'},'variant');
+
+ if ($language_hashref->{'language_lang'} eq $lang) {
$language_hashref->{current}++;
}
push @template_languages, $language_hashref;
#---------------------------------------------------------------------------------------------------------
# FIXME - POD
sub themelanguage {
- my ( $htdocs, $tmpl, $section, $query ) = @_;
-
- # if (!$query) {
- # warn "no query";
- # }
-
- # set some defaults for language and theme
- my $lang = $query->cookie('KohaOpacLanguage');
+ my ( $htdocs, $tmpl, $interface, $query ) = @_;
+ ($query) or warn "no query in themelanguage";
+
+ # Set some defaults for language and theme
+ # First, check the user's preferences
+ my $lang;
+ my $http_accept_language = regex_lang_subtags($ENV{HTTP_ACCEPT_LANGUAGE})->{language};
+ if ($http_accept_language) {
+ $lang = accept_language($http_accept_language,getTranslatedLanguages($interface,'prog'));
+ }
+ # But, if there's a cookie set, obey it
+ $lang = $query->cookie('KohaOpacLanguage') if $query->cookie('KohaOpacLanguage');
+
+ # Fall back to English
$lang = 'en' unless $lang;
my $theme = 'prog';
my $dbh = C4::Context->dbh;
my @languages;
my @themes;
- if ( $section eq "intranet" ) {
+ if ( $interface eq "intranet" ) {
@languages = split " ", C4::Context->preference("opaclanguages");
@themes = split " ", C4::Context->preference("template");
- pop @languages, $lang if $lang;
+ push @languages, $lang if $lang;
}
else {
-
# we are in the opac here, what im trying to do is let the individual user
# set the theme they want to use.
# and perhaps the them as well.
#my $lang = $query->cookie('KohaOpacLanguage');
- if ($lang) {
-
+ if ($lang) { # FIXME: if $lang always TRUE!
push @languages, $lang;
- @themes = split " ", C4::Context->preference("opacthemes");
}
else {
@languages = split " ", C4::Context->preference("opaclanguages");
- @themes = split " ", C4::Context->preference("opacthemes");
}
+ @themes = split " ", C4::Context->preference("opacthemes");
}
# searches through the themes and languages. First template it find it returns.
foreach my $la (@languages) {
for ( my $pass = 1 ; $pass <= 2 ; $pass += 1 ) {
$la =~ s/([-_])/ $1 eq '-'? '_': '-' /eg if $pass == 2;
- if ( -e "$htdocs/$th/$la/modules/$tmpl" ) {
+ if ( -e "$htdocs/$th/$la/".($interface eq 'intranet'?"modules":"")."/$tmpl" ) {
$theme = $th;
$lang = $la;
last THEME;