From 46c4586aa3c0df0ac62457e9718036642f0e57de Mon Sep 17 00:00:00 2001 From: Bernardo Gonzalez Kriegel Date: Fri, 25 Apr 2014 23:27:53 -0300 Subject: [PATCH] Bug 12017 - 5 - Change local use syspref type Language This patch changes local use syspref of type Language Currently this type of syspref is not used, and shows currently translated staff languages. It's values can't be changed. To make something useful, this kind of syspref is changed to show all langs and save iso639_2 codes. And they not use descriptions on database, only rfc4646 codes from templates. It's easy to add new kinds that save rfc4646 codes, or only show translated languages. To test: 1. Apply the patch 2. Go to system preferences, local use 3. Define a new syspref, any name/description, type 'Language', Save 4. New syspref is showed as a multiple selection of iso639_2 codes with current lang and native names. Check that 5. Select some values, save, check they are saved and restored 6. Edit, similar view, change values, save, check 7. Delete test syspref Values are stored as ',' separated values Verify in database --- C4/Languages.pm | 59 +++++++++- admin/systempreferences.pl | 21 +--- .../prog/en/modules/admin/systempreferences.tt | 120 ++++---------------- 3 files changed, 83 insertions(+), 117 deletions(-) diff --git a/C4/Languages.pm b/C4/Languages.pm index 57bef47..f2e4b3b 100644 --- a/C4/Languages.pm +++ b/C4/Languages.pm @@ -49,7 +49,7 @@ BEGIN { &getLanguages &getAllLanguages ); - @EXPORT_OK = qw(getFrameworkLanguages getTranslatedLanguages getAllLanguages getLanguages get_bidi regex_lang_subtags language_get_description accept_language getlanguage); + @EXPORT_OK = qw(getLanguages_iso getFrameworkLanguages getTranslatedLanguages getAllLanguages getLanguages get_bidi regex_lang_subtags language_get_description accept_language getlanguage); $DEBUG = 0; } @@ -106,6 +106,63 @@ sub getFrameworkLanguages { return \@languages; } +=head2 getLanguages_iso + +Get all languages codes and iso639_2 selected by iso639_2 +Expect a hash with a defined value for each iso code +Returns a reference to an array of hashes: + + my $languages = getLanguage_iso( %enabled ); + for my $language( @$languages ) { + print "$language->{rfc4646_subtag}\n"; # language code in rfc4646 + print "$language->{iso638_2_code}\n"; # language code in iso 639-2 + print "$language->{enabled}\n"; # 1 if enabled iso638_2_code + } + +=cut + +sub getLanguages_iso { + # Get all languages codes and iso639_2 selected by iso639_2 + # Expect a hash with a defined value for each iso code + my $enabled = shift; + my $langs = getLangCodes(); + my @result; + for my $code ( keys %$langs ) { + push @result, { + rfc4646_subtag => $code, + iso639_2_code => $langs->{$code}, + enabled => ( $enabled->{ $langs->{$code} } ) ? 1 : 0, + } + } + return \@result; +} + +=head2 getLangCodes + +Get all language codes and iso639_2 codes +as a hash with code as key and iso as value +Returns a reference to a hash: + + my $languages = getIsoCodes(); + for my $code ( keys %$languages ) { + print "$code\n"; # language code in rfc4646 + print "$languages->{code}\n"; # language code in iso 639-2 + } + +=cut + +sub getLangCodes { + my %result; + my $dbh = C4::Context->dbh; + my $sth = $dbh->prepare('SELECT * FROM language_rfc4646_to_iso639'); + $sth->execute(); + while (my $rfc_to_iso = $sth->fetchrow_hashref) { + $result{$rfc_to_iso->{'rfc4646_subtag'}} = $rfc_to_iso->{'iso639_2_code'}; + } + return \%result; +} + + =head2 getTranslatedLanguages Returns a reference to an array of hashes: diff --git a/admin/systempreferences.pl b/admin/systempreferences.pl index f41fe76..a172f59 100755 --- a/admin/systempreferences.pl +++ b/admin/systempreferences.pl @@ -48,7 +48,7 @@ use MIME::Base64; use C4::Auth; use C4::Context; use C4::Koha; -use C4::Languages qw(getTranslatedLanguages); +use C4::Languages qw(getLanguages_iso); use C4::ClassSource; use C4::Log; use C4::Output; @@ -162,26 +162,11 @@ sub GetPrefParams { } } elsif ( $data->{'type'} eq 'Languages' ) { my $currently_selected_languages; - foreach my $language ( split /\s+/, $data->{'value'} ) { + foreach my $language ( split /\,/, $data->{'value'} ) { $currently_selected_languages->{$language} = 1; } - # current language - my $lang = $params->{'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 ); + my $languages_loop = getLanguages_iso( $currently_selected_languages ); $params->{'languages_loop'} = $languages_loop; $params->{'type_langselector'} = 1; diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/systempreferences.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/systempreferences.tt index 2d27d83..3e33173 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/systempreferences.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/systempreferences.tt @@ -122,57 +122,19 @@ [% END %] [% IF ( type_langselector ) %] - [% IF ( languages_loop ) %] - - [% FOREACH languages_loo IN languages_loop %] - - [% END %] -
- [% IF ( languages_loo.plural ) %] - [% IF ( languages_loo.native_description ) %][% languages_loo.native_description %][% ELSE %][% languages_loo.rfc4646_subtag %][% END %] - [% FOREACH sublanguages_loo IN languages_loo.sublanguages_loop %]
- [% IF ( sublanguages_loo.sublanguage_current ) %] - - - [% ELSE %] - - [% END %]
- [% END %] - - [% ELSE %] - [% IF ( languages_loo.current ) %] - - [% ELSE %] - - [% END %] - [% END %] -
- [% END %] - + ([% languages_loo.iso639_2_code %]) [% INCLUDE language_descriptions code = languages_loo.rfc4646_subtag t = 1 %] [% INCLUDE language_descriptions code = languages_loo.rfc4646_subtag %] + + [% END %] + + [% END %] [% END %] [% IF ( type_yesno ) %] @@ -299,57 +261,19 @@ [% END %] [% IF ( loo.type_langselector ) %] - [% IF ( loo.languages_loop ) %] - - [% FOREACH languages_loo IN loo.languages_loop %] - - [% END %] -
- [% IF ( languages_loo.plural ) %] - [% IF ( languages_loo.native_description ) %][% languages_loo.native_description %][% ELSE %][% languages_loo.rfc4646_subtag %][% END %] - [% FOREACH sublanguages_loo IN languages_loo.sublanguages_loop %]
- [% IF ( sublanguages_loo.sublanguage_current ) %] - - - [% ELSE %] - - [% END %]
- [% END %] - - [% ELSE %] - [% IF ( languages_loo.current ) %] - - [% ELSE %] - + [% IF ( loo.languages_loop ) %] + [% END %] -
- [% END %] - +
[% END %] [% IF ( loo.type_yesno ) %] -- 1.7.9.5