[Koha-patches] [PATCH] bug_6488: Changed searchResults() interface to take in account OpacHiddenItems when searching in opac
Srdjan Jankovic
srdjan at catalyst.net.nz
Tue Nov 15 07:55:30 CET 2011
Added trailing \n when parsing OpacHiddenItems to make YAML happy
Removed numbering from the OPAC search results, looks wrong with hidden
items
---
C4/Items.pm | 52 +++++++++++---------
C4/Search.pm | 31 ++++++++----
catalogue/search.pl | 2 +-
cataloguing/addbooks.pl | 2 +-
.../opac-tmpl/prog/en/modules/opac-results.tt | 1 -
opac/opac-search.pl | 4 +-
6 files changed, 52 insertions(+), 40 deletions(-)
diff --git a/C4/Items.pm b/C4/Items.pm
index 0b91b65..98c4a57 100644
--- a/C4/Items.pm
+++ b/C4/Items.pm
@@ -1629,41 +1629,45 @@ sub GetHiddenItemnumbers {
my @resultitems;
my $yaml = C4::Context->preference('OpacHiddenItems');
+ $yaml = "$yaml\n"; # YAML is anal on ending \n. Surplus does not hurt
my $hidingrules;
eval {
- $hidingrules = YAML::Load($yaml);
+ $hidingrules = YAML::Load($yaml);
};
if ($@) {
- warn "Unable to parse OpacHiddenItems syspref : $@";
- return ();
- } else {
+ warn "Unable to parse OpacHiddenItems syspref : $@";
+ return ();
+ }
my $dbh = C4::Context->dbh;
- # For each item
- foreach my $item (@items) {
+ # For each item
+ foreach my $item (@items) {
- # We check each rule
- foreach my $field (keys %$hidingrules) {
- my $query = "SELECT $field from items where itemnumber = ?";
- my $sth = $dbh->prepare($query);
- $sth->execute($item->{'itemnumber'});
- my ($result) = $sth->fetchrow;
+ # We check each rule
+ foreach my $field (keys %$hidingrules) {
+ my $val;
+ if (exists $item->{$field}) {
+ $val = $item->{$field};
+ }
+ else {
+ my $query = "SELECT $field from items where itemnumber = ?";
+ $val = $dbh->selectrow_array($query, undef, $item->{'itemnumber'});
+ }
+ $val = '' unless defined $val;
- # If the results matches the values in the yaml file
- if (any { $result eq $_ } @{$hidingrules->{$field}}) {
+ # If the results matches the values in the yaml file
+ if (any { $val eq $_ } @{$hidingrules->{$field}}) {
- # We add the itemnumber to the list
- push @resultitems, $item->{'itemnumber'};
+ # We add the itemnumber to the list
+ push @resultitems, $item->{'itemnumber'};
- # If at least one rule matched for an item, no need to test the others
- last;
- }
- }
- }
- return @resultitems;
+ # If at least one rule matched for an item, no need to test the others
+ last;
+ }
+ }
}
-
- }
+ return @resultitems;
+}
=head3 get_item_authorised_values
diff --git a/C4/Search.pm b/C4/Search.pm
index 98db887..45d4b76 100644
--- a/C4/Search.pm
+++ b/C4/Search.pm
@@ -1413,11 +1413,16 @@ 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, $hidelostitems ) = @_;
+ my ( $search_context, $searchdesc, $hits, $results_per_page, $offset, $scan, $marcresults ) = @_;
my $dbh = C4::Context->dbh;
my @newresults;
- $search_context = 'opac' unless $search_context eq 'opac' or $search_context eq 'intranet';
+ $search_context = 'opac' if !$search_context || $search_context ne 'intranet';
+ my ($is_opac, $hidelostitems);
+ if ($search_context eq 'opac') {
+ $hidelostitems = C4::Context->preference('hidelostitems');
+ $is_opac = 1;
+ }
#Build branchnames hash
#find branchname
@@ -1484,7 +1489,7 @@ sub searchResults {
# loop through all of the records we've retrieved
for ( my $i = $offset ; $i <= $times - 1 ; $i++ ) {
- my $marcrecord = MARC::File::USMARC::decode( $marcresults[$i] );
+ my $marcrecord = MARC::File::USMARC::decode( $marcresults->[$i] );
$fw = $scan
? undef
: $bibliotag < 10
@@ -1603,11 +1608,12 @@ sub searchResults {
my $other_count = 0;
my $wthdrawn_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;
- my $item_onhold_count = 0;
+ my $item_onhold_count = 0;
my $items_count = scalar(@fields);
my $maxitems =
( C4::Context->preference('maxItemsinSearchResults') )
@@ -1624,9 +1630,10 @@ sub searchResults {
}
# Hidden items
- my @items = ($item);
- my (@hiddenitems) = GetHiddenItemnumbers(@items);
- $item->{'hideatopac'} = 1 if (@hiddenitems);
+ if ($is_opac) {
+ my @hiddenitems = GetHiddenItemnumbers($item);
+ $item->{'hideatopac'} = @hiddenitems;
+ }
my $hbranch = C4::Context->preference('HomeOrHoldingBranch') eq 'homebranch' ? 'homebranch' : 'holdingbranch';
my $otherbranch = C4::Context->preference('HomeOrHoldingBranch') eq 'homebranch' ? 'holdingbranch' : 'homebranch';
@@ -1710,6 +1717,7 @@ sub searchResults {
$wthdrawn_count++ if $item->{wthdrawn};
$itemlost_count++ if $item->{itemlost};
$itemdamaged_count++ if $item->{damaged};
+ $hideatopac_count++ if $item->{hideatopac};
$item_in_transit_count++ if $transfertwhen ne '';
$item_onhold_count++ if $reservestatus eq 'Waiting';
$item->{status} = $item->{wthdrawn} . "-" . $item->{itemlost} . "-" . $item->{damaged} . "-" . $item->{notforloan};
@@ -1748,6 +1756,10 @@ sub searchResults {
}
}
} # notforloan, item level and biblioitem level
+
+ next if $is_opac && $hideatopac_count >= $items_count;
+ next if $hidelostitems && $itemlost_count >= $items_count;
+
my ( $availableitemscount, $onloanitemscount, $otheritemscount );
$maxitems =
( C4::Context->preference('maxItemsinSearchResults') )
@@ -1834,10 +1846,7 @@ sub searchResults {
$oldbiblio->{'alternateholdings_count'} = $alternateholdingscount;
}
- push( @newresults, $oldbiblio )
- if(not $hidelostitems
- or (($items_count > $itemlost_count )
- && $hidelostitems));
+ push( @newresults, $oldbiblio );
}
return @newresults;
diff --git a/catalogue/search.pl b/catalogue/search.pl
index 907efdb..24f2978 100755
--- a/catalogue/search.pl
+++ b/catalogue/search.pl
@@ -547,7 +547,7 @@ for (my $i=0;$i<@servers;$i++) {
$hits = $results_hashref->{$server}->{"hits"};
my $page = $cgi->param('page') || 0;
my @newresults = searchResults('intranet', $query_desc, $hits, $results_per_page, $offset, $scan,
- @{$results_hashref->{$server}->{"RECORDS"}});
+ $results_hashref->{$server}->{"RECORDS"});
$total = $total + $results_hashref->{$server}->{"hits"};
## If there's just one result, redirect to the detail page
if ($total == 1) {
diff --git a/cataloguing/addbooks.pl b/cataloguing/addbooks.pl
index 5e89ef8..38e8024 100755
--- a/cataloguing/addbooks.pl
+++ b/cataloguing/addbooks.pl
@@ -86,7 +86,7 @@ if ($query) {
# format output
# SimpleSearch() give the results per page we want, so 0 offet here
my $total = @{$marcresults};
- my @newresults = searchResults( 'intranet', $query, $total, $results_per_page, 0, 0, @{$marcresults} );
+ my @newresults = searchResults( 'intranet', $query, $total, $results_per_page, 0, 0, $marcresults );
$template->param(
total => $total_hits,
query => $query,
diff --git a/koha-tmpl/opac-tmpl/prog/en/modules/opac-results.tt b/koha-tmpl/opac-tmpl/prog/en/modules/opac-results.tt
index b7fbcb3..e0321d2 100755
--- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-results.tt
+++ b/koha-tmpl/opac-tmpl/prog/en/modules/opac-results.tt
@@ -380,7 +380,6 @@ $(document).ready(function(){
<td class="select selectcol">[% IF ( opacbookbag ) %]<input type="checkbox" id="bib[% SEARCH_RESULT.biblionumber %]" name="biblionumber" value="[% SEARCH_RESULT.biblionumber %]" /> <label for="bib[% SEARCH_RESULT.biblionumber %]"></label>[% ELSE %]
[% IF ( virtualshelves ) %]<input type="checkbox" id="bib[% SEARCH_RESULT.biblionumber %]" name="biblionumber" value="[% SEARCH_RESULT.biblionumber %]" /> <label for="bib[% SEARCH_RESULT.biblionumber %]"></label>[% ELSE %]
[% IF ( RequestOnOpac ) %][% UNLESS ( SEARCH_RESULT.norequests ) %][% IF ( opacuserlogin ) %]<input type="checkbox" id="bib[% SEARCH_RESULT.biblionumber %]" name="biblionumber" value="[% SEARCH_RESULT.biblionumber %]" /> <label for="bib[% SEARCH_RESULT.biblionumber %]"></label>[% END %][% END %][% END %][% END %][% END %]</td>
- <td class="select selectcol">[% SEARCH_RESULT.result_number %].</td>
[% UNLESS ( item_level_itypes ) %]
[% UNLESS ( noItemTypeImages ) %]
diff --git a/opac/opac-search.pl b/opac/opac-search.pl
index 716b164..7049f5c 100755
--- a/opac/opac-search.pl
+++ b/opac/opac-search.pl
@@ -487,12 +487,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"} }, C4::Context->preference('hidelostitems'));
+ $group->{"RECORDS"});
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"}},, C4::Context->preference('hidelostitems'));
+ $results_hashref->{$server}->{"RECORDS"});
}
my $tag_quantity;
if (C4::Context->preference('TagsEnabled') and
--
1.6.5
More information about the Koha-patches
mailing list