require Exporter;
use C4::Context;
use C4::Templates; # to get the template
+use C4::Languages;
use C4::Branch; # GetBranches
use C4::Search::History;
use C4::VirtualShelves;
my $in = shift;
my ( $user, $cookie, $sessionID, $flags );
+ C4::Context->interface($in->{type});
+
my $template = C4::Templates::gettemplate(
$in->{'template_name'},
$in->{'type'},
# Check if we were asked using parameters to force a specific language
if ( defined $in->{'query'}->param('language') ) {
- # Extract the language, let C4::Templates::getlanguage choose
+ # Extract the language, let C4::Languages::getlanguage choose
# what to do
- my $language = C4::Templates::getlanguage($in->{'query'},$in->{'type'});
+ my $language = C4::Languages::getlanguage($in->{'query'});
my $languagecookie = C4::Templates::getlanguagecookie($in->{'query'},$language);
if ( ref $cookie eq 'ARRAY' ) {
push @{ $cookie }, $languagecookie;
return ($userenv->{flags}//0) % 2;
}
+sub interface {
+ my ($class, $interface) = @_;
+
+ if (defined $interface) {
+ $interface ||= 'opac';
+ $context->{interface} = $interface;
+ }
+
+ return $context->{interface};
+}
+
1;
__END__
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-use strict;
-#use warnings; FIXME - Bug 2505
+use strict;
+use warnings;
+
use Carp;
+use CGI;
+use List::MoreUtils qw( any );
use C4::Context;
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $DEBUG);
&getLanguages
&getAllLanguages
);
- @EXPORT_OK = qw(getFrameworkLanguages getTranslatedLanguages getAllLanguages getLanguages get_bidi regex_lang_subtags language_get_description accept_language);
+ @EXPORT_OK = qw(getFrameworkLanguages getTranslatedLanguages getAllLanguages getLanguages get_bidi regex_lang_subtags language_get_description accept_language getlanguage);
$DEBUG = 0;
}
return $secondaryMatch if $secondaryMatch;
return undef; # else, we got nothing.
}
+
+=head2 getlanguage
+
+ Select a language based on the URL parameter 'language', a cookie,
+ syspref available languages & browser
+
+=cut
+
+sub getlanguage {
+ my ($cgi) = @_;
+
+ $cgi //= new CGI;
+ my $interface = C4::Context->interface;
+ my $language;
+
+ my $preference_to_check =
+ $interface eq 'intranet' ? 'language' : 'opaclanguages';
+ # Get the available/valid languages list
+ my @languages = split /,/, C4::Context->preference($preference_to_check);
+
+ # Chose language from the URL
+ $language = $cgi->param( 'language' );
+ if ( defined $language && any { $_ eq $language } @languages) {
+ return $language;
+ }
+
+ # cookie
+ if ($language = $cgi->cookie('KohaOpacLanguage') ) {
+ $language =~ s/[^a-zA-Z_-]*//; # sanitize cookie
+ }
+
+ # HTTP_ACCEPT_LANGUAGE
+ if ( !$language && $ENV{HTTP_ACCEPT_LANGUAGE} ) {
+ $language = accept_language( $ENV{HTTP_ACCEPT_LANGUAGE},
+ getTranslatedLanguages( $interface, 'prog' ) );
+ }
+
+ # Ignore a lang not selected in sysprefs
+ if ( $language && any { $_ eq $language } @languages ) {
+ return $language;
+ }
+
+ # Pick the first selected syspref language
+ $language = shift @languages;
+ return $language if $language;
+
+ # Fall back to English if necessary
+ return 'en';
+}
+
1;
__END__
($query) or warn "no query in themelanguage";
# Select a language based on cookie, syspref available languages & browser
- my $lang = getlanguage($query, $interface);
+ my $lang = C4::Languages::getlanguage($query);
# Select theme
my $is_intranet = $interface eq 'intranet';
sub setlanguagecookie {
my ( $query, $language, $uri ) = @_;
+
my $cookie = $query->cookie(
-name => 'KohaOpacLanguage',
-value => $language,
return $cookie;
}
-=head2 getlanguage
-
- Select a language based on the URL parameter 'language', a cookie,
- syspref available languages & browser
-
-=cut
-
-sub getlanguage {
- my ($query, $interface) = @_;
-
- my $preference_to_check =
- $interface eq 'intranet' ? 'language' : 'opaclanguages';
- # Get the available/valid languages list
- my @languages = split /,/, C4::Context->preference($preference_to_check);
-
- my $lang;
-
- # Chose language from the URL
- $lang = $query->param( 'language' );
- if ( defined $lang && any { $_ eq $lang } @languages) {
- return $lang;
- }
-
- # cookie
- if ($query and $query->cookie('KohaOpacLanguage') ) {
- $lang = $query->cookie('KohaOpacLanguage');
- $lang =~ s/[^a-zA-Z_-]*//; # sanitize cookie
- }
-
- # HTTP_ACCEPT_LANGUAGE
- if ( !$lang && $ENV{HTTP_ACCEPT_LANGUAGE} ) {
- $lang = accept_language( $ENV{HTTP_ACCEPT_LANGUAGE},
- getTranslatedLanguages( $interface, 'prog' ) );
- }
-
- # Ignore a lang not selected in sysprefs
- if ( $lang && any { $_ eq $lang } @languages ) {
- return $lang;
- }
-
- # Pick the first selected syspref language
- $lang = shift @languages;
- return $lang if $lang;
-
- # Fall back to English if necessary
- return 'en';
-}
-
1;
use CGI qw('-no_undef_params');
my $cgi = new CGI;
-my $lang = C4::Templates::getlanguage($cgi, 'intranet');
+my ($template,$borrowernumber,$cookie);
# decide which template to use
my $template_name;
my $template_type;
flagsrequired => { catalogue => 1 },
}
);
+
+my $lang = C4::Languages::getlanguage($cgi);
+
if (C4::Context->preference("marcflavour") eq "UNIMARC" ) {
$template->param('UNIMARC' => 1);
}
}
my ($template,$borrowernumber,$cookie);
-my $lang = C4::Templates::getlanguage($cgi, 'opac');
# decide which template to use
my $template_name;
my $template_type = 'basic';
authnotrequired => ( C4::Context->preference("OpacPublic") ? 1 : 0 ),
}
);
+
+my $lang = C4::Languages::getlanguage($cgi);
+
if ($template_name eq 'opac-results.tmpl') {
$template->param('COinSinOPACResults' => C4::Context->preference('COinSinOPACResults'));
}
--- /dev/null
+#!/usr/bin/perl
+
+# Copyright 2013 Equinox Software, Inc.
+# Copyright 2014 BibLibre
+#
+# This file is part of Koha.
+#
+# Koha is free software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the Free Software
+# Foundation; either version 3 of the License, or (at your option) any later
+# version.
+#
+# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with Koha; if not, see <http://www.gnu.org/licenses>.
+
+use Modern::Perl;
+use Test::More tests => 3;
+use Test::MockModule;
+use CGI;
+
+BEGIN {
+ use_ok('C4::Languages');
+}
+
+my @languages = (); # stores the list of active languages
+ # for the syspref mock
+
+my $module_context = new Test::MockModule('C4::Context');
+
+$module_context->mock(
+ preference => sub {
+ my ($self, $pref) = @_;
+ if ($pref =~ /language/) {
+ return join ',', @languages;
+ } else {
+ return 'XXX';
+ }
+ },
+);
+
+delete $ENV{HTTP_ACCEPT_LANGUAGE};
+
+my $query = CGI->new();
+@languages = ('de-DE', 'fr-FR');
+is(C4::Languages::getlanguage($query), 'de-DE', 'default to first language specified in syspref (bug 10560)');
+
+@languages = ();
+is(C4::Languages::getlanguage($query), 'en', 'default to English if no language specified in syspref (bug 10560)');
+++ /dev/null
-#!/usr/bin/perl
-
-# Copyright 2013 Equinox Software, Inc.
-#
-# This file is part of Koha.
-#
-# Koha is free software; you can redistribute it and/or modify it under the
-# terms of the GNU General Public License as published by the Free Software
-# Foundation; either version 3 of the License, or (at your option) any later
-# version.
-#
-# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
-# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along
-# with Koha; if not, see <http://www.gnu.org/licenses>.
-
-use Modern::Perl;
-use Test::More tests => 3;
-use Test::MockModule;
-use CGI;
-
-BEGIN {
- use_ok('C4::Templates');
-}
-
-my @languages = (); # stores the list of active languages
- # for the syspref mock
-
-my $module_context = new Test::MockModule('C4::Context');
-
-$module_context->mock(
- preference => sub {
- my ($self, $pref) = @_;
- if ($pref =~ /language/) {
- return join ',', @languages;
- } else {
- return 'XXX';
- }
- },
-);
-
-delete $ENV{TTTP_ACCEPT_LANGUAGE};
-
-my $query = CGI->new();
-@languages = ('de-DE', 'fr-FR');
-is(C4::Templates::getlanguage($query, 'opac'), 'de-DE', 'default to first language specified in syspref (bug 10560)');
-
-@languages = ();
-is(C4::Templates::getlanguage($query, 'opac'), 'en', 'default to English if no language specified in syspref (bug 10560)');