Bug 24561: (follow-up) Set default matching criteria to 'contains' and add configurat...
authorAgustin Moyano <agustinmoyano@theke.io>
Thu, 30 Apr 2020 14:20:05 +0000 (11:20 -0300)
committerMartin Renvoize <martin.renvoize@ptfs-europe.com>
Tue, 12 May 2020 10:39:26 +0000 (11:39 +0100)
This patch adds option.criteria as an option. Possible values are
'contains', 'starts_with', 'ends_with' and 'exact'. 'contains' is the
default value.

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>

koha-tmpl/intranet-tmpl/prog/js/datatables.js
koha-tmpl/opac-tmpl/bootstrap/js/datatables.js

index a48112e..055bb74 100644 (file)
@@ -512,6 +512,8 @@ jQuery.fn.dataTable.ext.errMode = function(settings, note, message) {
     $.fn.api = function(options) {
         var settings = null;
         if(options) {
+            if(!options.criteria || ['contains', 'starts_with', 'ends_with', 'exact'].indexOf(options.criteria.toLowerCase()) === -1) options.criteria = 'contains';
+            options.criteria = options.criteria.toLowerCase();
             settings = $.extend(true, {}, dataTablesDefaults, {
                         'deferRender': true,
                         "paging": true,
@@ -556,7 +558,8 @@ jQuery.fn.dataTable.ext.errMode = function(settings, note, message) {
                                 })
                                 .map(function(col) {
                                     var part = {};
-                                    part[!col.data.includes('.')?'me.'+col.data:col.data] = {like: (data.columns[col.idx].search.value != '' ? data.columns[col.idx].search.value : filter)+'%'};
+                                    var value = data.columns[col.idx].search.value != '' ? data.columns[col.idx].search.value : filter;
+                                    part[!col.data.includes('.')?'me.'+col.data:col.data] = options.criteria === 'exact'?value:{like: (['contains', 'ends_with'].indexOf(options.criteria) !== -1?'%':'')+value+(['contains', 'starts_with'].indexOf(options.criteria) !== -1?'%':'')};
                                     return part;
                                 });
 
@@ -572,7 +575,7 @@ jQuery.fn.dataTable.ext.errMode = function(settings, note, message) {
                                     delete options.query_parameters;
                                 }
 
-                                dataSet._match = 'starts_with';
+                                dataSet._match = options.criteria;
 
                                 if(options.columns) {
                                     var order = data.order;
index 10dac7c..047fa4c 100644 (file)
@@ -133,6 +133,8 @@ jQuery.fn.dataTable.ext.errMode = function(settings, note, message) {
     $.fn.api = function(options) {
         var settings = null;
         if(options) {
+            if(!options.criteria || ['contains', 'starts_with', 'ends_with', 'exact'].indexOf(options.criteria.toLowerCase()) === -1) options.criteria = 'contains';
+            options.criteria = options.criteria.toLowerCase();
             settings = $.extend(true, {}, dataTablesDefaults, {
                         'deferRender': true,
                         "paging": true,
@@ -177,7 +179,8 @@ jQuery.fn.dataTable.ext.errMode = function(settings, note, message) {
                                 })
                                 .map(function(col) {
                                     var part = {};
-                                    part[!col.data.includes('.')?'me.'+col.data:col.data] = {like: (data.columns[col.idx].search.value != '' ? data.columns[col.idx].search.value : filter)+'%'};
+                                    var value = data.columns[col.idx].search.value != '' ? data.columns[col.idx].search.value : filter;
+                                    part[!col.data.includes('.')?'me.'+col.data:col.data] = options.criteria === 'exact'?value:{like: (['contains', 'ends_with'].indexOf(options.criteria) !== -1?'%':'')+value+(['contains', 'starts_with'].indexOf(options.criteria) !== -1?'%':'')};
                                     return part;
                                 });
 
@@ -193,7 +196,7 @@ jQuery.fn.dataTable.ext.errMode = function(settings, note, message) {
                                     delete options.query_parameters;
                                 }
 
-                                dataSet._match = 'starts_with';
+                                dataSet._match = options.criteria;
 
                                 if(options.columns) {
                                     var order = data.order;