diff --git a/C4/Languages.pm b/C4/Languages.pm index 2a74b925aa..75b9690b4c 100644 --- a/C4/Languages.pm +++ b/C4/Languages.pm @@ -43,9 +43,10 @@ BEGIN { @EXPORT = qw( &getFrameworkLanguages &getTranslatedLanguages + &getLanguages &getAllLanguages ); - @EXPORT_OK = qw(getFrameworkLanguages getTranslatedLanguages getAllLanguages get_bidi regex_lang_subtags language_get_description accept_language); + @EXPORT_OK = qw(getFrameworkLanguages getTranslatedLanguages getAllLanguages getLanguages get_bidi regex_lang_subtags language_get_description accept_language); $DEBUG = 0; } @@ -178,14 +179,31 @@ Returns a reference to an array of hashes: =cut sub getAllLanguages { + return getLanguages(shift); +} + +=head2 getLanguages + +Returns a reference to an array of hashes. +Extracted from getAllLanguages to limit effect on the code base. +This new function (name) will allow for more arguments to customize the values returned. + +- If no parameter is passed to the function, it returns english languages names +- If a $lang parameter conforming to RFC4646 syntax is passed, the function returns languages names translated in $lang + If a language name is not translated in $lang in database, the function returns english language name +- If $isFiltered is set to true, only the detail of the languages selected in system preferences AdvanceSearchLanguages is returned. + +=cut + +sub getLanguages { my $lang = shift; -# if no parameter is passed to the function, it returns english languages names -# if a $lang parameter conforming to RFC4646 syntax is passed, the function returns languages names translated in $lang -# if a language name is not translated in $lang in database, the function returns english language name + my $isFiltered = shift; + my @languages_loop; my $dbh=C4::Context->dbh; my $default_language = 'en'; my $current_language = $default_language; + my $language_list=C4::Context->preference("AdvancedSearchLanguages") if $isFiltered; if ($lang) { $current_language = regex_lang_subtags($lang)->{'language'}; } @@ -226,7 +244,9 @@ sub getAllLanguages { $language_subtag_registry->{language_description} = $language_descriptions->{description}; } } - push @languages_loop, $language_subtag_registry; + if ( !$language_list || index ( $language_list, $language_subtag_registry->{ iso639_2_code } ) >= 0) { + push @languages_loop, $language_subtag_registry; + } } return \@languages_loop; } diff --git a/catalogue/search.pl b/catalogue/search.pl index a391dfe3a0..b3419be535 100755 --- a/catalogue/search.pl +++ b/catalogue/search.pl @@ -144,7 +144,7 @@ use C4::Context; use C4::Output; use C4::Auth qw(:DEFAULT get_session); use C4::Search; -use C4::Languages qw(getAllLanguages); +use C4::Languages qw(getLanguages); use C4::Koha; use C4::Members qw(GetMember); use C4::VirtualShelves; @@ -339,7 +339,7 @@ if ( $template_type eq 'advsearch' ) { search_boxes_loop => \@search_boxes_array); # load the language limits (for search) - my $languages_limit_loop = getAllLanguages($lang); + my $languages_limit_loop = getLanguages($lang, 1); $template->param(search_languages_loop => $languages_limit_loop,); # Expanded search options in advanced search: diff --git a/installer/data/mysql/sysprefs.sql b/installer/data/mysql/sysprefs.sql index 8b2241a3f1..13506d1c64 100644 --- a/installer/data/mysql/sysprefs.sql +++ b/installer/data/mysql/sysprefs.sql @@ -429,5 +429,6 @@ INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, ` ('XSLTResultsDisplay','default','','Enable XSL stylesheet control over results page display on intranet','Free'), ('yuipath','local','local|http://yui.yahooapis.com/2.5.1/build','Insert the path to YUI libraries, choose local if you use koha offline','Choice'), ('z3950AuthorAuthFields','701,702,700',NULL,'Define the MARC biblio fields for Personal Name Authorities to fill biblio.author','free'), -('z3950NormalizeAuthor','0','','If ON, Personal Name Authorities will replace authors in biblio.author','YesNo') +('z3950NormalizeAuthor','0','','If ON, Personal Name Authorities will replace authors in biblio.author','YesNo'), +('AdvancedSearchLanguages','','','ISO 639-2 codes of languages you wish to see appear as an Advanced search option. Example: eng|fre|ita','Textarea') ; diff --git a/installer/data/mysql/updatedatabase.pl b/installer/data/mysql/updatedatabase.pl index 7a35c62d4c..7e1d3fdd0d 100755 --- a/installer/data/mysql/updatedatabase.pl +++ b/installer/data/mysql/updatedatabase.pl @@ -7154,6 +7154,7 @@ if ( CheckVersion($DBversion) ) { SetVersion($DBversion); } +<<<<<<< HEAD $DBversion = "3.13.00.023"; if ( CheckVersion($DBversion) ) { $dbh->do("ALTER TABLE borrowers CHANGE password password VARCHAR(60);"); @@ -7165,6 +7166,12 @@ $DBversion = "3.13.00.024"; if ( CheckVersion($DBversion) ) { $dbh->do(q{ALTER TABLE z3950servers ADD COLUMN recordtype VARCHAR(45) NOT NULL DEFAULT 'biblio' AFTER description;}); print "Upgrade to $DBversion done (Bug 10096 - Add a Z39.50 interface for authority searching)\n"; +} + +$DBversion = "3.13.00.XXX"; +if ( CheckVersion($DBversion) ) { + $dbh->do("INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES('AdvancedSearchLanguages','','','ISO 639-2 codes of languages you wish to see appear as an Advanced search option. Example: eng|fra|ita','Textarea')"); + print "Upgrade to $DBversion done (Bug 10986: system preferences to limit languages in Advanced search )\n"; SetVersion ($DBversion); } diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/searching.pref b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/searching.pref index 29da64eae2..e75dac7bcd 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/searching.pref +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/searching.pref @@ -78,6 +78,12 @@ Searching: class: long - "fields (separate values with |). Tabs appear in the order listed.
" - "Currently supported values: Item types (itemtypes), Collection Codes (ccode) and Shelving Location (loc)." + - + - Limit the languages listed in the advanced search drop-down to the + - pref: AdvancedSearchLanguages + class: long + - "ISO 639-2 language codes (separate values with | or ,)." + - "For example, to limit listing to French and Italian, enter ita|fre." - - By default, - pref: expandedSearchOption diff --git a/opac/opac-search.pl b/opac/opac-search.pl index a7f16f6ad7..83f16d8a61 100755 --- a/opac/opac-search.pl +++ b/opac/opac-search.pl @@ -43,7 +43,7 @@ for ( $searchengine ) { use C4::Output; use C4::Auth qw(:DEFAULT get_session ParseSearchHistorySession SetSearchHistorySession); -use C4::Languages qw(getAllLanguages); +use C4::Languages qw(getLanguages); use C4::Search; use C4::Biblio; # GetBiblioData use C4::Koha; @@ -198,7 +198,7 @@ $template->param( ); # load the language limits (for search) -my $languages_limit_loop = getAllLanguages($lang); +my $languages_limit_loop = getLanguages($lang, 1); $template->param(search_languages_loop => $languages_limit_loop,); # load the Type stuff