Bug 22595: Items search is mixing inputs
authorFridolin Somers <fridolin.somers@biblibre.com>
Wed, 27 Mar 2019 15:19:29 +0000 (16:19 +0100)
committerNick Clemens <nick@bywatersolutions.com>
Thu, 11 Apr 2019 11:36:10 +0000 (11:36 +0000)
Items search is using inputs and selects from search form to create an Ajax call.

In this call selects are parsed before inputs.
But a custom search field can be used with authorised values and used after a regular search field.
In this case the "q" param is not ordered like the "name" param.

Test plan :
1) Go to Administration > Item search fields
2) Define a search field with an authorised values category
3) Go to items search
4) Use a regular filter like call number
5) Click on new field
6) Use custom field with an authorised value
7) Perform search
=> Without patch you get wrong resuts, authorised value is used as value for first field
=> You can see this by listening traffic in Firebug, look at params "f" and "q"
8) Check some combinaison of select and input filters

Signed-off-by: Michal Denar <black23@gmail.com>

Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de>

Signed-off-by: Nick Clemens <nick@bywatersolutions.com>

koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/itemsearch.tt

index ab3c027..c7c3668 100644 (file)
                 .append(table);
 
             var params = [];
-            $form.find('select').not(':disabled').find('option:selected').each(function () {
-                var name = $(this).parents('select').first().attr('name');
-                var value = $(this).val();
-                params.push({ 'name': name, 'value': value });
-            });
-            $form.find('input[type="text"],input[type="hidden"]').not(':disabled').each(function () {
-                params.push({ 'name': $(this).attr('name'), 'value': $(this).val() });
-            });
-            $form.find('input[type="radio"]:checked').each(function() {
-                params.push({ 'name': $(this).attr('name'), 'value': $(this).val() });
+            $form.find('select:not(:disabled) option:selected,input[type="text"]:not(:disabled),input[type="hidden"]:not(:disabled),input[type="radio"]:checked').each(function() {
+                if ( $(this).prop('tagName').toLowerCase() == 'option' ) {
+                    var name = $(this).parents('select').first().attr('name');
+                    var value = $(this).val();
+                    params.push({ 'name': name, 'value': value });
+                } else {
+                    params.push({ 'name': $(this).attr('name'), 'value': $(this).val() });
+                }
             });
 
             $('#results').dataTable($.extend(true, {}, dataTablesDefaults, {