Bug 10541: enable cross-browser AJAX in additem.js
authorDavid Cook <dcook@prosentient.com.au>
Fri, 5 Jul 2013 02:00:36 +0000 (12:00 +1000)
committerGalen Charlton <gmc@esilibrary.com>
Wed, 17 Jul 2013 16:36:11 +0000 (16:36 +0000)
Currently, the additem.js is using "indexOf" to search
for a value in an array. While this works in Chrome, Firefox,
and IE > 9, it fails miserably in IE 8 and 7 (which don't have
the indexOf method). This means that users aren't able to add
items using the acquisitions module!

Instead of using "indexOf", we should be using the jQuery function
$.inArray. It was added in jQuery v1.2 (3.8.0 uses v1.3.2 so even
our oldest supported release can use this method). It's perfectly
cross-browser compatible...works in Chrome, Firefox, and every
version of IE that I've tried (i.e. 7, 8, 9).

Test Plan:

Before applying patch:

0) Switch to Internet Explorer 7, or 8, or 9, or 10.

If you're using IE 9 or 10, you'll need to change the Document Mode to
IE7 standards or IE8 standards.

You can do this by opening Internet Explorer 9 or 10, pressing F12 (or
clicking on the gear in the top right corner and choosing
F12 Developer Tools), and then clicking on "Document Mode" on the
top toolbar. There, you can change to IE7 or IE8 standards.

N.B. This is not always a perfect emulation in every case, but this
time it does show you the bug.

1) Set the system preference AcqCreateItem to "receiving an order"
2) Go to Acquisitions
3) Either:
    a) Receive a shipment for a basket with items
    b) Create a new basket, create an order, close the basket, and
       then do 3a)
4) In the "Item" fieldset, fill out some fields such as barcode,
   Date acquiried, Public note, etc.
5) Click "Add" at the bottom of the fieldset
6) Note that while the item may have been added, the "Item" fieldset
is not being shown again. You may also notice a Javascript error
appearing in a pop-up window or you might see a yellow warning flag
on the bottom status bar.

APPLY THE PATCH

7) Do a full refresh of the page (hold down shift and press the refresh
button on the browser next to the address bar), and try adding items
again.
8) Note that you receive no warnings and that items are added correctly
as they would be in Firefox or Chrome.

OPTIONALLY

9) To be sure that I haven't broken anything, go through the same steps
in IE9 (with IE9 standards) or Chrome or Firefox. Everything should be
working.

Signed-off-by: Owen Leonard <oleonard@myacpl.org>
Tested in IE10 in IE7 mode and IE9 mode. Also tested in Firefox.

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Passes koha-qa.pl, works as advertised.

Signed-off-by: Galen Charlton <gmc@esilibrary.com>
koha-tmpl/intranet-tmpl/prog/en/js/additem.js

index 9dfaa1f..1cea437 100644 (file)
@@ -143,7 +143,7 @@ function cloneItemBlock(index, unique_item_fields) {
             /* Copy values from the original block (input) */
             $(original).find("input[name='field_value']").each(function(){
                 var kohafield = $(this).siblings("input[name='kohafield']").val();
-                if($(this).val() && dont_copy_fields.indexOf(kohafield) == -1) {
+                if($(this).val() && $.inArray(kohafield,dont_copy_fields) == -1) {
                     $(this).parent("div").attr("id").match(/^(subfield.)/);
                     var id = RegExp.$1;
                     var value = $(this).val();
@@ -153,7 +153,7 @@ function cloneItemBlock(index, unique_item_fields) {
             /* Copy values from the original block (select) */
             $(original).find("select[name='field_value']").each(function(){
                 var kohafield = $(this).siblings("input[name='kohafield']").val();
-                if($(this).val() && dont_copy_fields.indexOf(kohafield) == -1) {
+                if($(this).val() && $.inArray(kohafield,dont_copy_fields) == -1) {
                     $(this).parent("div").attr("id").match(/^(subfield.)/);
                     var id = RegExp.$1;
                     var value = $(this).val();