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

(-)a/C4/Context.pm (-5 / +15 lines)
Lines 92-101 BEGIN { Link Here
92
		  });
92
		  });
93
        # Verify memcached available (set a variable and test the output)
93
        # Verify memcached available (set a variable and test the output)
94
	$ismemcached = $memcached->set('ismemcached','1');
94
	$ismemcached = $memcached->set('ismemcached','1');
95
        if ($ismemcached) {
96
          require Memoize::Memcached;
97
          import Memoize::Memcached qw(memoize_memcached);
98
99
          memoize_memcached('preference',
100
                            memcached => $memcached,
101
                            expire_time => 600000); #cache for 10 minutes
102
        }
95
    }
103
    }
96
104
97
	$VERSION = '3.00.00.036';
105
	$VERSION = '3.00.00.036';
98
}
106
};
107
99
108
100
use DBI;
109
use DBI;
101
use ZOOM;
110
use ZOOM;
Lines 104-109 use C4::Boolean; Link Here
104
use C4::Debug;
113
use C4::Debug;
105
use POSIX ();
114
use POSIX ();
106
115
116
107
=head1 NAME
117
=head1 NAME
108
118
109
C4::Context - Maintain and manipulate the context of a Koha script
119
C4::Context - Maintain and manipulate the context of a Koha script
Lines 533-544 sub preference { Link Here
533
543
534
    # Look up systempreferences.variable==$var
544
    # Look up systempreferences.variable==$var
535
    my $sql = <<'END_SQL';
545
    my $sql = <<'END_SQL';
536
        SELECT    value
546
        SELECT    variable, value
537
        FROM    systempreferences
547
        FROM    systempreferences
538
        WHERE    variable=?
539
        LIMIT    1
540
END_SQL
548
END_SQL
541
    $sysprefs{$var} = $dbh->selectrow_array( $sql, {}, $var );
549
    my $sysprefs_arrayref;
550
    $sysprefs_arrayref = $dbh->selectcol_arrayref( $sql, { Columns=>[1,2] });
551
    %sysprefs= @$sysprefs_arrayref;
542
    return $sysprefs{$var};
552
    return $sysprefs{$var};
543
}
553
}
544
554
(-)a/C4/Languages.pm (-63 / +34 lines)
Lines 23-28 use strict; Link Here
23
#use warnings; FIXME - Bug 2505
23
#use warnings; FIXME - Bug 2505
24
use Carp;
24
use Carp;
25
use C4::Context;
25
use C4::Context;
26
use List::MoreUtils qw/any uniq/;
26
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $DEBUG);
27
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $DEBUG);
27
28
28
eval {
29
eval {
Lines 33-38 eval { Link Here
33
        memoize_memcached('getTranslatedLanguages', memcached => C4::Context->memcached, expire_time => 600); #cache for 10 minutes
34
        memoize_memcached('getTranslatedLanguages', memcached => C4::Context->memcached, expire_time => 600); #cache for 10 minutes
34
        memoize_memcached('getFrameworkLanguages' , memcached => C4::Context->memcached, expire_time => 600);
35
        memoize_memcached('getFrameworkLanguages' , memcached => C4::Context->memcached, expire_time => 600);
35
        memoize_memcached('getAllLanguages',        memcached => C4::Context->memcached, expire_time => 600);
36
        memoize_memcached('getAllLanguages',        memcached => C4::Context->memcached, expire_time => 600);
37
        memoize_memcached('language_get_description',        memcached => C4::Context->memcached, expire_time => 600000);
36
    }
38
    }
37
};
39
};
38
40
Lines 79-86 Returns a reference to an array of hashes: Link Here
79
sub getFrameworkLanguages {
81
sub getFrameworkLanguages {
80
    # get a hash with all language codes, names, and locale names
82
    # get a hash with all language codes, names, and locale names
81
    my $all_languages = getAllLanguages();
83
    my $all_languages = getAllLanguages();
82
    my @languages;
84
        
83
    
84
    # find the available directory names
85
    # find the available directory names
85
    my $dir=C4::Context->config('intranetdir')."/installer/data/";
86
    my $dir=C4::Context->config('intranetdir')."/installer/data/";
86
    opendir (MYDIR,$dir);
87
    opendir (MYDIR,$dir);
Lines 88-104 sub getFrameworkLanguages { Link Here
88
    closedir MYDIR;
89
    closedir MYDIR;
89
90
90
    # pull out all data for the dir names that exist
91
    # pull out all data for the dir names that exist
91
    for my $dirname (@listdir) {
92
    my @languages=grep {
92
        for my $language_set (@$all_languages) {
93
                    my $language=$_; 
93
94
                    any {$language->{languagecode} eq $_
94
            if ($dirname eq $language_set->{language_code}) {
95
                        } @listdir
95
                push @languages, {
96
                  } @$all_languages;
96
                    'language_code'=>$dirname, 
97
                    'language_description'=>$language_set->{language_description}, 
98
                    'native_descrition'=>$language_set->{language_native_description} }
99
            }
100
        }
101
    }
102
    return \@languages;
97
    return \@languages;
103
}
98
}
104
99
Lines 119-167 Returns a reference to an array of hashes: Link Here
119
sub getTranslatedLanguages {
114
sub getTranslatedLanguages {
120
    my ($interface, $theme, $current_language, $which) = @_;
115
    my ($interface, $theme, $current_language, $which) = @_;
121
    my $htdocs;
116
    my $htdocs;
122
    my $all_languages = getAllLanguages();
123
    my @languages;
117
    my @languages;
124
    my @enabled_languages;
118
    my @enabled_languages;
125
 
119
 
126
    if ($interface && $interface eq 'opac' ) {
120
    my ($preference,$config);
127
        @enabled_languages = split ",", C4::Context->preference('opaclanguages');
121
    if ($interface && $interface eq 'intranet' ) {
128
        $htdocs = C4::Context->config('opachtdocs');
122
        $preference="language";
129
        if ( $theme and -d "$htdocs/$theme" ) {
123
        $config='intrahtdocs';
130
            (@languages) = _get_language_dirs($htdocs,$theme);
131
        }
132
        else {
133
            for my $theme ( _get_themes('opac') ) {
134
                push @languages, _get_language_dirs($htdocs,$theme);
135
            }
136
        }
137
    }
124
    }
138
    elsif ($interface && $interface eq 'intranet' ) {
125
    else {
139
        @enabled_languages = split ",", C4::Context->preference('language');
126
        $preference="opaclanguages";
140
        $htdocs = C4::Context->config('intrahtdocs');
127
        $config='opachtdocs';
141
        if ( $theme and -d "$htdocs/$theme" ) {
128
        $interface ||='opac';
142
            @languages = _get_language_dirs($htdocs,$theme);
129
143
        }
130
    }
144
        else {
131
145
            foreach my $theme ( _get_themes('intranet') ) {
132
    my $languages= C4::Context->preference($preference) ||'en';
146
                push @languages, _get_language_dirs($htdocs,$theme);
133
    @enabled_languages = split ",", $languages;
147
            }
134
    $htdocs = C4::Context->config($config);
148
        }
135
    if ( $theme and -d "$htdocs/$theme" ) {
136
        (@languages) = _get_language_dirs($htdocs,$theme);
149
    }
137
    }
150
    else {
138
    else {
151
        @enabled_languages = split ",", C4::Context->preference('opaclanguages');
139
        for my $theme ( _get_themes($interface) ) {
152
        my $htdocs = C4::Context->config('intrahtdocs');
153
        foreach my $theme ( _get_themes('intranet') ) {
154
            push @languages, _get_language_dirs($htdocs,$theme);
140
            push @languages, _get_language_dirs($htdocs,$theme);
155
        }
141
        }
156
        $htdocs = C4::Context->config('opachtdocs');
142
        @languages=uniq @languages;
157
        foreach my $theme ( _get_themes('opac') ) {
158
            push @languages, _get_language_dirs($htdocs,$theme);
159
        }
160
        my %seen;
161
        $seen{$_}++ for @languages;
162
        @languages = keys %seen;
163
    }
143
    }
164
    return _build_languages_arrayref($all_languages,\@languages,$current_language,\@enabled_languages);
144
    @enabled_languages=grep{my $enabled_language=$_;any{$_ eq $enabled_language}@languages}@enabled_languages;
145
    return _build_languages_arrayref(\@enabled_languages,$current_language);
165
}
146
}
166
147
167
=head2 getAllLanguages
148
=head2 getAllLanguages
Lines 178-185 Returns a reference to an array of hashes: Link Here
178
159
179
=cut
160
=cut
180
161
162
my @languages_loop;
163
181
sub getAllLanguages {
164
sub getAllLanguages {
182
    my @languages_loop;
165
    return   \@languages_loop if scalar(@languages_loop);
183
    my $dbh=C4::Context->dbh;
166
    my $dbh=C4::Context->dbh;
184
    my $current_language = shift || 'en';
167
    my $current_language = shift || 'en';
185
    my $sth = $dbh->prepare('SELECT * FROM language_subtag_registry WHERE type=\'language\'');
168
    my $sth = $dbh->prepare('SELECT * FROM language_subtag_registry WHERE type=\'language\'');
Lines 276-285 FIXME: this could be rewritten and simplified using map Link Here
276
=cut
259
=cut
277
260
278
sub _build_languages_arrayref {
261
sub _build_languages_arrayref {
279
        my ($all_languages,$translated_languages,$current_language,$enabled_languages) = @_;
262
        my ($translated_languages,$current_language) = @_;
280
        my @translated_languages = @$translated_languages;
263
        my @translated_languages = @$translated_languages;
281
        my @languages_loop; # the final reference to an array of hashrefs
264
        my @languages_loop; # the final reference to an array of hashrefs
282
        my @enabled_languages = @$enabled_languages;
283
        # how many languages are enabled, if one, take note, some contexts won't need to display it
265
        # how many languages are enabled, if one, take note, some contexts won't need to display it
284
        my %seen_languages; # the language tags we've seen
266
        my %seen_languages; # the language tags we've seen
285
        my %found_languages;
267
        my %found_languages;
Lines 291-305 sub _build_languages_arrayref { Link Here
291
            # separate the language string into its subtag types
273
            # separate the language string into its subtag types
292
            my $language_subtags_hashref = regex_lang_subtags($translated_language);
274
            my $language_subtags_hashref = regex_lang_subtags($translated_language);
293
275
294
            # is this language string 'enabled'?
295
            for my $enabled_language (@enabled_languages) {
296
                #warn "Checking out if $translated_language eq $enabled_language";
297
                $language_subtags_hashref->{'enabled'} = 1 if $translated_language eq $enabled_language;
298
            }
299
            
300
            # group this language, key by langtag
276
            # group this language, key by langtag
301
            $language_subtags_hashref->{'sublanguage_current'} = 1 if $translated_language eq $current_language;
277
            $language_subtags_hashref->{'sublanguage_current'} = 1 if $translated_language eq $current_language;
302
            $language_subtags_hashref->{'rfc4646_subtag'} = $translated_language;
278
            $language_subtags_hashref->{'rfc4646_subtag'} = $translated_language;
279
            $language_subtags_hashref->{'enabled'} = 1;
303
            $language_subtags_hashref->{'native_description'} = language_get_description($language_subtags_hashref->{language},$language_subtags_hashref->{language},'language');
280
            $language_subtags_hashref->{'native_description'} = language_get_description($language_subtags_hashref->{language},$language_subtags_hashref->{language},'language');
304
            $language_subtags_hashref->{'script_description'} = language_get_description($language_subtags_hashref->{script},$language_subtags_hashref->{'language'},'script');
281
            $language_subtags_hashref->{'script_description'} = language_get_description($language_subtags_hashref->{script},$language_subtags_hashref->{'language'},'script');
305
            $language_subtags_hashref->{'region_description'} = language_get_description($language_subtags_hashref->{region},$language_subtags_hashref->{'language'},'region');
282
            $language_subtags_hashref->{'region_description'} = language_get_description($language_subtags_hashref->{region},$language_subtags_hashref->{'language'},'region');
Lines 311-321 sub _build_languages_arrayref { Link Here
311
        while( my ($key, $value) = each %$language_groups) {
288
        while( my ($key, $value) = each %$language_groups) {
312
289
313
            # is this language group enabled? are any of the languages within it enabled?
290
            # is this language group enabled? are any of the languages within it enabled?
314
            my $enabled;
315
            for my $enabled_language (@enabled_languages) {
316
                my $regex_enabled_language = regex_lang_subtags($enabled_language);
317
                $enabled = 1 if $key eq $regex_enabled_language->{language};
318
            }
319
            push @languages_loop,  {
291
            push @languages_loop,  {
320
                            # this is only use if there is one
292
                            # this is only use if there is one
321
                            rfc4646_subtag => @$value[0]->{rfc4646_subtag},
293
                            rfc4646_subtag => @$value[0]->{rfc4646_subtag},
Lines 324-330 sub _build_languages_arrayref { Link Here
324
                            sublanguages_loop => $value,
296
                            sublanguages_loop => $value,
325
                            plural => $track_language_groups->{$key} >1 ? 1 : 0,
297
                            plural => $track_language_groups->{$key} >1 ? 1 : 0,
326
                            current => $current_language_regex->{language} eq $key ? 1 : 0,
298
                            current => $current_language_regex->{language} eq $key ? 1 : 0,
327
                            group_enabled => $enabled,
299
                            group_enabled=>1
328
                           };
300
                           };
329
        }
301
        }
330
        return \@languages_loop;
302
        return \@languages_loop;
331
- 

Return to bug 6000