=cut
sub getTranslatedLanguages {
- my ($interface, $theme, $current_language) = @_;
+ my ($interface, $theme, $current_language, $which) = @_;
my $htdocs;
my $all_languages = getAllLanguages();
my @languages;
my $lang;
-
+ my @enabled_languages;
+
if ($interface && $interface eq 'opac' ) {
+ @enabled_languages = split ",", C4::Context->preference('opaclanguages');
$htdocs = C4::Context->config('opachtdocs');
if ( $theme and -d "$htdocs/$theme" ) {
(@languages) = _get_language_dirs($htdocs,$theme);
- return _build_languages_arrayref($all_languages,\@languages,$current_language);
+ return _build_languages_arrayref($all_languages,\@languages,$current_language,\@enabled_languages);
}
else {
for my $theme ( _get_themes('opac') ) {
push @languages, _get_language_dirs($htdocs,$theme);
}
- return _build_languages_arrayref($all_languages,\@languages,$current_language);
+ return _build_languages_arrayref($all_languages,\@languages,$current_language,\@enabled_languages);
}
}
elsif ($interface && $interface eq 'intranet' ) {
+ @enabled_languages = split ",", C4::Context->preference('language');
$htdocs = C4::Context->config('intrahtdocs');
if ( $theme and -d "$htdocs/$theme" ) {
@languages = _get_language_dirs($htdocs,$theme);
- return _build_languages_arrayref($all_languages,\@languages,$current_language);
+ return _build_languages_arrayref($all_languages,\@languages,$current_language,\@enabled_languages);
}
else {
foreach my $theme ( _get_themes('intranet') ) {
push @languages, _get_language_dirs($htdocs,$theme);
}
- return _build_languages_arrayref($all_languages,\@languages,$current_language);
+ return _build_languages_arrayref($all_languages,\@languages,$current_language,\@enabled_languages);
}
}
else {
+ @enabled_languages = split ",", C4::Context->preference('opaclanguages');
my $htdocs = C4::Context->config('intrahtdocs');
foreach my $theme ( _get_themes('intranet') ) {
push @languages, _get_language_dirs($htdocs,$theme);
foreach my $theme ( _get_themes('opac') ) {
push @languages, _get_language_dirs($htdocs,$theme);
}
- return _build_languages_arrayref($all_languages,\@languages,$current_language);
+ return _build_languages_arrayref($all_languages,\@languages,$current_language,\@enabled_languages);
}
}
# add the correct description info
while (my $language_descriptions = $sth2->fetchrow_hashref) {
- # fill in the ISO6329 code
- $language_subtag_registry->{iso639_2_code} = $language_descriptions->{iso639_2_code};
+ # fill in the ISO6329 code
+ $language_subtag_registry->{iso639_2_code} = $language_descriptions->{iso639_2_code};
$language_subtag_registry->{language_description} = $language_descriptions->{description};
}
push @languages_loop, $language_subtag_registry;
=cut
sub _build_languages_arrayref {
- my ($all_languages,$translated_languages,$current_language) = @_;
+ my ($all_languages,$translated_languages,$current_language,$enabled_languages) = @_;
my @translated_languages = @$translated_languages;
my @languages_loop; # the final reference to an array of hashrefs
+ my @enabled_languages = @$enabled_languages;
my %seen_languages; # the language tags we've seen
my %found_languages;
my $language_groups;
my $current_language_regex = regex_lang_subtags($current_language);
# Loop through the translated languages
for my $translated_language (@translated_languages) {
-
# separate the language string into its subtag types
my $language_subtags_hashref = regex_lang_subtags($translated_language);
+
+ # is this language string 'enabled'?
+ for my $enabled_language (@enabled_languages) {
+ #warn "Checking out if $translated_language eq $enabled_language";
+ $language_subtags_hashref->{'enabled'} = 1 if $translated_language eq $enabled_language;
+ }
# group this language, key by langtag
$language_subtags_hashref->{'sublanguage_current'} = 1 if $translated_language eq $current_language;
}
# $key is a language subtag like 'en'
while( my ($key, $value) = each %$language_groups) {
+
+ # is this language group enabled? are any of the languages within it enabled?
+ my $enabled;
+ for my $enabled_language (@enabled_languages) {
+ my $regex_enabled_language = regex_lang_subtags($enabled_language);
+ $enabled = 1 if $key eq $regex_enabled_language->{language};
+ }
push @languages_loop, {
# this is only use if there is one
rfc4646_subtag => @$value[0]->{rfc4646_subtag},
sublanguages_loop => $value,
plural => $track_language_groups->{$key} >1 ? 1 : 0,
current => $current_language_regex->{language} eq $key ? 1 : 0,
+ group_enabled => $enabled,
};
}
return \@languages_loop;
$counter++;
}
} elsif ($data->{'type'} eq 'Languages') {
- $template->param('type-choice' => 1);
- my $type='';
- @options=();
- my $currently_selected_languages;
- my $counter=0;
+ my $currently_selected_languages;
foreach my $language (split /\s+/, $data->{'value'}) {
- next if $language eq 'images';
- push @options, { option => $language, counter => $counter };
$currently_selected_languages->{$language}=1;
- $counter++;
- }
- my $langavail = getTranslatedLanguages();
- foreach my $language (@$langavail) {
- my $selected='0';
- next if $currently_selected_languages->{$language->{'language_code'}};
- #FIXME: could add language_name and language_locale_name for better display
- push @options, { option => $language->{'language_code'}, counter => $counter };
- $counter++;
}
+ # current language
+ my $lang = $template->param('lang');
+ my $theme;
+ my $interface;
+ if ($data->{'variable'} =~ /opac/) {
+ # this is the OPAC
+ $interface = 'opac';
+ $theme = C4::Context->preference('opacthemes');
+ }
+ else {
+ # this is the staff client
+ $interface = 'intranet';
+ $theme = C4::Context->preference('template');
+ }
+ my $languages_loop = getTranslatedLanguages($interface,$theme,$lang,$currently_selected_languages);
+
+ $template->param('languages_loop' => $languages_loop);
+ $template->param('type-langselector' => 1);
} else {
$template->param('type-free' => 1);
$template->param('fieldlength' => $data->{'options'}>0?$data->{'options'}:60);
my $dbh = C4::Context->dbh;
my $sth=$dbh->prepare("select * from systempreferences where variable=?");
$sth->execute($input->param('variable'));
+ # to handle multiple values
+ my $value;
+ # handle multiple value strings (separated by ',')
+ my $params = $input->Vars;
+ my @values = split("\0",$params->{'value'}) if $params->{'value'};
+ for my $vl (@values) {
+ $value .= "$vl,";
+ }
+ $value =~ s/,$//;
if ($sth->rows) {
unless (C4::Context->config('demo') eq 1) {
my $sth=$dbh->prepare("update systempreferences set value=?,explanation=?,type=?,options=? where variable=?");
- $sth->execute($input->param('value'), $input->param('explanation'), $input->param('preftype'), $input->param('prefoptions'), $input->param('variable'));
+ $sth->execute($value, $input->param('explanation'), $input->param('preftype'), $input->param('prefoptions'), $input->param('variable'));
$sth->finish;
}
} else {
unless (C4::Context->config('demo') eq 1) {
my $sth=$dbh->prepare("insert into systempreferences (variable,value,explanation,type,options) values (?,?,?,?,?)");
- $sth->execute($input->param('variable'), $input->param('value'), $input->param('explanation'), $input->param('preftype'), $input->param('prefoptions'));
+ $sth->execute($input->param('variable'), $value, $input->param('explanation'), $input->param('preftype'), $input->param('prefoptions'));
$sth->finish;
}
}
<div id="changelanguage" class="ft">
<ul id="i18nMenu" class="footermenu">
<!-- TMPL_LOOP NAME="languages_loop" -->
-
+ <!-- TMPL_IF NAME="group_enabled" -->
<!-- TMPL_IF NAME="plural" -->
<li class="more"><a id="showlang" href="#"><!-- TMPL_VAR NAME="native_description" --> (<!-- TMPL_VAR NAME="rfc4646_subtag" -->)</a><div id="sublangs">
<div class="bd"><ul>
<!-- TMPL_LOOP NAME="sublanguages_loop" -->
-
+ <!-- TMPL_IF NAME="enabled" -->
<!-- TMPL_IF NAME="sublanguage_current" -->
<li> <a href="#"><!-- TMPL_VAR NAME="native_description" --> <!-- TMPL_VAR NAME="script_description" --> <!-- TMPL_VAR NAME="region_description" --> <!-- TMPL_VAR NAME="variant_description" --> (<!-- TMPL_VAR NAME="rfc4646_subtag" -->)</a></li>
<!-- TMPL_ELSE -->
<li><a href="/cgi-bin/koha/changelanguage.pl?language=<!-- TMPL_VAR NAME="rfc4646_subtag" -->"> <!-- TMPL_VAR NAME="native_description" --> <!-- TMPL_VAR NAME="script_description" --> <!-- TMPL_VAR NAME="region_description" --> <!-- TMPL_VAR NAME="variant_description" --> (<!-- TMPL_VAR NAME="rfc4646_subtag" -->)</a></li>
+ <!-- /TMPL_IF -->
<!-- /TMPL_IF -->
<!-- /TMPL_LOOP -->
</ul></div></div></li>
<!-- TMPL_ELSE -->
+ <!-- TMPL_IF NAME="group_enabled" -->
<!-- TMPL_IF NAME="current" -->
<li><!-- TMPL_VAR NAME="native_description" -->(<!-- TMPL_VAR NAME="rfc4646_subtag" -->)</li>
<!-- TMPL_ELSE -->
<li><a href="/cgi-bin/koha/changelanguage.pl?language=<!-- TMPL_VAR NAME="rfc4646_subtag" -->"><!-- TMPL_VAR NAME="native_description" --> (<!-- TMPL_VAR NAME="rfc4646_subtag" -->)</a></li>
<!-- /TMPL_IF -->
+ <!-- /TMPL_IF -->
+ <!-- /TMPL_IF -->
<!-- /TMPL_IF -->
-
<!-- /TMPL_LOOP -->
</ul>
</div>
<!-- /TMPL_LOOP -->
</select>
<!-- /TMPL_IF -->
+ <!-- TMPL_IF NAME="type-langselector" -->
+ <!-- TMPL_IF NAME="languages_loop" -->
+ <table>
+ <!-- TMPL_LOOP NAME="languages_loop" -->
+ <tr><td>
+ <!-- TMPL_IF NAME="plural" -->
+ <!-- TMPL_IF NAME="native_description" --><!-- TMPL_VAR NAME="native_description" --><!-- TMPL_ELSE --><!-- TMPL_VAR NAME="rfc4646_subtag" --><!-- /TMPL_IF -->
+ <!-- TMPL_LOOP NAME="sublanguages_loop" --><table><tr><td>
+ <!-- TMPL_IF NAME="sublanguage_current" -->
+ <label for="<!-- TMPL_VAR NAME="rfc4646_subtag" -->"><!-- TMPL_VAR NAME="native_description" --> <!-- TMPL_VAR NAME="script_description" --> <!-- TMPL_VAR NAME="region_description" --> <!-- TMPL_VAR NAME="variant_description" -->(<!-- TMPL_VAR NAME="rfc4646_subtag" -->)
+ <input value="<!-- TMPL_VAR NAME="rfc4646_subtag" -->" name="value" id="<!-- TMPL_VAR NAME="rfc4646_subtag" -->" type="checkbox" <!-- TMPL_IF NAME="enabled" -->checked="checked"<!-- /TMPL_IF --> /> </label>
+
+ <!-- TMPL_ELSE -->
+ <label for="<!-- TMPL_VAR NAME="rfc4646_subtag" -->"><!-- TMPL_VAR NAME="native_description" --> <!-- TMPL_VAR NAME="script_description" --> <!-- TMPL_VAR NAME="region_description" --> <!-- TMPL_VAR NAME="variant_description" -->(<!-- TMPL_VAR NAME="rfc4646_subtag" -->)
+ <input value="<!-- TMPL_VAR NAME="rfc4646_subtag" -->" name="value" id="<!-- TMPL_VAR NAME="rfc4646_subtag" -->" type="checkbox" <!-- TMPL_IF NAME="enabled" -->checked="checked"<!-- /TMPL_IF --> /> </label>
+ <!-- /TMPL_IF --></td></tr></table>
+ <!-- /TMPL_LOOP -->
+
+ <!-- TMPL_ELSE -->
+ <!-- TMPL_IF NAME="current" -->
+ <label for="<!-- TMPL_VAR NAME="rfc4646_subtag" -->"><!-- TMPL_VAR NAME="native_description" -->(<!-- TMPL_VAR NAME="rfc4646_subtag" -->)
+ <input value="<!-- TMPL_VAR NAME="rfc4646_subtag" -->" name="value" id="<!-- TMPL_VAR NAME="rfc4646_subtag" -->" type="checkbox" <!-- TMPL_IF NAME="group_enabled" -->checked="checked"<!-- /TMPL_IF --> /> </label>
+ <!-- TMPL_ELSE -->
+ <label for="<!-- TMPL_VAR NAME="rfc4646_subtag" -->"><!-- TMPL_VAR NAME="native_description" -->(<!-- TMPL_VAR NAME="rfc4646_subtag" -->)
+ <input value="<!-- TMPL_VAR NAME="rfc4646_subtag" -->" name="value" id="<!-- TMPL_VAR NAME="rfc4646_subtag" -->" type="checkbox" <!-- TMPL_IF NAME="group_enabled" -->checked="checked"<!-- /TMPL_IF --> /> </label>
+ <!-- /TMPL_IF -->
+ <!-- /TMPL_IF -->
+ </td></tr>
+ <!-- /TMPL_LOOP -->
+ </table>
+ <!-- /TMPL_IF -->
+
+ <!-- /TMPL_IF -->
+
<!-- TMPL_IF NAME="type-yesno" -->
<!-- TMPL_IF NAME="value-yes" -->
<input type="radio" name="value" id="value" value="1" checked="checked" /><!-- TMPL_ELSE --><input type="radio" name="value" id="value" value="1" /><!-- /TMPL_IF --> <label for="value" class="yesno">ON</label>
<div id="changelanguage" class="ft">
<ul id="i18nMenu" class="footermenu">
<!-- TMPL_LOOP NAME="languages_loop" -->
-
+ <!-- TMPL_IF NAME="group_enabled" -->
<!-- TMPL_IF NAME="plural" -->
- <li class="more"><a id="showlang" href="#"><!-- TMPL_VAR NAME="native_description" --> (<!-- TMPL_VAR NAME="rfc4646_subtag" -->)</a><div id="sublangs">
+ <li class="more"><a id="showlang" href="#"><!-- TMPL_IF NAME="native_description" --><!-- TMPL_VAR NAME="native_description" --><!-- TMPL_ELSE --><!-- TMPL_VAR NAME="rfc4646_subtag" --><!-- /TMPL_IF --></a><div id="sublangs">
<div class="bd"><ul>
<!-- TMPL_LOOP NAME="sublanguages_loop" -->
-
+ <!-- TMPL_IF NAME="enabled" -->
<!-- TMPL_IF NAME="sublanguage_current" -->
<li> <!-- TMPL_VAR NAME="native_description" --> <!-- TMPL_VAR NAME="script_description" --> <!-- TMPL_VAR NAME="region_description" --> <!-- TMPL_VAR NAME="variant_description" --> (<!-- TMPL_VAR NAME="rfc4646_subtag" -->)</li>
<!-- TMPL_ELSE -->
<li><a href="/cgi-bin/koha/opac-changelanguage.pl?language=<!-- TMPL_VAR NAME="rfc4646_subtag" -->"> <!-- TMPL_VAR NAME="native_description" --> <!-- TMPL_VAR NAME="script_description" --> <!-- TMPL_VAR NAME="region_description" --> <!-- TMPL_VAR NAME="variant_description" --> (<!-- TMPL_VAR NAME="rfc4646_subtag" -->)</a></li>
<!-- /TMPL_IF -->
-
+ <!-- /TMPL_IF -->
<!-- /TMPL_LOOP -->
</ul></div></div></li>
<!-- TMPL_ELSE -->
+ <!-- TMPL_IF NAME="group_enabled" -->
<!-- TMPL_IF NAME="current" -->
- <li><!-- TMPL_VAR NAME="native_description" -->(<!-- TMPL_VAR NAME="rfc4646_subtag" -->)</li>
+ <li><!-- TMPL_IF NAME="native_description" --><!-- TMPL_VAR NAME="native_description" --><!-- TMPL_ELSE --><!-- TMPL_VAR NAME="rfc4646_subtag" --><!-- /TMPL_IF --></li>
<!-- TMPL_ELSE -->
- <li><a href="/cgi-bin/koha/opac-changelanguage.pl?language=<!-- TMPL_VAR NAME="rfc4646_subtag" -->"><!-- TMPL_VAR NAME="native_description" --> (<!-- TMPL_VAR NAME="rfc4646_subtag" -->)</a></li>
+ <li><a href="/cgi-bin/koha/opac-changelanguage.pl?language=<!-- TMPL_VAR NAME="rfc4646_subtag" -->"><!-- TMPL_IF NAME="native_description" --><!-- TMPL_VAR NAME="native_description" --><!-- TMPL_ELSE --><!-- TMPL_VAR NAME="rfc4646_subtag" --><!-- /TMPL_IF --></a></li>
<!-- /TMPL_IF -->
+ <!-- /TMPL_IF -->
+ <!-- /TMPL_IF -->
<!-- /TMPL_IF -->
-
<!-- /TMPL_LOOP -->
</ul>
</div>