@@ -, +, @@
---
C4/Languages.pm | 30 ++++++++++++++++----
catalogue/search.pl | 4 +--
installer/data/mysql/sysprefs.sql | 3 +-
installer/data/mysql/updatedatabase.pl | 7 +++++
.../en/modules/admin/preferences/searching.pref | 6 ++++
opac/opac-search.pl | 4 +--
6 files changed, 44 insertions(+), 10 deletions(-)
--- a/C4/Languages.pm
+++ a/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;
}
--- a/catalogue/search.pl
+++ a/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:
--- a/installer/data/mysql/sysprefs.sql
+++ a/installer/data/mysql/sysprefs.sql
@@ -418,5 +418,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')
;
--- a/installer/data/mysql/updatedatabase.pl
+++ a/installer/data/mysql/updatedatabase.pl
@@ -7155,6 +7155,13 @@ if ( CheckVersion($DBversion) ) {
SetVersion($DBversion);
}
+$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);
+}
+
=head1 FUNCTIONS
=head2 TableExists($table)
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/searching.pref
+++ a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/searching.pref
@@ -79,6 +79,12 @@ Searching:
- "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
type: boolean
--- a/opac/opac-search.pl
+++ a/opac/opac-search.pl
@@ -43,7 +43,7 @@ for ( $searchengine ) {
use C4::Output;
use C4::Auth qw(:DEFAULT get_session ParseSearchHistoryCookie);
-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
--