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