[Koha-patches] [PATCH] Bug fix to OPAC shelf browsing query statement

David Birmingham dbirmingham at ptfs.com
Thu Apr 30 18:54:48 CEST 2009


If the items.location field was NULL, then the current
SQL query would produce no results.  I have turned this
into a conditional block that removes the location condition
in the query if the location is not specified.

In addition, there was a small change to opac-detail.tmpl
that changed Library to Shelves when the shelf browser was
open.  This removes a potential redundant Library Library
display if Library is contained in the starting_homebranch.
---
 .../opac-tmpl/prog/en/modules/opac-detail.tmpl     |    2 +-
 opac/opac-detail.pl                                |   34 +++++++++++++++++--
 2 files changed, 31 insertions(+), 5 deletions(-)

diff --git a/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tmpl b/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tmpl
index c4123e8..ab99bea 100644
--- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tmpl
+++ b/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tmpl
@@ -358,7 +358,7 @@
 
 <!-- TMPL_IF NAME="OpenOPACShelfBrowser" -->
 <div id="shelfbrowser">
-<h5 style="text-align: center;"><!-- TMPL_IF NAME="starting_homebranch" -->Browsing <!-- TMPL_VAR NAME="starting_homebranch" --> Library<!-- /TMPL_IF --><!-- TMPL_IF NAME="starting_location" -->, Shelving Location:</span><!-- TMPL_VAR NAME="starting_location" --> <!-- /TMPL_IF --> <a style="font-size: 75%;" href="/cgi-bin/koha/opac-detail.pl?biblionumber=<!-- TMPL_VAR NAME="biblionumber" -->">Close Shelf Browser</a></h5>
+<h5 style="text-align: center;"><!-- TMPL_IF NAME="starting_homebranch" -->Browsing <!-- TMPL_VAR NAME="starting_homebranch" --> Shelves<!-- /TMPL_IF --><!-- TMPL_IF NAME="starting_location" -->, Shelving Location:</span><!-- TMPL_VAR NAME="starting_location" --> <!-- /TMPL_IF --> <a style="font-size: 75%;" href="/cgi-bin/koha/opac-detail.pl?biblionumber=<!-- TMPL_VAR NAME="biblionumber" -->">Close Shelf Browser</a></h5>
 
         
         <table><tr>
diff --git a/opac/opac-detail.pl b/opac/opac-detail.pl
index f98f30e..e8b31fd 100755
--- a/opac/opac-detail.pl
+++ b/opac/opac-detail.pl
@@ -419,7 +419,9 @@ if (C4::Context->preference("OPACShelfBrowser")) {
     ## List of Previous Items
     # order by cn_sort, which should include everything we need for ordering purposes (though not
     # for limits, those need to be handled separately
-    my $sth_shelfbrowse_previous = $dbh->prepare("
+    my $sth_shelfbrowse_previous;
+    if (defined $starting_location->{code}) {
+      $sth_shelfbrowse_previous = $dbh->prepare("
         SELECT *
         FROM items
         WHERE
@@ -427,7 +429,18 @@ if (C4::Context->preference("OPACShelfBrowser")) {
             homebranch = ? AND location = ?
         ORDER BY cn_sort DESC, itemnumber LIMIT 3
         ");
-    $sth_shelfbrowse_previous->execute($starting_cn_sort, $starting_itemnumber, $starting_cn_sort, $starting_homebranch->{code}, $starting_location->{code});
+      $sth_shelfbrowse_previous->execute($starting_cn_sort, $starting_itemnumber, $starting_cn_sort, $starting_homebranch->{code}, $starting_location->{code});
+    } else {
+      $sth_shelfbrowse_previous = $dbh->prepare("
+        SELECT *
+        FROM items
+        WHERE
+            ((cn_sort = ? AND itemnumber < ?) OR cn_sort < ?) AND
+            homebranch = ?
+        ORDER BY cn_sort DESC, itemnumber LIMIT 3
+        ");
+      $sth_shelfbrowse_previous->execute($starting_cn_sort, $starting_itemnumber, $starting_cn_sort, $starting_homebranch->{code});
+    }
     my @previous_items;
     while (my $this_item = $sth_shelfbrowse_previous->fetchrow_hashref()) {
         my $sth_get_biblio = $dbh->prepare("SELECT biblio.*,biblioitems.isbn AS isbn FROM biblio LEFT JOIN biblioitems ON biblio.biblionumber=biblioitems.biblionumber WHERE biblio.biblionumber=?");
@@ -443,7 +456,9 @@ if (C4::Context->preference("OPACShelfBrowser")) {
     }
     
     ## List of Next Items; this also intentionally catches the current item
-    my $sth_shelfbrowse_next = $dbh->prepare("
+    my $sth_shelfbrowse_next;
+    if (defined $starting_location->{code}) {
+      $sth_shelfbrowse_next = $dbh->prepare("
         SELECT *
         FROM items
         WHERE
@@ -451,7 +466,18 @@ if (C4::Context->preference("OPACShelfBrowser")) {
             homebranch = ? AND location = ?
         ORDER BY cn_sort, itemnumber LIMIT 3
         ");
-    $sth_shelfbrowse_next->execute($starting_cn_sort, $starting_itemnumber, $starting_cn_sort, $starting_homebranch->{code}, $starting_location->{code});
+      $sth_shelfbrowse_next->execute($starting_cn_sort, $starting_itemnumber, $starting_cn_sort, $starting_homebranch->{code}, $starting_location->{code});
+    } else {
+      $sth_shelfbrowse_next = $dbh->prepare("
+        SELECT *
+        FROM items
+        WHERE
+            ((cn_sort = ? AND itemnumber >= ?) OR cn_sort > ?) AND
+            homebranch = ?
+        ORDER BY cn_sort, itemnumber LIMIT 3
+        ");
+      $sth_shelfbrowse_next->execute($starting_cn_sort, $starting_itemnumber, $starting_cn_sort, $starting_homebranch->{code});
+    }
     my @next_items;
     while (my $this_item = $sth_shelfbrowse_next->fetchrow_hashref()) {
         my $sth_get_biblio = $dbh->prepare("SELECT biblio.*,biblioitems.isbn AS isbn FROM biblio LEFT JOIN biblioitems ON biblio.biblionumber=biblioitems.biblionumber WHERE biblio.biblionumber=?");
-- 
1.5.6.5




More information about the Koha-patches mailing list