refactoring changelanguage, better var names, etc.
[koha.git] / C4 / Output.pm
index d809c3b..2873c64 100644 (file)
@@ -21,7 +21,6 @@ package C4::Output;
 # Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
 # Suite 330, Boston, MA  02111-1307 USA
 
-# $Id$
 
 # NOTE: I'm pretty sure this module is deprecated in favor of
 # templates.
@@ -30,12 +29,13 @@ use strict;
 require Exporter;
 
 use C4::Context;
-use HTML::Template::Pro;
+use C4::Languages qw(getTranslatedLanguages get_bidi regex_lang_subtags language_get_description);
 
+use HTML::Template::Pro;
 use vars qw($VERSION @ISA @EXPORT);
 
 # set the version for version checking
-$VERSION = do { my @v = '$Revision$' =~ /\d+/g; shift(@v) . "." . join( "_", map { sprintf "%03d", $_ } @v ); };
+$VERSION = 3.00;
 
 =head1 NAME
 
@@ -81,8 +81,15 @@ sub gettemplate {
     #    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";
+       unless (-f $filename) {
+               $lang = 'en';
+               $filename = "$htdocs/$theme/$lang/".($interface eq 'intranet'?"modules":"")."/$tmplbase";
+       }
     my $template       = HTML::Template::Pro->new(
-        filename          => "$htdocs/$theme/$lang/".($interface eq 'intranet'?"modules":"")."/$tmplbase",
+               filename          => $filename,
         die_on_bad_params => 1,
         global_vars       => 1,
         case_sensitive    => 1,
@@ -100,6 +107,35 @@ sub gettemplate {
         lang                => $lang
     );
 
+       # Bidirectionality
+       my $language_subtags_hashref = regex_lang_subtags($lang);
+       my $bidi;
+       $bidi = get_bidi($language_subtags_hashref->{script}) if $language_subtags_hashref->{script};
+
+       # Languages
+       my $current_lang = regex_lang_subtags($lang);
+       my @template_languages;
+       my $languages_loop = getTranslatedLanguages($interface,$theme);
+       for my $language_hashref (@$languages_loop) {
+                       $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;
+       }
+       # load the languages ( for switching from one template to another )
+       $template->param(       languages_loop => \@template_languages,
+                                               bidi => $bidi
+       );
+
     return $template;
 }
 
@@ -111,19 +147,26 @@ sub themelanguage {
     #   if (!$query) {
     #     warn "no query";
     #   }
+
+       # set some defaults for language and theme
+       my $lang = $query->cookie('KohaOpacLanguage');
+       $lang = 'en' unless $lang;
+       my $theme = 'prog';
+
     my $dbh = C4::Context->dbh;
     my @languages;
     my @themes;
     if ( $section eq "intranet" ) {
         @languages = split " ", C4::Context->preference("opaclanguages");
         @themes    = split " ", C4::Context->preference("template");
+        pop @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');
+        #my $lang = $query->cookie('KohaOpacLanguage');
         if ($lang) {
 
             push @languages, $lang;
@@ -135,8 +178,6 @@ sub themelanguage {
         }
     }
 
-    my ( $theme, $lang );
-
  # searches through the themes and languages. First template it find it returns.
  # Priority is for getting the theme right.
   THEME:
@@ -144,7 +185,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/".($section eq 'intranet'?"modules":"")."/$tmpl" ) {
+                if ( -e "$htdocs/$th/$la/modules/$tmpl" ) {
                     $theme = $th;
                     $lang  = $la;
                     last THEME;
@@ -153,12 +194,7 @@ sub themelanguage {
             }
         }
     }
-    if ( $theme and $lang ) {
-        return ( $theme, $lang );
-    }
-    else {
-        return ( 'prog', 'en' );
-    }
+    return ( $theme, $lang );
 }
 
 sub setlanguagecookie {
@@ -329,6 +365,8 @@ sub output_html_with_http_headers ($$$) {
         -type    => 'text/html',
         -charset => 'UTF-8',
         -cookie  => $cookie,
+               -Pragma => 'no-cache',
+               -'Cache-Control' => 'no-cache',
     ), $html;
 }