@@ -, +, @@ Modules --- C4/Search.pm | 30 ++++++++++++++ .../Elasticsearch/QueryBuilder.pm | 26 +++++++++++++ catalogue/search.pl | 39 ------------------- opac/opac-search.pl | 39 ------------------- 4 files changed, 56 insertions(+), 78 deletions(-) --- a/C4/Search.pm +++ a/C4/Search.pm @@ -1472,6 +1472,36 @@ sub buildQuery { $limit_cgi .= "&limit=" . uri_escape_utf8($this_limit); $limit_desc .= " $this_limit"; } + elsif ( $this_limit =~ 'multibranchlimit|^branch' ) { + $limit_cgi .= "&limit=" . uri_escape_utf8($this_limit); + $limit .= " and " if $limit || $query; + my $branchfield = C4::Context->preference('SearchLimitLibrary'); + my @branchcodes; + if( $this_limit =~ 'multibranchlimit' ){ + my ($group_id) = ( $this_limit =~ /^multibranchlimit:(.*)$/ ); + my $search_group = Koha::Library::Groups->find( $group_id ); + @branchcodes = map { $_->branchcode } $search_group->all_libraries; + @branchcodes = sort { $a cmp $b } @branchcodes; + } else { + @branchcodes = ( $this_limit =~ /^branch:(.*)$/ ); + } + + if (@branchcodes) { + if ( $branchfield eq "homebranch" ) { + $this_limit = sprintf "(%s)", join " or ", map { 'homebranch: ' . $_ } @branchcodes; + } + elsif ( $branchfield eq "holdingbranch" ) { + $this_limit = sprintf "(%s)", join " or ", map { 'holdingbranch: ' . $_ } @branchcodes; + } + else { + $this_limit = sprintf "(%s or %s)", + join( " or ", map { 'homebranch: ' . $_ } @branchcodes ), + join( " or ", map { 'holdingbranch: ' . $_ } @branchcodes ); + } + } + $limit .= "$this_limit"; + $limit_desc .= " $this_limit"; + } # Regular old limits else { --- a/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm +++ a/Koha/SearchEngine/Elasticsearch/QueryBuilder.pm @@ -1011,6 +1011,32 @@ sub _fix_limit_special_cases { $date = $self->_modify_string_by_type(type => 'st-year', operand => $date); push @new_lim, "date-of-publication:$date"; } + elsif ( $l =~ 'multibranchlimit|^branch' ) { + my $branchfield = C4::Context->preference('SearchLimitLibrary'); + my @branchcodes; + if( $l =~ 'multibranchlimit' ) { + my ($group_id) = ( $l =~ /^multibranchlimit:(.*)$/ ); + my $search_group = Koha::Library::Groups->find( $group_id ); + @branchcodes = map { $_->branchcode } $search_group->all_libraries; + @branchcodes = sort { $a cmp $b } @branchcodes; + } else { + @branchcodes = ( $l =~ /^branch:(.*)$/ ); + } + + if (@branchcodes) { + if ( $branchfield eq "homebranch" ) { + push @new_lim, sprintf "(%s)", join " OR ", map { 'homebranch: ' . $_ } @branchcodes; + } + elsif ( $branchfield eq "holdingbranch" ) { + push @new_lim, sprintf "(%s)", join " OR ", map { 'holdingbranch: ' . $_ } @branchcodes; + } + else { + push @new_lim, sprintf "(%s OR %s)", + join( " OR ", map { 'homebranch: ' . $_ } @branchcodes ), + join( " OR ", map { 'holdingbranch: ' . $_ } @branchcodes ); + } + } + } elsif ( $l =~ /^available$/ ) { push @new_lim, 'onloan:false'; } --- a/catalogue/search.pl +++ a/catalogue/search.pl @@ -378,45 +378,6 @@ my @nolimits = map uri_unescape($_), $cgi->multi_param('nolimit'); my %is_nolimit = map { $_ => 1 } @nolimits; @limits = grep { not $is_nolimit{$_} } @limits; -if ( $params->{'multibranchlimit'} ) { - my $branchfield = C4::Context->preference('SearchLimitLibrary'); - my $search_group = Koha::Library::Groups->find( $params->{multibranchlimit} ); - 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; foreach my $limit(@limits) { if ($limit =~/available/) { --- a/opac/opac-search.pl +++ a/opac/opac-search.pl @@ -446,45 +446,6 @@ if (@searchCategories > 0) { @limits = map { uri_unescape($_) } @limits; -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 @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; foreach my $limit(@limits) { --