@@ -, +, @@ no|yes|force choice - no "Place On" column is present - "Select a specific copy" table is opened - making a reserve is successful + Fix some ergonomic issues in opac-reserve --- installer/data/mysql/sysprefs.sql | 2 +- installer/data/mysql/updatedatabase.pl | 8 + .../prog/en/modules/admin/preferences/opac.pref | 5 +- .../opac-tmpl/prog/en/modules/opac-reserve.tt | 188 ++++++++++++--------- 4 files changed, 121 insertions(+), 82 deletions(-) --- a/installer/data/mysql/sysprefs.sql +++ a/installer/data/mysql/sysprefs.sql @@ -229,7 +229,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), --- a/installer/data/mysql/updatedatabase.pl +++ a/installer/data/mysql/updatedatabase.pl @@ -7931,6 +7931,14 @@ if(CheckVersion($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) --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref @@ -454,9 +454,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: --- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-reserve.tt +++ a/koha-tmpl/opac-tmpl/prog/en/modules/opac-reserve.tt @@ -19,19 +19,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(); @@ -44,7 +61,7 @@ } }); - $("#place_on_hdr,.place_on_type,.toggle-hold-options").show(); + $(".toggle-hold-options").show(); $(".hold-options").hide(); $(".holddatefrom,.holddateto").prop("readOnly", true); @@ -68,65 +85,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_COPY_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 @@ -175,7 +200,6 @@ $("#selections").val(selections); $("#biblionumbers").val(biblionumbers); - return true; }); $(".toggle-hold-options").on("click",function(e){ @@ -422,48 +446,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 ) %] @@ -492,7 +522,8 @@ [% ELSE %] - + Cannot be put on hold [% END %] [% IF ( itemLoo.copynumber ) %][% itemLoo.copynumber %][% END %] @@ -548,7 +579,6 @@ [% END %] - [% END %] --