From 6de0ced92fa1eb185cdd200179beb2d4d2180af3 Mon Sep 17 00:00:00 2001 From: Srdjan Date: Thu, 26 Mar 2015 19:32:15 +1300 Subject: [PATCH] Bug 5786: Correction: Moved holdability check from opac-search.pl to searchResults() Additional param $borrowernumber for searchResults() when searching in OPAC --- C4/Search.pm | 24 ++++++++++++++++------ .../opac-tmpl/bootstrap/en/modules/opac-results.tt | 2 +- opac/opac-detail.pl | 2 +- opac/opac-search.pl | 21 ++----------------- 4 files changed, 22 insertions(+), 27 deletions(-) diff --git a/C4/Search.pm b/C4/Search.pm index f93dd15..2ddc238 100644 --- a/C4/Search.pm +++ b/C4/Search.pm @@ -25,7 +25,7 @@ use Lingua::Stem; use C4::Search::PazPar2; use XML::Simple; use C4::Dates qw(format_date); -use C4::Members qw(GetHideLostItemsPreference); +use C4::Members qw(GetHideLostItemsPreference GetMember); use C4::XSLT; use C4::Branch; use C4::Reserves; # GetReserveStatus @@ -1833,7 +1833,7 @@ Format results in a form suitable for passing to the template # IMO this subroutine is pretty messy still -- it's responsible for # building the HTML output for the template sub searchResults { - my ( $search_context, $searchdesc, $hits, $results_per_page, $offset, $scan, $marcresults ) = @_; + my ( $search_context, $searchdesc, $hits, $results_per_page, $offset, $scan, $marcresults, $borrowernumber ) = @_; my $dbh = C4::Context->dbh; my @newresults; @@ -1863,6 +1863,12 @@ sub searchResults { # get notforloan authorised value list (see $shelflocations FIXME) my $notforloan_authorised_value = GetAuthValCode('items.notforloan',''); + my $userenv = C4::Context->userenv; + my $hide_lost_items = GetHideLostItemsPreference($userenv->{'number'}); + + # $borrowernumber is passed for opac search + my $borrower = $borrowernumber ? GetMember( borrowernumber => $borrowernumber ) : undef; + #Build itemtype hash #find itemtype & itemtype image my %itemtypes; @@ -2038,13 +2044,15 @@ sub searchResults { my $onloan_count = 0; my $longoverdue_count = 0; my $other_count = 0; - my $withdrawn_count = 0; + my $withdrawn_count = 0; my $itemlost_count = 0; my $hideatopac_count = 0; my $itembinding_count = 0; my $itemdamaged_count = 0; my $item_in_transit_count = 0; my $can_place_holds = 0; + # If no borrower no point checking issuing_rules + my $can_place_item_holds = $borrower ? 0 : 1; my $item_onhold_count = 0; my $notforloan_count = 0; my $items_count = scalar(@fields); @@ -2091,8 +2099,7 @@ sub searchResults { my $prefix = $item->{$hbranch} . '--' . $item->{location} . $item->{itype} . $item->{itemcallnumber}; # For each grouping of items (onloan, available, unavailable), we build a key to store relevant info about that item - my $userenv = C4::Context->userenv; - if ( $item->{onloan} && !(C4::Members::GetHideLostItemsPreference($userenv->{'number'}) && $item->{itemlost}) ) { + if ( $item->{onloan} && !($hide_lost_items && $item->{itemlost}) ) { $onloan_count++; my $key = $prefix . $item->{onloan} . $item->{barcode}; $onloan_items->{$key}->{due_date} = format_date($item->{onloan}); @@ -2203,6 +2210,11 @@ sub searchResults { $available_items->{$prefix}->{imageurl} = getitemtypeimagelocation( $search_context, $itemtypes{ $item->{itype} }->{imageurl} ); } } + # ||= because we only need one + $can_place_item_holds + ||= IsAvailableForItemLevelRequest($item, $borrower) && + OPACItemHoldsAllowed($item, $borrower) + if $can_place_holds && $borrower; } # notforloan, item level and biblioitem level # if all items are hidden, do not show the record @@ -2237,7 +2249,7 @@ sub searchResults { $can_place_holds = 0; } } - $oldbiblio->{norequests} = 1 unless $can_place_holds; + $oldbiblio->{norequests} = !($can_place_holds && $can_place_item_holds); $oldbiblio->{itemsplural} = 1 if $items_count > 1; $oldbiblio->{items_count} = $items_count; $oldbiblio->{available_items_loop} = \@available_items_loop; diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-results.tt b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-results.tt index fd2cb9f..2622b59 100644 --- a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-results.tt +++ b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-results.tt @@ -471,7 +471,7 @@
[% IF Koha.Preference( 'RequestOnOpac' ) == 1 %] [% UNLESS ( SEARCH_RESULT.norequests ) %] - [% IF ( Koha.Preference( 'opacuserlogin' ) == 1 ) && SEARCH_RESULT.holdable %] + [% IF ( Koha.Preference( 'opacuserlogin' ) == 1 ) %] Place hold [% END # / IF opacuserlogin && holdable %] [% END # UNLESS SEARCH_RESULT.norequests %] diff --git a/opac/opac-detail.pl b/opac/opac-detail.pl index c5f9a6f..0ff60b1 100755 --- a/opac/opac-detail.pl +++ b/opac/opac-detail.pl @@ -207,7 +207,7 @@ if ($session->param('busc')) { for (my $i=0;$i<@servers;$i++) { my $server = $servers[$i]; $hits = $results_hashref->{$server}->{"hits"}; - @newresults = searchResults('opac', '', $hits, $results_per_page, $offset, $arrParamsBusc->{'scan'}, $results_hashref->{$server}->{"RECORDS"}); + @newresults = searchResults('opac', '', $hits, $results_per_page, $offset, $arrParamsBusc->{'scan'}, $results_hashref->{$server}->{"RECORDS"}, $borrowernumber); } return \@newresults; }#searchAgain diff --git a/opac/opac-search.pl b/opac/opac-search.pl index cdf0fbb..0327cd9 100755 --- a/opac/opac-search.pl +++ b/opac/opac-search.pl @@ -42,8 +42,6 @@ use C4::Branch; # GetBranches use C4::SocialData; use C4::Ratings; use C4::External::OverDrive; -use C4::Members; -use C4::Reserves; use POSIX qw(ceil floor strftime); use URI::Escape; @@ -569,11 +567,8 @@ if ($@ || $error) { exit; } -my $borrower = $borrowernumber ? GetMember( borrowernumber => $borrowernumber ) : undef; - # At this point, each server has given us a result set # now we build that set for template display -my %allow_onshelf_holds; my @sup_results_array; for (my $i=0;$i<@servers;$i++) { my $server = $servers[$i]; @@ -587,24 +582,12 @@ for (my $i=0;$i<@servers;$i++) { # we want as specified by $offset and $results_per_page, # we need to set the offset parameter of searchResults to 0 my @group_results = searchResults( 'opac', $query_desc, $group->{'group_count'},$results_per_page, 0, $scan, - $group->{"RECORDS"}); - if ($borrower) { - $_->{holdable} = - IsAvailableForItemLevelRequest($_, $borrower) && - OPACItemHoldsAllowed($_, $borrower) - foreach @group_results; - } + $group->{"RECORDS"}, $borrowernumber); push @newresults, { group_label => $group->{'group_label'}, GROUP_RESULTS => \@group_results }; } } else { @newresults = searchResults('opac', $query_desc, $hits, $results_per_page, $offset, $scan, - $results_hashref->{$server}->{"RECORDS"}); - if ($borrower) { - $_->{holdable} = - IsAvailableForItemLevelRequest($_, $borrower) && - OPACItemHoldsAllowed($_, $borrower) - foreach @newresults; - } + $results_hashref->{$server}->{"RECORDS"}, $borrowernumber); } $hits = 0 unless @newresults; -- 1.9.1