Bugzilla – Attachment 7284 Details for
Bug 6488
opachiddenitems not working in master
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
patch
0001-bug_6488-Take-in-account-opachiddenitems-when-search.patch (text/plain), 16.00 KB, created by
Srdjan Jankovic
on 2012-01-23 04:07:47 UTC
(
hide
)
Description:
patch
Filename:
MIME Type:
Creator:
Srdjan Jankovic
Created:
2012-01-23 04:07:47 UTC
Size:
16.00 KB
patch
obsolete
>From 429c6a3ecf13f92a0640dca3e40d801f737dbbcf Mon Sep 17 00:00:00 2001 >From: Srdjan Jankovic <srdjan@catalyst.net.nz> >Date: Mon, 23 Jan 2012 17:04:02 +1300 >Subject: [PATCH] bug_6488: Take in account opachiddenitems when searching in opac > >Changed searchResults() interface >Added trailing \n when parsing OpacHiddenItems to make YAML happy >XSLTParse4Display() and buildKohaItemsNamespace() take hidden >items as input param >Removed numbering from the search results, looks wrong with >hidden items >--- > C4/Items.pm | 52 +++++++------ > C4/Search.pm | 83 +++++++++++--------- > C4/XSLT.pm | 11 ++- > catalogue/search.pl | 2 +- > cataloguing/addbooks.pl | 2 +- > .../opac-tmpl/prog/en/modules/opac-results.tt | 1 - > opac/opac-search.pl | 4 +- > 7 files changed, 86 insertions(+), 69 deletions(-) > >diff --git a/C4/Items.pm b/C4/Items.pm >index 72fdf8e..31960e0 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 4a8de5c..7e34a52 100644 >--- a/C4/Search.pm >+++ b/C4/Search.pm >@@ -31,6 +31,7 @@ use C4::Branch; > use C4::Reserves; # CheckReserves > use C4::Debug; > use C4::Items; >+use C4::Charset; > use YAML; > use URI::Escape; > >@@ -1413,11 +1414,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 >@@ -1480,12 +1486,11 @@ sub searchResults { > my $marcflavour = C4::Context->preference("marcflavour"); > # We get the biblionumber position in MARC > my ($bibliotag,$bibliosubf)=GetMarcFromKohaField('biblio.biblionumber',''); >- my $fw; > > # 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] ); >- $fw = $scan >+ my $marcrecord = MARC::File::USMARC::decode( $marcresults->[$i] ); >+ my $fw = $scan > ? undef > : $bibliotag < 10 > ? GetFrameworkCode($marcrecord->field($bibliotag)->data) >@@ -1603,18 +1608,18 @@ 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') ) >- ? C4::Context->preference('maxItemsinSearchResults') - 1 >- : 1; >+ my $maxitems_pref = C4::Context->preference('maxItemsinSearchResults'); >+ my $maxitems = $maxitems_pref ? $maxitems_pref - 1 : 1; > > # loop through every item >+ my @hiddenitems; > foreach my $field (@fields) { > my $item; > >@@ -1624,9 +1629,11 @@ sub searchResults { > } > > # Hidden items >- my @items = ($item); >- my (@hiddenitems) = GetHiddenItemnumbers(@items); >- $item->{'hideatopac'} = 1 if (@hiddenitems); >+ if ($is_opac) { >+ my @hi = GetHiddenItemnumbers($item); >+ $item->{'hideatopac'} = @hi; >+ push @hiddenitems, @hi; >+ } > > 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,11 +1756,11 @@ 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') ) >- ? C4::Context->preference('maxItemsinSearchResults') - 1 >- : 1; > for my $key ( sort keys %$onloan_items ) { > (++$onloanitemscount > $maxitems) and last; > push @onloan_items_loop, $onloan_items->{$key}; >@@ -1766,20 +1774,7 @@ sub searchResults { > push @available_items_loop, $available_items->{$key} > } > >- # XSLT processing of some stuff >- use C4::Charset; >- SetUTF8Flag($marcrecord); >- $debug && warn $marcrecord->as_formatted; >- if (!$scan && $search_context eq 'opac' && C4::Context->preference("OPACXSLTResultsDisplay")) { >- # FIXME note that XSLTResultsDisplay (use of XSLT to format staff interface bib search results) >- # is not implemented yet >- $oldbiblio->{XSLTResultsRecord} = XSLTParse4Display($oldbiblio->{biblionumber}, $marcrecord, 'Results', >- $search_context, 1); >- # the last parameter tells Koha to clean up the problematic ampersand entities that Zebra outputs >- >- } >- >- # if biblio level itypes are used and itemtype is notforloan, it can't be reserved either >+ # if biblio level itypes are used and itemtype is notforloan, it can't be reserved either > if (!C4::Context->preference("item-level_itypes")) { > if ($itemtypes{ $oldbiblio->{itemtype} }->{notforloan}) { > $can_place_holds = 0; >@@ -1803,8 +1798,8 @@ sub searchResults { > $oldbiblio->{intransitcount} = $item_in_transit_count; > $oldbiblio->{onholdcount} = $item_onhold_count; > $oldbiblio->{orderedcount} = $ordered_count; >- $oldbiblio->{isbn} =~ >- s/-//g; # deleting - in isbn to enable amazon content >+ # deleting - in isbn to enable amazon content >+ $oldbiblio->{isbn} =~ s/-//g; > > if (C4::Context->preference("AlternateHoldingsField") && $items_count == 0) { > my $fieldspec = C4::Context->preference("AlternateHoldingsField"); >@@ -1834,10 +1829,24 @@ sub searchResults { > $oldbiblio->{'alternateholdings_count'} = $alternateholdingscount; > } > >- push( @newresults, $oldbiblio ) >- if(not $hidelostitems >- or (($items_count > $itemlost_count ) >- && $hidelostitems)); >+ # XSLT processing of some stuff >+ if (!$scan && $search_context eq 'opac' && C4::Context->preference("OPACXSLTResultsDisplay")) { >+ SetUTF8Flag($marcrecord); >+ $debug && warn $marcrecord->as_formatted; >+ # FIXME note that XSLTResultsDisplay (use of XSLT to format staff interface bib search results) >+ # is not implemented yet >+ $oldbiblio->{XSLTResultsRecord} >+ = XSLTParse4Display($oldbiblio->{biblionumber}, >+ $marcrecord, >+ 'Results', >+ $search_context, >+ 1, # clean up the problematic ampersand entities that Zebra outputs >+ \@hiddenitems >+ ); >+ >+ } >+ >+ push( @newresults, $oldbiblio ); > } > > return @newresults; >diff --git a/C4/XSLT.pm b/C4/XSLT.pm >index d22a3ac..06dfaf4 100755 >--- a/C4/XSLT.pm >+++ b/C4/XSLT.pm >@@ -121,12 +121,12 @@ sub getAuthorisedValues4MARCSubfields { > my $stylesheet; > > sub XSLTParse4Display { >- my ( $biblionumber, $orig_record, $xsl_suffix, $interface, $fixamps ) = @_; >+ my ( $biblionumber, $orig_record, $xsl_suffix, $interface, $fixamps, $hidden_items ) = @_; > $interface = 'opac' unless $interface; > # grab the XML, run it through our stylesheet, push it out to the browser > my $record = transformMARCXML4XSLT($biblionumber, $orig_record); > #return $record->as_formatted(); >- my $itemsxml = buildKohaItemsNamespace($biblionumber); >+ my $itemsxml = buildKohaItemsNamespace($biblionumber, $hidden_items); > my $xmlrecord = $record->as_xml(C4::Context->preference('marcflavour')); > my $sysxml = "<sysprefs>\n"; > foreach my $syspref ( qw/ hidelostitems OPACURLOpenInNewWindow >@@ -180,8 +180,13 @@ sub XSLTParse4Display { > } > > sub buildKohaItemsNamespace { >- my ($biblionumber) = @_; >+ my ($biblionumber, $hidden_items) = @_; >+ > my @items = C4::Items::GetItemsInfo($biblionumber); >+ if ($hidden_items && @$hidden_items) { >+ my %hi = map {$_ => 1} @$hidden_items; >+ @items = grep { !$hi{$_->{itemnumber}} } @items; >+ } > my $branches = GetBranches(); > my $itemtypes = GetItemTypes(); > my $xml = ''; >diff --git a/catalogue/search.pl b/catalogue/search.pl >index 96163d6..49e63bc 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 270b16d..b768a29 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 ); > foreach my $line (@newresults) { > if ( not exists $line->{'size'} ) { $line->{'size'} = "" } > } >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 e7c6e2d..2071845 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 12baf3b..5a9ee45 100755 >--- a/opac/opac-search.pl >+++ b/opac/opac-search.pl >@@ -485,12 +485,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"}); > } > > # must define a value for size if not present in DB >-- >1.6.5 >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 6488
:
5312
|
5314
|
5315
|
5351
|
5477
|
5767
|
6310
|
6687
|
6783
|
7284
|
7386
|
7745
|
7748
|
7957
|
8045
|
8054