Bugzilla – Attachment 25664 Details for
Bug 11848
Make Koha::I18N easier to use
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 11848: Move language detection function in C4::Languages
Bug-11848-Move-language-detection-function-in-C4La.patch (text/plain), 9.25 KB, created by
Julian Maurice
on 2014-02-26 15:54:50 UTC
(
hide
)
Description:
Bug 11848: Move language detection function in C4::Languages
Filename:
MIME Type:
Creator:
Julian Maurice
Created:
2014-02-26 15:54:50 UTC
Size:
9.25 KB
patch
obsolete
>From 7c63ee6a5dcee7e2368f7ffa123c1d75d20a10d4 Mon Sep 17 00:00:00 2001 >From: Julian Maurice <julian.maurice@biblibre.com> >Date: Wed, 26 Feb 2014 13:20:37 +0100 >Subject: [PATCH] Bug 11848: Move language detection function in C4::Languages > >and store interface (intranet, opac) in context to not have to pass it >as parameter. >--- > C4/Auth.pm | 7 +++-- > C4/Context.pm | 11 ++++++++ > C4/Languages.pm | 59 ++++++++++++++++++++++++++++++++++++++-- > C4/Templates.pm | 51 ++-------------------------------- > catalogue/search.pl | 4 ++- > opac/opac-search.pl | 4 ++- > t/{Templates.t => Languages.t} | 9 +++--- > 7 files changed, 85 insertions(+), 60 deletions(-) > rename t/{Templates.t => Languages.t} (79%) > >diff --git a/C4/Auth.pm b/C4/Auth.pm >index 44edf67..40071ed 100644 >--- a/C4/Auth.pm >+++ b/C4/Auth.pm >@@ -27,6 +27,7 @@ use CGI::Session; > require Exporter; > use C4::Context; > use C4::Templates; # to get the template >+use C4::Languages; > use C4::Branch; # GetBranches > use C4::VirtualShelves; > use Koha::AuthUtils qw(hash_password); >@@ -139,6 +140,8 @@ sub get_template_and_user { > my $in = shift; > my ( $user, $cookie, $sessionID, $flags ); > >+ C4::Context->interface($in->{type}); >+ > my $template = C4::Templates::gettemplate( > $in->{'template_name'}, > $in->{'type'}, >@@ -470,9 +473,9 @@ sub get_template_and_user { > > # 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; >diff --git a/C4/Context.pm b/C4/Context.pm >index 3914420..8329610 100644 >--- a/C4/Context.pm >+++ b/C4/Context.pm >@@ -1250,6 +1250,17 @@ sub IsSuperLibrarian { > return $userenv->{flags} % 2; > } > >+sub interface { >+ my ($class, $interface) = @_; >+ >+ if (defined $interface) { >+ $interface ||= 'opac'; >+ $context->{interface} = $interface; >+ } >+ >+ return $context->{interface}; >+} >+ > 1; > __END__ > >diff --git a/C4/Languages.pm b/C4/Languages.pm >index 2a74b92..74b8691 100644 >--- a/C4/Languages.pm >+++ b/C4/Languages.pm >@@ -19,9 +19,12 @@ package C4::Languages; > # 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); > >@@ -45,7 +48,7 @@ BEGIN { > &getTranslatedLanguages > &getAllLanguages > ); >- @EXPORT_OK = qw(getFrameworkLanguages getTranslatedLanguages getAllLanguages get_bidi regex_lang_subtags language_get_description accept_language); >+ @EXPORT_OK = qw(getFrameworkLanguages getTranslatedLanguages getAllLanguages get_bidi regex_lang_subtags language_get_description accept_language getlanguage); > $DEBUG = 0; > } > >@@ -530,6 +533,56 @@ sub accept_language { > 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__ >diff --git a/C4/Templates.pm b/C4/Templates.pm >index 2d2304f..976b75b 100644 >--- a/C4/Templates.pm >+++ b/C4/Templates.pm >@@ -282,7 +282,7 @@ sub themelanguage { > ($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'; >@@ -304,6 +304,7 @@ sub themelanguage { > > sub setlanguagecookie { > my ( $query, $language, $uri ) = @_; >+ > my $cookie = $query->cookie( > -name => 'KohaOpacLanguage', > -value => $language, >@@ -336,52 +337,4 @@ sub getlanguagecookie { > 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; >diff --git a/catalogue/search.pl b/catalogue/search.pl >index 892ff15..7c329d7 100755 >--- a/catalogue/search.pl >+++ b/catalogue/search.pl >@@ -160,7 +160,6 @@ use CGI qw('-no_undef_params'); > my $cgi = new CGI; > > my ($template,$borrowernumber,$cookie); >-my $lang = C4::Templates::getlanguage($cgi, 'intranet'); > # decide which template to use > my $template_name; > my $template_type; >@@ -181,6 +180,9 @@ else { > flagsrequired => { catalogue => 1 }, > } > ); >+ >+my $lang = C4::Languages::getlanguage($cgi); >+ > if (C4::Context->preference("marcflavour") eq "UNIMARC" ) { > $template->param('UNIMARC' => 1); > } >diff --git a/opac/opac-search.pl b/opac/opac-search.pl >index 617d67e..6e9fafd 100755 >--- a/opac/opac-search.pl >+++ b/opac/opac-search.pl >@@ -90,7 +90,6 @@ BEGIN { > } > > my ($template,$borrowernumber,$cookie); >-my $lang = C4::Templates::getlanguage($cgi, 'opac'); > # decide which template to use > my $template_name; > my $template_type = 'basic'; >@@ -120,6 +119,9 @@ else { > 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')); > } >diff --git a/t/Templates.t b/t/Languages.t >similarity index 79% >rename from t/Templates.t >rename to t/Languages.t >index 9343b38..9cafbd7 100644 >--- a/t/Templates.t >+++ b/t/Languages.t >@@ -1,6 +1,7 @@ > #!/usr/bin/perl > > # Copyright 2013 Equinox Software, Inc. >+# Copyright 2014 BibLibre > # > # This file is part of Koha. > # >@@ -22,7 +23,7 @@ use Test::MockModule; > use CGI; > > BEGIN { >- use_ok('C4::Templates'); >+ use_ok('C4::Languages'); > } > > my @languages = (); # stores the list of active languages >@@ -41,11 +42,11 @@ $module_context->mock( > }, > ); > >-delete $ENV{TTTP_ACCEPT_LANGUAGE}; >+delete $ENV{HTTP_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)'); >+is(C4::Languages::getlanguage($query), '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)'); >+is(C4::Languages::getlanguage($query), 'en', 'default to English if no language specified in syspref (bug 10560)'); >-- >1.7.10.4
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 11848
:
25664
|
25665
|
26426
|
26494
|
26495
|
26496
|
27747
|
27748
|
27749