From c8f38bfb3db03e051fe21da563cfa630c8436ca4 Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Mon, 26 Mar 2012 21:34:34 +1300 Subject: [PATCH] Bug 7825: Changed OPACItemHolds syspref to be no|yes|force choice Currently, the Koha system preference OPACItemHolds allows a library system to choose to allow patrons to place bib and item level holds from the OPAC, or to allow patrons only to place bib level holds only from the OPAC. This patch set adds a third option, "force", which *requires* that patrons place item level holds from the opac, with no option of making a bib level hold. This patch modifies the system preference OPACItemHolds to be of the type "Choice", with the choices being "no", "yes", "force". The patch does not alter the currently set value of OPACItemHolds for database updates, only adding the additional option. Test Plan: 1) Set OPACItemHolds to "no". Check that OPAC holds behave as it is now (no "Place On" column, no "Select a specific copy" table, making a reserve is successful) 2) Set OPACItemHolds to "yes". Check that OPAC holds behave as it is now ( "Place On" column is there, "Select a specific copy" table shows when "A specific copy" is selected, making a reserve is successful) 3) Set OPACItemHolds to "force". Check that OPAC holds behave as follows: - no "Place On" column is present - "Select a specific copy" table is opened - making a reserve is successful This patch is a squashed patch of the 3 following patches: Amended opac-reserve.tt accordingly Signed-off-by: Delaye Stephane Bug 7825: Followup prevent submission without choosing an item + Fix some ergonomic issues in opac-reserve Signed-off-by: Delaye Stephane Bug 7825: Updatedatabase should only change the type and options values. The value field should not be changed. We have to keep '1' for 'yes' and '' for 'no'. Original patch is from Srdjan Jankovic. Signed-off-by: Koha team AMU Signed-off-by: Katrin Fischer Testing notes on 4th patch. Signed-off-by: Galen Charlton --- installer/data/mysql/sysprefs.sql | 2 +- installer/data/mysql/updatedatabase.pl | 8 + .../en/modules/admin/preferences/opac.pref | 5 +- .../opac-tmpl/prog/en/modules/opac-reserve.tt | 188 ++++++++++-------- 4 files changed, 121 insertions(+), 82 deletions(-) diff --git a/installer/data/mysql/sysprefs.sql b/installer/data/mysql/sysprefs.sql index c0961613c0..3c01fb2da7 100644 --- a/installer/data/mysql/sysprefs.sql +++ b/installer/data/mysql/sysprefs.sql @@ -238,7 +238,7 @@ INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, ` ('OpacHiddenItems','','','This syspref allows to define custom rules for hiding specific items at opac. See docs/opac/OpacHiddenItems.txt for more informations.','Textarea'), ('OpacHighlightedWords','1','','If Set, then queried words are higlighted in OPAC','YesNo'), ('OpacHoldNotes','0','','Show hold notes on OPAC','YesNo'), -('OPACItemHolds','1','','Allow OPAC users to place hold on specific items. If OFF, users can only request next available copy.','YesNo'), +('OPACItemHolds','yes','no|yes|force','Allow OPAC users to place hold on specific items. If No, users can only request next available copy. If Yes, users can choose between next available and specific copy. If Force, users *must* choose a specific copy.','Choice'), ('OpacItemLocation','callnum','callnum|ccode|location','Show the shelving location of items in the opac','Choice'), ('OPACItemsResultsDisplay','0','','If OFF : show only the status of items in result list.If ON : show full location of items (branch+location+callnumber) as in staff interface','YesNo'), ('OpacKohaUrl','1',NULL,'Show \'Powered by Koha\' text on OPAC footer.',NULL), diff --git a/installer/data/mysql/updatedatabase.pl b/installer/data/mysql/updatedatabase.pl index 8fe67c5b0f..3b9dba9d97 100755 --- a/installer/data/mysql/updatedatabase.pl +++ b/installer/data/mysql/updatedatabase.pl @@ -8512,6 +8512,14 @@ CREATE TABLE IF NOT EXISTS `misc_files` ( SetVersion($DBversion); } +$DBversion = "3.13.00.XXX"; +if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) { + $dbh->do("UPDATE systempreferences SET type = 'Choice', options = 'no|yes|force' WHERE variable = 'OPACItemHolds'"); + print "Upgrade to $DBversion done (Changed OPACItemHolds syspref to Choice)\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 428f569ce1..0c2aa58364 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 @@ -474,9 +474,10 @@ OPAC: - - pref: OPACItemHolds choices: - yes: Allow no: "Don't allow" - - patrons to place holds on specific items in the OPAC. If this is disabled, users can only put a hold on the next available item. + yes: Allow + force: Force + - patrons to place holds on specific items in the OPAC. If this is disabled, users can only put a hold on the next available item. If this is forced, users must put a hold on a specific item. - - pref: OpacRenewalAllowed choices: 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 3774c068e7..80d04582c1 100644 --- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-reserve.tt +++ b/koha-tmpl/opac-tmpl/prog/en/modules/opac-reserve.tt @@ -20,19 +20,36 @@ return s.substring(index + 1); } +// Select the first item available +function select_first_available(id){ + var radios = $("input:radio[name='checkitem_" + id + "']"); + $(radios).first().attr("checked", "checked"); +} + $(document).ready(function() { $('#hold-request-form').preventDoubleFormSubmit(); var copiesRowId = null; var wasSpecific = false; var lastCopiesRowId = null; - $(".checkitem").parent().click(function(e){ - if(e.target.tagName.toLowerCase() == 'td'){ + $(".checkitem").parent().click(function(e){ + if(e.target.tagName.toLowerCase() == 'td'){ $(this).find("input.checkitem").each( function() { - $(this).attr('checked', !$(this).attr('checked')); - }); - } - }); + $(this).attr('checked', 'checked'); + }); + } + }); + + // click on a first td check the confirmjs checkbox + $("td.hold").click(function(e){ + if(e.target.tagName.toLowerCase() == 'td'){ + $(this).find("input.confirmjs").each( function() { + $(this).attr('checked', !$(this).attr('checked')); + $(this).change(); + }); + } + }); + // Hides all 'specific copy' table rows on load. $(".copiesrow").hide(); @@ -45,7 +62,7 @@ } }); - $("#place_on_hdr,.place_on_type,.toggle-hold-options").show(); + $(".toggle-hold-options").show(); $(".hold-options").hide(); $(".holddatefrom,.holddateto").prop("readOnly", true); @@ -69,65 +86,73 @@ $(".confirmjs_hold").each(function(){ var bib = $(this).attr("title"); var html = " "; + html += "value=\"" + bib + "\" id=\"" + bib + "\" /> " + _("Place a hold on") + " "; $(this).html(html); }); $(".confirmjs_nohold").each(function(){ var bib = $(this).attr("title"); var html = ""; + html += "value=\"" + bib + "\" id=\"" + bib + "\" />" + _("Place a hold on: ") + ""; $(this).html(html); }); - // Make sure a specific item was selected where specified - // before moving on to a new item. - function changeSelection (newCopiesRowId, isSpecific) { - if (copiesRowId && ((copiesRowId != newCopiesRowId) || (wasSpecific != isSpecific))) { - var biblioNum = suffixOf(copiesRowId, "_"); - - // If the 'specific copy' radio button was checked - if (wasSpecific && (copiesRowId != newCopiesRowId)) { - // Find the selected copy - var item = $(".checkitem_" + biblioNum + ":checked"); - if ($(item).size() == 0) { - alert(MSG_NO_ITEM_SELECTED); - return false; - } - } - } - copiesRowId = newCopiesRowId; - wasSpecific = isSpecific; - return true; - } - - // When 'specific copy' radio button is clicked - $(".selectspecific").click(function() { - - // Make sure all other specific copy table rows are hidden - biblioNum = suffixOf($(this).attr("id"), "_"); + // expand or collapse the copiesrow tr + function toggle_copiesrow(biblioNum) { + var checkbox = $("input:checkbox[value='"+biblioNum+"']"); newCopiesRowId = "#copiesrow_" + biblioNum; + var select_specific = $("#reqspecific_"+biblioNum).is(":checked"); - if (!changeSelection(newCopiesRowId, true)) { - return false; + // If the checkbox is checked AND we want a specific item, we display the items block + if ( $(checkbox).is(":checked") && select_specific ) { + $(newCopiesRowId).show(); + } else { + $(newCopiesRowId).hide(); } + }; - // Show the specific copy table for this radio button. - $(newCopiesRowId).show(); - }); + $("#place_on_hdr").show(); + [% IF OPACItemHolds == '1' %] + $(".place_on_type").show(); + // onload, selectany is checked + $(".selectany").attr("checked", "checked"); + [% END %] - // When 'first available' radion button is clicked - $(".selectany").click(function() { - // Make sure all other specific copy table rows are hidden - biblioNum = suffixOf($(this).attr("id"), "_"); - newCopiesRowId = "#copiesrow_" + biblioNum; + // If we can choose a specific item, we preselect the first one + [% IF OPACItemHolds =="1" or OPACItemHolds == 'force' %] + $("table.copiesrow").each(function(){ + var id = suffixOf($(this).attr("id"), "_"); + select_first_available(id); + }); + [% END %] - if (!changeSelection(newCopiesRowId, false)) { - return false; + // On confirmsjs change + $(".confirmjs").change(function(){ + var id = suffixOf($(this).attr("id"), "_"); + // If I m checked, I enable radio buttons + if ( $(this).is(":checked") ) { + $("#reqspecific_" + id).attr("disabled", false); + $("#reqany_" + id).attr("disabled", false); + } + // Else its are disabled + else { + $("#reqspecific_" + id).attr("disabled", "disabled"); + $("#reqany_" + id).attr("disabled", "disabled"); } + // expand or collaspe the items block + toggle_copiesrow(id); + }); + + // When 'specific copy' or 'first available' radio button is clicked + $(".selectspecific, .selectany").click(function() { + var id = suffixOf($(this).attr("id"), "_"); + toggle_copiesrow(id); + }); - // Hide the copies table row - $(newCopiesRowId).hide(); + // Show or hide holds notes + $(".shownotes").click(function(){ + biblioNum = suffixOf($(this).attr("id"), "_"); + $("#notesrow_"+biblioNum).toggle(); }); // When 'Place Hold' button is clicked @@ -176,7 +201,6 @@ $("#selections").val(selections); $("#biblionumbers").val(biblionumbers); - return true; }); $(".toggle-hold-options").on("click",function(e){ @@ -426,48 +450,54 @@ [% IF ( bibitemloo.holdable ) %] - [% IF ( OPACItemHolds ) %] + [% IF OPACItemHolds == '1' or OPACItemHolds == 'force' %] -
  • - [% UNLESS ( bibitemloo.holdable ) %] +
  • + [% IF OPACItemHolds == 'force' %] + + [% END %] + [% END %] [% END %] - [% IF ( OPACItemHolds ) %] + [% IF OPACItemHolds == '1' || OPACItemHolds == 'force' %] [% IF ( bibitemloo.holdable ) %] @@ -496,7 +526,8 @@ [% ELSE %] - + Cannot be put on hold [% END %] [% IF ( itemLoo.copynumber ) %][% itemLoo.copynumber %][% END %] @@ -552,7 +583,6 @@ [% END %] - [% END %] -- 2.39.5