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

(-)a/C4/Languages.pm (-10 / +19 lines)
Lines 569-574 sub accept_language { Link Here
569
sub getlanguage {
569
sub getlanguage {
570
    my ($cgi) = @_;
570
    my ($cgi) = @_;
571
571
572
    my $cache = Koha::Cache->get_instance();
573
    my $cache_key = "getlanguage";
574
    if ( not $cgi or not $cgi->param('language') ) {
575
        my $cached = $cache->get_from_cache($cache_key);
576
        return $cached if $cached;
577
    }
578
572
    $cgi //= new CGI;
579
    $cgi //= new CGI;
573
    my $interface = C4::Context->interface;
580
    my $interface = C4::Context->interface;
574
    my $theme = C4::Context->preference( ( $interface eq 'opac' ) ? 'opacthemes' : 'template' );
581
    my $theme = C4::Context->preference( ( $interface eq 'opac' ) ? 'opacthemes' : 'template' );
Lines 584-597 sub getlanguage { Link Here
584
    }
591
    }
585
592
586
    # Chose language from the URL
593
    # Chose language from the URL
587
    $language = $cgi->param( 'language' );
594
    my $cgi_param_language = $cgi->param( 'language' );
588
    if ( defined $language && any { $_ eq $language } @languages) {
595
    if ( defined $cgi_param_language && any { $_ eq $cgi_param_language } @languages) {
589
        return $language;
596
        $language = $cgi_param_language;
590
    }
597
    }
591
598
592
    # cookie
599
    # cookie
593
    if ($language = $cgi->cookie('KohaOpacLanguage') ) {
600
    if (not $language and my $cgi_cookie_language = $cgi->cookie('KohaOpacLanguage') ) {
594
        $language =~ s/[^a-zA-Z_-]*//; # sanitize cookie
601
        ( $language = $cgi_cookie_language ) =~ s/[^a-zA-Z_-]*//; # sanitize cookie
595
    }
602
    }
596
603
597
    # HTTP_ACCEPT_LANGUAGE
604
    # HTTP_ACCEPT_LANGUAGE
Lines 601-616 sub getlanguage { Link Here
601
    }
608
    }
602
609
603
    # Ignore a lang not selected in sysprefs
610
    # Ignore a lang not selected in sysprefs
604
    if ( $language && any { $_ eq $language } @languages ) {
611
    if ( $language && not any { $_ eq $language } @languages ) {
605
        return $language;
612
        $language = undef;
606
    }
613
    }
607
614
608
    # Pick the first selected syspref language
615
    # Pick the first selected syspref language
609
    $language = shift @languages;
616
    $language = shift @languages unless $language;
610
    return $language if $language;
611
617
612
    # Fall back to English if necessary
618
    # Fall back to English if necessary
613
    return 'en';
619
    $language ||= 'en';
620
621
    $cache->set_in_cache( $cache_key, $language );
622
    return $language;
614
}
623
}
615
624
616
1;
625
1;
(-)a/C4/Templates.pm (-6 / +5 lines)
Lines 273-284 sub themelanguage { Link Here
273
sub setlanguagecookie {
273
sub setlanguagecookie {
274
    my ( $query, $language, $uri ) = @_;
274
    my ( $query, $language, $uri ) = @_;
275
275
276
    my $cookie = $query->cookie(
276
    my $cookie = getlanguagecookie( $query, $language );
277
        -name    => 'KohaOpacLanguage',
277
278
        -value   => $language,
278
    # We do not want to set getlanguage in cache, some additional checks are
279
        -HttpOnly => 1,
279
    # done in C4::Languages::getlanguage
280
        -expires => '+3y'
280
    Koha::Cache->get_instance()->clear_from_cache( 'getlanguage' );
281
    );
282
    print $query->redirect(
281
    print $query->redirect(
283
        -uri    => $uri,
282
        -uri    => $uri,
284
        -cookie => $cookie
283
        -cookie => $cookie
(-)a/Koha/Cache.pm (-1 / +5 lines)
Lines 287-292 sub set_in_cache { Link Here
287
    }
287
    }
288
}
288
}
289
289
290
sub set_in_L1_cache_only {
291
    my ( $self, $key, $value ) = @_;
292
    $L1_cache{ $key } = $value;
293
}
294
290
=head2 get_from_cache
295
=head2 get_from_cache
291
296
292
    my $value = $cache->get_from_cache($key, [ $options ]);
297
    my $value = $cache->get_from_cache($key, [ $options ]);
293
- 

Return to bug 16088