Bug 6863: Shelf Browser images not showing up
[koha.git] / C4 / Templates.pm
index e81f0dd..4368492 100644 (file)
@@ -90,26 +90,68 @@ sub output {
     $vars->{themelang} .= '/' . $self->theme . '/' . $self->lang;
     $vars->{yuipath} =
       ( C4::Context->preference("yuipath") eq "local"
-        ? $self->{themelang} . "/lib/yui"
+        ? $vars->{themelang} . "/lib/yui"
         : C4::Context->preference("yuipath") );
     $vars->{interface} =
-      ( $vars->{interface} ne 'intranet' ? '/opac-tmpl' : '/intranet-tmpl' );
+      ( $self->{interface} ne 'intranet' ? '/opac-tmpl' : '/intranet-tmpl' );
     $vars->{theme} = $self->theme;
     $vars->{opaccolorstylesheet} =
       C4::Context->preference('opaccolorstylesheet');
     $vars->{opacsmallimage} = C4::Context->preference('opacsmallimage');
     $vars->{opacstylesheet} = C4::Context->preference('opacstylesheet');
 
-    #add variables set via param to $vars for processing
+    # add variables set via param to $vars for processing
+    # and clean any utf8 mess
     for my $k ( keys %{ $self->{VARS} } ) {
         $vars->{$k} = $self->{VARS}->{$k};
+        if (ref($vars->{$k}) eq 'ARRAY'){
+            utf8_arrayref($vars->{$k});
+        }
+        elsif (ref($vars->{$k}) eq 'HASH'){
+            utf8_hashref($vars->{$k});
+        }
+        else {
+            utf8::encode($vars->{$k}) if utf8::is_utf8($vars->{$k});
+        }
     }
     my $data;
+#    binmode( STDOUT, ":utf8" );
     $template->process( $self->filename, $vars, \$data )
       || die "Template process failed: ", $template->error();
     return $data;
 }
 
+sub utf8_arrayref {
+    my $arrayref = shift;
+    foreach my $element (@$arrayref){
+        if (ref($element) eq 'ARRAY'){
+            utf8_arrayref($element);
+            next;
+        }
+        if (ref($element) eq 'HASH'){
+            utf8_hashref($element);
+            next;
+        }
+        utf8::encode($element) if utf8::is_utf8($element);
+    }        
+}         
+
+sub utf8_hashref {
+    my $hashref = shift;
+    for my $key (keys %{$hashref}){
+        if (ref($hashref->{$key}) eq 'ARRAY'){
+            utf8_arrayref($hashref->{$key});
+            next;
+        }
+        if (ref($hashref->{$key}) eq 'HASH'){
+            utf8_hashref($hashref->{$key});
+            next;
+        }
+        utf8::encode($hashref->{$key}) if utf8::is_utf8($hashref->{$key});
+    }
+}
+        
+        
 # FIXME - this is a horrible hack to cache
 # the current known-good language, temporarily
 # put in place to resolve bug 4403.  It is
@@ -146,10 +188,9 @@ sub themelanguage {
         @languages = ( $lang, @languages );
     }
     else {
-        $lang = $languages[0];
+        $lang = $languages[0] || 'en';
     }
     my $theme = 'prog'; # in the event of theme failure default to 'prog' -fbcit
-    my $dbh = C4::Context->dbh;
     my @themes;
     if ( $interface eq "intranet" ) {
         @themes = split " ", C4::Context->preference("template");
@@ -181,7 +222,6 @@ sub param {
     while (@_) {
         my $key = shift;
         my $val = shift;
-        utf8::encode($val) if utf8::is_utf8($val);
         if    ( ref($val) eq 'ARRAY' && !scalar @$val ) { $val = undef; }
         elsif ( ref($val) eq 'HASH'  && !scalar %$val ) { $val = undef; }
         $self->{VARS}->{$key} = $val;