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

(-)a/C4/Templates.pm (-35 / +35 lines)
Lines 34-40 use Template; Link Here
34
use Template::Constants qw( :debug );
34
use Template::Constants qw( :debug );
35
use C4::Languages qw(getTranslatedLanguages get_bidi regex_lang_subtags language_get_description accept_language );
35
use C4::Languages qw(getTranslatedLanguages get_bidi regex_lang_subtags language_get_description accept_language );
36
36
37
use Encode;
37
use C4::Context;
38
use C4::Context;
39
use Scalar::Util qw( reftype );
38
40
39
__PACKAGE__->mk_accessors(qw( theme activethemes preferredtheme lang filename htdocs interface vars));
41
__PACKAGE__->mk_accessors(qw( theme activethemes preferredtheme lang filename htdocs interface vars));
40
42
Lines 117-131 sub output { Link Here
117
    # and clean any utf8 mess
119
    # and clean any utf8 mess
118
    for my $k ( keys %{ $self->{VARS} } ) {
120
    for my $k ( keys %{ $self->{VARS} } ) {
119
        $vars->{$k} = $self->{VARS}->{$k};
121
        $vars->{$k} = $self->{VARS}->{$k};
120
        if (ref($vars->{$k}) eq 'ARRAY'){
122
        utf8_struct( $vars->{$k} );
121
            utf8_arrayref($vars->{$k});
122
        }
123
        elsif (ref($vars->{$k}) eq 'HASH'){
124
            utf8_hashref($vars->{$k});
125
        }
126
        else {
127
            utf8::encode($vars->{$k}) if utf8::is_utf8($vars->{$k});
128
        }
129
    }
123
    }
130
    my $data;
124
    my $data;
131
#    binmode( STDOUT, ":utf8" );
125
#    binmode( STDOUT, ":utf8" );
Lines 134-170 sub output { Link Here
134
    return $data;
128
    return $data;
135
}
129
}
136
130
137
sub utf8_arrayref {
131
138
    my $arrayref = shift;
132
# FIXME It is not the best to create a whitelist or a blacklist here...
139
    foreach my $element (@$arrayref){
133
#my @backlist = ( qr|^Date|, qr|^Koha::Schema| );
140
        if (ref($element) eq 'ARRAY'){
134
my @whitelist = qw( C4::Category );
141
            utf8_arrayref($element);
135
sub utf8_struct {
142
            next;
136
    my $element = shift;
143
        }
137
    my $ref = ref $element;
144
        if (ref($element) eq 'HASH'){
138
    if ( $ref and $ref eq 'ARRAY' ) {
145
            utf8_hashref($element);
139
        foreach my $elt ( @$element ) {
146
            next;
140
            $elt = utf8_struct( $elt );
147
        }
141
        }
148
        utf8::encode($element) if utf8::is_utf8($element);
142
        return $element;
149
    }        
143
    } elsif ( $ref and $ref eq 'HASH' ) {
150
}         
144
        while ( my ($k, $val) = each %{$element} ) {
151
145
            $element->{$k} = utf8_struct( $val );
152
sub utf8_hashref {
153
    my $hashref = shift;
154
    for my $key (keys %{$hashref}){
155
        if (ref($hashref->{$key}) eq 'ARRAY'){
156
            utf8_arrayref($hashref->{$key});
157
            next;
158
        }
146
        }
159
        if (ref($hashref->{$key}) eq 'HASH'){
147
        return $element;
160
            utf8_hashref($hashref->{$key});
148
    } else {
161
            next;
149
        if ( not $element
150
                or not reftype( $element )
151
                or reftype( $element ) eq 'SCALAR' ) {
152
            return Encode::is_utf8($element)
153
                ? Encode::encode_utf8($element)
154
                : $element;
155
        } else {
156
            my $ref = ref( $element );
157
            if ( grep { $ref } @whitelist ) {
158
                while ( my ( $member, $value ) = each %$element ) {
159
                    $value = utf8_struct( $value );
160
                    $element->{$member} = $value;
161
                }
162
            }
163
            return $element;
162
        }
164
        }
163
        utf8::encode($hashref->{$key}) if utf8::is_utf8($hashref->{$key});
164
    }
165
    }
165
}
166
}
166
        
167
167
        
168
# FIXME - this is a horrible hack to cache
168
# FIXME - this is a horrible hack to cache
169
# the current known-good language, temporarily
169
# the current known-good language, temporarily
170
# put in place to resolve bug 4403.  It is
170
# put in place to resolve bug 4403.  It is
(-)a/koha-tmpl/intranet-tmpl/prog/en/includes/patron-toolbar.inc (-2 / +1 lines)
Lines 4-10 Link Here
4
        <button class="btn btn-small dropdown-toggle" data-toggle="dropdown"><i class="icon-plus"></i> New patron <span class="caret"></span></button>
4
        <button class="btn btn-small dropdown-toggle" data-toggle="dropdown"><i class="icon-plus"></i> New patron <span class="caret"></span></button>
5
            <ul class="dropdown-menu">
5
            <ul class="dropdown-menu">
6
                [% IF ( AddPatronLists_categorycode ) %]
6
                [% IF ( AddPatronLists_categorycode ) %]
7
                    [% FOREACH categorie IN categories %]<li><a href="/cgi-bin/koha/members/memberentry.pl?op=add&amp;categorycode=[% categorie.categorycode %]">[% categorie.description | html_entity %]</a></li>[% END %]
7
                    [% FOREACH categorie IN categories %]<li><a href="/cgi-bin/koha/members/memberentry.pl?op=add&amp;categorycode=[% categorie.categorycode %]">[% categorie.description %]</a></li>[% END %]
8
                [% ELSE %]
8
                [% ELSE %]
9
                    <li><a href="/cgi-bin/koha/members/memberentry.pl?op=add&amp;category_type=A">Adult patron</a></li>
9
                    <li><a href="/cgi-bin/koha/members/memberentry.pl?op=add&amp;category_type=A">Adult patron</a></li>
10
                    <li><a href="/cgi-bin/koha/members/memberentry.pl?op=add&amp;category_type=C">Child patron</a></li>
10
                    <li><a href="/cgi-bin/koha/members/memberentry.pl?op=add&amp;category_type=C">Child patron</a></li>
11
- 

Return to bug 11302