Bug 17530: Use may_article_request method in opac-search
authorMarcel de Rooy <m.de.rooy@rijksmuseum.nl>
Thu, 1 Mar 2018 14:25:44 +0000 (15:25 +0100)
committerNick Clemens <nick@bywatersolutions.com>
Fri, 7 Sep 2018 13:16:06 +0000 (13:16 +0000)
If you enable pref ArticleRequests, until now all search results got the
'Request article' link. This patch tries to improve the situation by
using the new sub with the itemtype of the search result.

In most cases the number of links will drastically decrease. It may still
be possible sometimes that a link is shown while it effectively is not
possible, but we do not get the performance burden of determining that and
going through all items.

Test plan:
[1] Look for two borrowers P1 and P2 within categories C1 resp. C2.
[2] Look for two biblios B1 and B2 with default item types I1 resp. I2.
    (See 942c in case of MARC21.)
[3] Make sure that no circ rules allow article requests. Enable the pref.
[4] Add/modify circ rule category=C1, itemtype=I1, art_req=yes.
    Log out. Search for B1 and B2, verify that only B1 has AR link.
    Log in as P1. Verify that only B1 has AR link.
    Log in as P2. Verify that no biblio has AR link.
[5] Add/modify circ rule category=C2, itemtype=I2, art_req=item_only.
    Log out. Search for B1 and B2, verify that both have AR links.
    Log in as P1. Verify that only B1 has AR link.
    Log in as P2. Verify that only B2 has AR link.

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: Brendan Gallagher <brendan@bywatersolutions.com>
Signed-off-by: Chris Cormack <chrisc@catalyst.net.nz>
Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-results.tt
opac/opac-search.pl

index 7f6363b..afaa775 100644 (file)
                                                         [% END # IF RequestOnOpac %]
 
                                                         [% IF ( Koha.Preference( 'opacuserlogin' ) == 1 ) %]
-                                                            [% IF Koha.Preference('ArticleRequests') %]
+                                                            [% IF SEARCH_RESULT.artreqpossible %]
                                                                 <span class="actions"><a class="article_request" href="/cgi-bin/koha/opac-request-article.pl?biblionumber=[% SEARCH_RESULT.biblionumber | html %]">Request article</a></span>
                                                             [% END %]
                                                         [% END %]
index fbc0c30..b36aaaf 100755 (executable)
@@ -56,6 +56,7 @@ use Koha::ItemTypes;
 use Koha::Ratings;
 use Koha::Virtualshelves;
 use Koha::Library::Groups;
+use Koha::Patrons;
 
 use POSIX qw(ceil floor strftime);
 use URI::Escape;
@@ -641,6 +642,12 @@ for (my $i=0;$i<@servers;$i++) {
         }
         $hits = 0 unless @newresults;
 
+        my $categorycode; # needed for may_article_request
+        if( $borrowernumber && C4::Context->preference('ArticleRequests') ) {
+            my $patron = Koha::Patrons->find( $borrowernumber );
+            $categorycode = $patron ? $patron->categorycode : undef;
+        }
+
         foreach my $res (@newresults) {
 
             # must define a value for size if not present in DB
@@ -696,6 +703,12 @@ for (my $i=0;$i<@servers;$i++) {
                 $res->{ratings} = $ratings;
                 $res->{my_rating} = $borrowernumber ? $ratings->search({ borrowernumber => $borrowernumber })->next : undef;
             }
+
+            # BZ17530: 'Intelligent' guess if result can be article requested
+            $res->{artreqpossible} = Koha::Biblio->may_article_request({
+                categorycode => $categorycode,
+                itemtype     => $res->{itemtype},
+            });
         }
 
         if ($results_hashref->{$server}->{"hits"}){