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

_______________________________________________
Koha-patches mailing list
[email protected]
http://lists.koha-community.org/cgi-bin/mailman/listinfo/koha-patches
website : http://www.koha-community.org/
git : http://git.koha-community.org/
bugs : http://bugs.koha-community.org/

Reply via email to