use C4::Context;
use List::MoreUtils q/any/;
use Try::Tiny;
-use YAML::XS;
use Encode;
use Data::Dumper; # TODO remove
if ($format =~ /(rss|atom|opensearchdescription)/) {
$template_name = 'opac-opensearch.tt';
}
-elsif ((@params>=1) || ($cgi->param("q")) || ($cgi->param('multibranchlimit')) || ($cgi->param('limit-yr')) || @searchCategories ) {
+elsif ((@params>=1) || (defined $cgi->param("q") && $cgi->param("q") ne "") || ($cgi->param('multibranchlimit')) || ($cgi->param('limit-yr')) || @searchCategories ) {
$template_name = 'opac-results.tt';
}
else {
my $advanced_search_types = C4::Context->preference("AdvancedSearchTypes") || "itemtypes";
my @advanced_search_types = split(/\|/, $advanced_search_types);
-my $hidingrules = {};
-my $yaml = C4::Context->preference('OpacHiddenItems');
-if ( $yaml =~ /\S/ ) {
- $yaml = "$yaml\n\n"; # YAML expects trailing newline. Surplus does not hurt.
- eval {
- $hidingrules = YAML::XS::Load(Encode::encode_utf8($yaml));
- };
- if ($@) {
- warn "Unable to parse OpacHiddenItems syspref : $@";
- }
-}
+my $hidingrules = C4::Context->yaml_preference('OpacHiddenItems') // {};
my @sorted_itemtypes = sort { $itemtypes->{$a}->{translated_description} cmp $itemtypes->{$b}->{translated_description} } keys %$itemtypes;
foreach my $advanced_srch_type (@advanced_search_types) {
@limits = map { uri_unescape($_) } @limits;
-if($params->{'multibranchlimit'}) {
+if ( $params->{'multibranchlimit'} || ( $branch_group_limit && $branch_group_limit =~ /^multibranchlimit-/ ) ) {
+ my $branchfield = C4::Context->preference('SearchLimitLibrary');
my $search_group = Koha::Library::Groups->find( $params->{multibranchlimit} );
- my @libraries = $search_group->all_libraries;
- my $multibranch = '('.join( " OR ", map { 'homebranch: ' . $_->branchcode } @libraries ) .')';
- push @limits, $multibranch if ($multibranch ne '()');
+
+ my @branchcodes = map { $_->branchcode } $search_group->all_libraries;
+
+ if (@branchcodes) {
+ if ( $branchfield eq "homebranch" ) {
+ push @limits, sprintf "(%s)", join " or ", map { 'homebranch: ' . $_ } @branchcodes;
+ }
+ elsif ( $branchfield eq "holdingbranch" ) {
+ push @limits, sprintf "(%s)", join " or ", map { 'holdingbranch: ' . $_ } @branchcodes;
+ }
+ else {
+ push @limits, sprintf "(%s or %s)",
+ join( " or ", map { 'homebranch: ' . $_ } @branchcodes ),
+ join( " or ", map { 'holdingbranch: ' . $_ } @branchcodes );
+ }
+ }
+}
+
+for ( my $i=0; $i<@limits; $i++ ) {
+ if ( $limits[$i] =~ /^branch:/ ) {
+ my $branchfield = C4::Context->preference('SearchLimitLibrary');
+ if ( $branchfield eq "homebranch" ) {
+ $limits[$i] =~ s/branch/homebranch/;
+ }
+ elsif ( $branchfield eq "holdingbranch" ) {
+ $limits[$i] =~ s/branch/holdingbranch/;
+ }
+ else {
+ my $homebranchlimit = $limits[$i];
+ my $holdingbranchlimit = $limits[$i];
+ $homebranchlimit =~ s/branch/homebranch/;
+ $holdingbranchlimit =~ s/branch/holdingbranch/;
+ $limits[$i] = "($homebranchlimit or $holdingbranchlimit)";
+ }
+ }
}
my $available;
my $taglist = get_tags({term=>$tag, approved=>1});
$results_hashref->{biblioserver}->{hits} = scalar (@$taglist);
my @marclist = map { C4::Biblio::GetXmlBiblio( $_->{biblionumber} ) } @$taglist;
- $DEBUG and printf STDERR "taglist (%s biblionumber)\nmarclist (%s records)\n", scalar(@$taglist), scalar(@marclist);
$results_hashref->{biblioserver}->{RECORDS} = \@marclist;
# FIXME: tag search and standard search should work together, not exclusively
# FIXME: Because search and standard search don't work together OpacHiddenItems
$template->param(searchdesc => 1);
}
$template->param(results_per_page => $results_per_page);
- my $hide = C4::Context->preference('OpacHiddenItems');
- $hide = ($hide =~ m/\S/) if $hide; # Just in case it has some spaces/new lines
+ my $hide = ($hidingrules) ? 1 : 0;
my $branch = '';
if (C4::Context->userenv){
$branch = C4::Context->userenv->{branch};
if ($nohits and $nohits=~/{QUERY_KW}/){
# extracting keywords in case of relaunching search
(my $query_kw=$query_desc)=~s/ and|or / /g;
- my @query_kw=($query_kw=~ /([-\w]+\b)(?:[^,:]|$)/g);
+ my @query_kw=($query_kw=~ /([-\w]+\b)(?:[^:]|$)/g);
$query_kw=join('+',@query_kw);
$nohits=~s/{QUERY_KW}/$query_kw/g;
$template->param('OPACNoResultsFound' =>$nohits);