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 |
- |
|
|