@@ -, +, @@ --- C4/Templates.pm | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) --- a/C4/Templates.pm +++ a/C4/Templates.pm @@ -117,10 +117,11 @@ sub output { # and clean any utf8 mess for my $k ( keys %{ $self->{VARS} } ) { $vars->{$k} = $self->{VARS}->{$k}; - if (ref($vars->{$k}) eq 'ARRAY'){ + my $rt = ref($vars->{$k}); + if ($rt eq 'ARRAY') { utf8_arrayref($vars->{$k}); } - elsif (ref($vars->{$k}) eq 'HASH'){ + elsif ($rt eq 'HASH' || _utf8_is_whitelisted_object($rt)) { utf8_hashref($vars->{$k}); } else { @@ -137,11 +138,12 @@ sub output { sub utf8_arrayref { my $arrayref = shift; foreach my $element (@$arrayref){ - if (ref($element) eq 'ARRAY'){ + my $rt = ref($element); + if ($rt eq 'ARRAY'){ utf8_arrayref($element); next; } - if (ref($element) eq 'HASH'){ + if ($rt eq 'HASH' || _utf8_is_whitelisted_object($rt)) { utf8_hashref($element); next; } @@ -152,19 +154,27 @@ sub utf8_arrayref { sub utf8_hashref { my $hashref = shift; for my $key (keys %{$hashref}){ - if (ref($hashref->{$key}) eq 'ARRAY'){ + my $rt = ref($hashref->{$key}); + if ($rt eq 'ARRAY'){ utf8_arrayref($hashref->{$key}); next; } - if (ref($hashref->{$key}) eq 'HASH'){ + if ($rt eq 'HASH' || _utf8_is_whitelisted_object($rt)) { utf8_hashref($hashref->{$key}); next; } utf8::encode($hashref->{$key}) if utf8::is_utf8($hashref->{$key}); } } - - + +sub _utf8_is_whitelisted_object { + my $rt = shift; + $rt eq '' && return(0); + my @whitelist = qw( Koha::AdditionalField ); + map { $_ eq $rt && return(1); } @whitelist; + 0; +} + # FIXME - this is a horrible hack to cache # the current known-good language, temporarily # put in place to resolve bug 4403. It is --