[Koha-patches] [PATCH] bug_7398: Replaced OPACDisplayRequestPriority syspref with OPACShowHoldQueueDetails

Srdjan srdjan at catalyst.net.nz
Wed May 23 03:06:31 CEST 2012


New syspref is Choice, options being:
- None
- Priority only
- Holds number only
- Holds number and priority

Show holds count on OPAC detail
---
 admin/systempreferences.pl                         |    2 +-
 installer/data/mysql/sysprefs.sql                  |    2 +-
 installer/data/mysql/updatedatabase.pl             |   15 +++++
 .../prog/en/modules/admin/preferences/opac.pref    |   10 ++--
 koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tt |   31 ++++++++++
 .../opac-tmpl/prog/en/modules/opac-reserve.tt      |   34 ++++++-----
 opac/opac-detail.pl                                |   24 ++++++++
 opac/opac-reserve.pl                               |   60 +++++++++++---------
 opac/opac-user.pl                                  |   11 ++--
 9 files changed, 139 insertions(+), 50 deletions(-)

diff --git a/admin/systempreferences.pl b/admin/systempreferences.pl
index 5e3848d..3659791 100755
--- a/admin/systempreferences.pl
+++ b/admin/systempreferences.pl
@@ -348,7 +348,7 @@ $tabsysprefs{OPACViewOthersSuggestions}  = "OPAC";
 $tabsysprefs{URLLinkText}                = "OPAC";
 $tabsysprefs{OPACSearchForTitleIn}       = "OPAC";
 $tabsysprefs{OPACShelfBrowser}           = "OPAC";
-$tabsysprefs{OPACDisplayRequestPriority} = "OPAC";
+$tabsysprefs{OPACShowHoldQueueDetails}   = "OPAC";
 $tabsysprefs{OPACAllowHoldDateInFuture}  = "OPAC";
 $tabsysprefs{OPACPatronDetails}  = "OPAC";
 $tabsysprefs{OPACFinesTab}  = "OPAC";
diff --git a/installer/data/mysql/sysprefs.sql b/installer/data/mysql/sysprefs.sql
index 1edf08e..98e0e76 100644
--- a/installer/data/mysql/sysprefs.sql
+++ b/installer/data/mysql/sysprefs.sql
@@ -233,7 +233,7 @@ INSERT INTO `systempreferences` (variable,value,options,explanation,type) VALUES
 INSERT INTO `systempreferences` (variable,value,options,explanation,type)  VALUES ('CurrencyFormat','US','US|FR','Determines the display format of currencies. eg: \'36000\' is displayed as \'360 000,00\'  in \'FR\' or \'360,000.00\'  in \'US\'.','Choice');
 INSERT INTO `systempreferences` (variable,value,options,explanation,type) VALUES ('AcqCreateItem','ordering','ordering|receiving|cataloguing','Define when the item is created : when ordering, when receiving, or in cataloguing module','Choice');
 INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('AllowRenewalLimitOverride', '0', 'if ON, allows renewal limits to be overridden on the circulation screen',NULL,'YesNo');
-INSERT INTO `systempreferences` (variable,value,options,explanation,type) VALUES ('OPACDisplayRequestPriority','0','','Show patrons the priority level on holds in the OPAC','YesNo');
+INSERT INTO `systempreferences` (variable,value,options,explanation,type) VALUES ('OPACShowHoldQueueDetails','none','none|priority|holds|holds_priority','Show holds details in OPAC','Choice');
 INSERT INTO `systempreferences` ( `variable` , `value` , `options` , `explanation` , `type` ) VALUES ( 'UseBranchTransferLimits', '0', '', 'If ON, Koha will will use the rules defined in branch_transfer_limits to decide if an item transfer should be allowed.', 'YesNo');
 INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('AllowHoldPolicyOverride', '0', 'Allow staff to override hold policies when placing holds',NULL,'YesNo');
 INSERT INTO `systempreferences` ( `variable` , `value` , `options` , `explanation` , `type` ) VALUES ( 'BranchTransferLimitsType', 'ccode', 'itemtype|ccode', 'When using branch transfer limits, choose whether to limit by itemtype or collection code.', 'Choice');
diff --git a/installer/data/mysql/updatedatabase.pl b/installer/data/mysql/updatedatabase.pl
index 38aa70c..d5f1144 100755
--- a/installer/data/mysql/updatedatabase.pl
+++ b/installer/data/mysql/updatedatabase.pl
@@ -5246,6 +5246,21 @@ if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
     SetVersion($DBversion);
 }
 
+
+
+$DBversion = "3.07.00.XXX";
+if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
+    $dbh->do("UPDATE systempreferences SET
+                variable = 'OPACShowHoldQueueDetails',
+                value = CASE value WHEN '1' THEN 'priority' ELSE 'none' END,
+                options = 'none|priority|holds|holds_priority',
+                explanation = 'Show holds details in OPAC',
+                type = 'Choice'
+              WHERE variable = 'OPACDisplayRequestPriority'");
+    print "Upgrade to $DBversion done (Changed system preference OPACDisplayRequestPriority -> OPACShowHoldQueueDetails)\n";
+    SetVersion($DBversion);
+}
+
 =head1 FUNCTIONS
 
 =head2 TableExists($table)
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref
index eb74d81..3bd2441 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref
@@ -79,11 +79,13 @@ OPAC:
                   no: "Don't include"
             - "COinS / OpenURL / Z39.88 in OPAC search results.  <br/>Warning: Enabling this feature will slow OPAC search response times."
         -
-            - pref: OPACDisplayRequestPriority
+            - pref: OPACShowHoldQueueDetails
               choices:
-                  yes: Show
-                  no: "Don't show"
-            - patrons the priority level of their holds in the OPAC.
+                  none: "Don't show any hold details"
+                  priority: "Show priority level"
+                  holds: "Show holds"
+                  holds_priority: "Show holds and their priority level"
+            - to patrons in the OPAC.
         -
             - pref: OPACShowCheckoutName
               default: 0
diff --git a/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tt b/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tt
index cc59fb2..5bbcdb7 100644
--- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tt
+++ b/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tt
@@ -718,6 +718,11 @@ YAHOO.util.Event.onContentReady("furtherm", function () {
             <th id="item_status">Status</th>
             [% IF ( itemdata_itemnotes ) %]<th id="item_notes">Notes</th>[% END %]
             <th id="item_datedue">Date due</th>
+        [% IF holds_count.defined %]
+            <th>Item holds</th>
+        [% ELSIF show_priority %]
+            <th>Item hold queue priority</th>
+        [% END %]
         </tr></thead>
 	    <tbody>[% FOREACH ITEM_RESULT IN ITEM_RESULTS %]
 	    <tr>[% IF ( item_level_itypes ) %]<td>[% UNLESS ( noItemTypeImages ) %][% IF ( ITEM_RESULT.imageurl ) %]<img src="[% ITEM_RESULT.imageurl %]" title="[% ITEM_RESULT.description %]" alt="[% ITEM_RESULT.description %]" />[% END %][% END %] [% ITEM_RESULT.description %]</td>[% END %]
@@ -742,10 +747,36 @@ YAHOO.util.Event.onContentReady("furtherm", function () {
 		<td>[% INCLUDE 'item-status.inc' item = ITEM_RESULT %]</td>
 		[% IF ( itemdata_itemnotes ) %]<td>[% ITEM_RESULT.itemnotes %]</td>[% END %]
 		<td>[% ITEM_RESULT.datedue | $KohaDates %]</td>
+        [% IF holds_count.defined || show_priority %]
+		<td>
+            [% IF holds_count.defined %] [% ITEM_RESULT.holds_count %] [% END %]
+            [% IF ITEM_RESULT.priority %]
+                [% IF holds_count.defined %]
+                (priority [% ITEM_RESULT.priority %])
+                [% ELSE %]
+                [% ITEM_RESULT.priority %]
+                [% END %]
+            [% END %]
+                </td>
+        [% END %]
 	    </tr>
 	    [% END %]</tbody>
 	</table>
     [% END %]
+    [% IF holds_count.defined || priority %]
+	<div id="bib_holds">
+        [% IF holds_count.defined %]
+        Total holds: [% holds_count %]
+        [% END %]
+        [% IF priority %]
+            [% IF holds_count.defined %]
+            (priority [% priority %])
+            [% ELSE %]
+            Overall queue priority: [% priority %]
+            [% END %]
+        [% END %]
+        </div>
+    [% END %]
 [% ELSE %]
     [% IF ( ALTERNATEHOLDINGS ) %]
     [% FOREACH ALTERNATEHOLDING IN ALTERNATEHOLDINGS %]
diff --git a/koha-tmpl/opac-tmpl/prog/en/modules/opac-reserve.tt b/koha-tmpl/opac-tmpl/prog/en/modules/opac-reserve.tt
index a78bc68..2073811 100644
--- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-reserve.tt
+++ b/koha-tmpl/opac-tmpl/prog/en/modules/opac-reserve.tt
@@ -242,7 +242,11 @@
                   [% UNLESS ( item_level_itypes ) %]
                     <th>Item type</th>
                   [% END %]
-                  [% IF ( showpriority ) %]
+                  [% IF showholds && showpriority %]
+                  <th>Holds and priority</th>
+                  [% ELSIF showholds %]
+                  <th>Holds</th>
+                  [% ELSIF showpriority %]
                   <th>Priority</th>
                   [% END %]
 		  [% IF ( reserve_in_future ) %]
@@ -297,19 +301,23 @@
                         [% END %]
 
                     </td>
-                    [% IF ( bibitemloo.holdable ) %][% UNLESS ( item_level_itypes ) %]
-                                          <td>
-                                            [% IF ( bibitemloo.imageurl ) %]<img src="[% bibitemloo.imageurl %]" alt="" />[% END %]
-                                [% bibitemloo.description %]
-                                          </td>
-                                        [% END %][% END %]
                     [% IF ( bibitemloo.holdable ) %]
-                    [% IF ( showpriority ) %]
-                    <td>
-                    [% bibitemloo.rank %] out of [% bibitemloo.reservecount %]
-                    </td>[% END %][% END %]
-		    [% IF ( reserve_in_future ) %]
-		    [% IF ( bibitemloo.holdable ) %]<td>
+		    <!-- HOLDABLE -->
+                        [% UNLESS ( item_level_itypes ) %]
+                        <td>
+                            [% IF ( bibitemloo.imageurl ) %]<img src="[% bibitemloo.imageurl %]" alt="" />[% END %]
+                            [% bibitemloo.description %]
+                        </td>
+                        [% END %]
+                        [% IF showholds || showpriority %]
+                        <td>
+                        [% IF showpriority %] [% bibitemloo.rank %] [% END %]
+                        [% IF showholds && showpriority %] out of [% END %]
+                        [% IF showholds %] [% bibitemloo.reservecount %] [% END %]
+                        </td>
+                        [% END %]
+		        [% IF ( reserve_in_future ) %]
+                        <td>
               <input name="reserve_date_[% bibitemloo.biblionumber %]" id="reserve_date_[% bibitemloo.biblionumber %]" size="10">
               <script language="JavaScript" type="text/javascript">
               //<![CDATA[
diff --git a/opac/opac-detail.pl b/opac/opac-detail.pl
index 4d9879a..24ee74e 100755
--- a/opac/opac-detail.pl
+++ b/opac/opac-detail.pl
@@ -486,10 +486,34 @@ if ($dat->{'count'} >= 50 && !$viewallitems) {
 
 my $biblio_authorised_value_images = C4::Items::get_authorised_value_images( C4::Biblio::get_biblio_authorised_values( $biblionumber, $record ) );
 
+my (%item_reserves, %priority);
+my ($show_holds_count, $show_priority);
+for ( C4::Context->preference("OPACShowHoldQueueDetails") ) {
+    m/holds/o and $show_holds_count = 1;
+    m/priority/ and $show_priority = 1;
+}
+my $has_hold;
+if ( $show_holds_count || $show_priority) {
+    my ($reserve_count,$reserves) = GetReservesFromBiblionumber($biblionumber);
+    $template->param( holds_count  => $reserve_count ) if $show_holds_count;
+    foreach (@$reserves) {
+        $item_reserves{ $_->{itemnumber} }++ if $_->{itemnumber};
+        if ($show_priority && $_->{borrowernumber} == $borrowernumber) {
+            $has_hold = 1;
+            $_->{itemnumber} 
+                ? ($priority{ $_->{itemnumber} } = $_->{priority})
+                : ($template->param( priority => $_->{priority} ));
+        }
+    }
+}
+$template->param( show_priority => $has_hold ) ;
+
 my $norequests = 1;
 my $branches = GetBranches();
 my %itemfields;
 for my $itm (@items) {
+    $itm->{holds_count} = $item_reserves{ $itm->{itemnumber} };
+    $itm->{priority} = $priority{ $itm->{itemnumber} };
     $norequests = 0
        if ( (not $itm->{'wthdrawn'} )
          && (not $itm->{'itemlost'} )
diff --git a/opac/opac-reserve.pl b/opac/opac-reserve.pl
index 4e4d440..3844bc1 100755
--- a/opac/opac-reserve.pl
+++ b/opac/opac-reserve.pl
@@ -47,7 +47,13 @@ my ( $template, $borrowernumber, $cookie ) = get_template_and_user(
         debug           => 1,
     }
 );
-my $OPACDisplayRequestPriority = (C4::Context->preference("OPACDisplayRequestPriority")) ? 1 : 0;
+
+my ($show_holds_count, $show_priority);
+for ( C4::Context->preference("OPACShowHoldQueueDetails") ) {
+    m/holds/o and $show_holds_count = 1;
+    m/priority/ and $show_priority = 1;
+}
+
 sub get_out ($$$) {
 	output_html_with_http_headers(shift,shift,shift); # $query, $cookie, $template->output;
 	exit;
@@ -113,12 +119,8 @@ $template->param( choose_branch => $OPACChooseBranch);
 #
 #
 
-# Hash of biblionumber to biblio/biblioitems record.
-my %biblioDataHash;
-
-# Hash of itemnumber to item info.
-my %itemInfoHash;
-
+my %biblioDataHash; # Hash of biblionumber to biblio/biblioitems record.
+my %itemInfoHash; # Hash of itemnumber to item info.
 foreach my $biblioNumber (@biblionumbers) {
 
     my $biblioData = GetBiblioData($biblioNumber);
@@ -128,33 +130,36 @@ foreach my $biblioNumber (@biblionumbers) {
 
     my $marcrecord= GetMarcBiblio($biblioNumber);
 
-	# flag indicating existence of at least one item linked via a host record
-	my $hostitemsflag;
-	# adding items linked via host biblios
-	my @hostitemInfos = GetHostItemsInfo($marcrecord);
-	if (@hostitemInfos){
-		$hostitemsflag =1;
-	        push (@itemInfos, at hostitemInfos);
-	}
-
-
+    # flag indicating existence of at least one item linked via a host record
+    my $hostitemsflag;
+    # adding items linked via host biblios
+    my @hostitemInfos = GetHostItemsInfo($marcrecord);
+    if (@hostitemInfos){
+        $hostitemsflag =1;
+        push (@itemInfos, at hostitemInfos);
+    }
 
     $biblioData->{itemInfos} = \@itemInfos;
     foreach my $itemInfo (@itemInfos) {
         $itemInfoHash{$itemInfo->{itemnumber}} = $itemInfo;
     }
 
-    # Compute the priority rank.
-    my ( $rank, $reserves ) = GetReservesFromBiblionumber($biblioNumber,1);
-    $biblioData->{reservecount} = $rank;
-    foreach my $res (@$reserves) {
-        my $found = $res->{'found'};
-        if ( $found && ($found eq 'W') ) {
-            $rank--;
+    if ($show_holds_count) {
+        # Compute the priority rank.
+        my ( $rank, $reserves ) = GetReservesFromBiblionumber($biblioNumber,1);
+        $biblioData->{reservecount} = 1; # new reserve
+        foreach my $res (@$reserves) {
+            my $found = $res->{'found'};
+            if ( $found && ($found eq 'W') ) {
+                $rank--;
+            }
+            else {
+                $biblioData->{reservecount}++;
+            }
         }
+        $rank++;
+        $biblioData->{rank} = $rank;
     }
-    $rank++;
-    $biblioData->{rank} = $rank;
 }
 
 #
@@ -528,7 +533,8 @@ $template->param(itemtable_colspan => $itemTableColspan);
 
 # display infos
 $template->param(bibitemloop => $biblioLoop);
-$template->param( showpriority=>1 ) if $OPACDisplayRequestPriority;
+$template->param( showholds=>$show_holds_count);
+$template->param( showpriority=>$show_priority);
 # can set reserve date in future
 if (
     C4::Context->preference( 'AllowHoldDateInFuture' ) &&
diff --git a/opac/opac-user.pl b/opac/opac-user.pl
index a9a6305..aba6877 100755
--- a/opac/opac-user.pl
+++ b/opac/opac-user.pl
@@ -65,7 +65,10 @@ my ( $template, $borrowernumber, $cookie ) = get_template_and_user(
     }
 );
 
-my $OPACDisplayRequestPriority = (C4::Context->preference("OPACDisplayRequestPriority")) ? 1 : 0;
+my $show_priority;
+for ( C4::Context->preference("OPACShowHoldQueueDetails") ) {
+    m/priority/ and $show_priority = 1;
+}
 my $patronupdate = $query->param('patronupdate');
 my $canrenew = 1;
 
@@ -260,8 +263,8 @@ foreach my $res (@reserves) {
     $res->{'branch'} = $branches->{ $res->{'branchcode'} }->{'branchname'};
     my $biblioData = GetBiblioData($res->{'biblionumber'});
     $res->{'reserves_title'} = $biblioData->{'title'};
-    if ($OPACDisplayRequestPriority) {
-        $res->{'priority'} = '' if $res->{'priority'} eq '0';
+    if ($show_priority) {
+        $res->{'priority'} ||= '';
     }
     $res->{'suspend_until'} = C4::Dates->new( $res->{'suspend_until'}, "iso")->output("syspref") if ( $res->{'suspend_until'} );
 }
@@ -271,7 +274,7 @@ foreach my $res (@reserves) {
 
 $template->param( RESERVES       => \@reserves );
 $template->param( reserves_count => $#reserves+1 );
-$template->param( showpriority=>1 ) if $OPACDisplayRequestPriority;
+$template->param( showpriority=>$show_priority );
 
 my @waiting;
 my $wcount = 0;
-- 
1.7.9.5



More information about the Koha-patches mailing list