test suite cleanup
[srvgit] / C4 / Output.pm
index e786323..1c12a73 100644 (file)
@@ -26,16 +26,25 @@ package C4::Output;
 # 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
 
@@ -47,17 +56,6 @@ C4::Output - Functions for managing templates
 
 =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/";
@@ -66,9 +64,7 @@ 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');
@@ -78,12 +74,11 @@ sub gettemplate {
     }
     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";
@@ -107,21 +102,26 @@ sub gettemplate {
         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;
@@ -137,40 +137,43 @@ sub gettemplate {
 #---------------------------------------------------------------------------------------------------------
 # 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.
@@ -180,7 +183,7 @@ sub themelanguage {
         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;