From 3738e22d368962376094c49fab21bc1a57e09a64 Mon Sep 17 00:00:00 2001 From: Lari Taskula Date: Wed, 14 Sep 2022 14:34:48 +0000 Subject: [PATCH] Bug 31565: Fix datatables searching escape for exact search To test: 1. Add a new patron category with categorycode 'TEST_CAT' 2. Add a patron to category 'TEST_CAT' 3. Go to Patrons search view 4. Under "Search for patron" filters, filter by category you created at step 1 5. Click Search 6. Observe no results 7. Apply this patch and reload 8. Repeat 3-5 9. Observe expected result Double check tests from Bug 30393 still work as expected: 10. Go to the cities page 11. Add two cities: - 'Cordoba %' - 'Buenos Aires _' - 'London \' 12. Use the column search on the name, alternating _, \ and % as the query => SUCCESS: Filtering works correctly! --- koha-tmpl/intranet-tmpl/prog/js/datatables.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/koha-tmpl/intranet-tmpl/prog/js/datatables.js b/koha-tmpl/intranet-tmpl/prog/js/datatables.js index f6b079c794..197c2e09fd 100644 --- a/koha-tmpl/intranet-tmpl/prog/js/datatables.js +++ b/koha-tmpl/intranet-tmpl/prog/js/datatables.js @@ -578,8 +578,8 @@ jQuery.fn.dataTable.ext.errMode = function(settings, note, message) { function build_query(col, value){ - // escape SQL special characters - value = value.replace(/(\%|\_|\\)/g, "\\$1" ); + // escape SQL special character \ + value = value.replace(/(\\)/g, "\\$1" ); var parts = []; var attributes = col.data.split(':'); @@ -590,6 +590,9 @@ jQuery.fn.dataTable.ext.errMode = function(settings, note, message) { if ( value.match(/^\^(.*)\$$/) ) { value = value.replace(/^\^/, '').replace(/\$$/, ''); criteria = "exact"; + } else { + // escape SQL LIKE special characters % and _ + value = value.replace(/(\%|\_)/g, "\\$1"); } part[!attr.includes('.')?'me.'+attr:attr] = criteria === 'exact' ? value -- 2.25.1