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!

Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
This commit is contained in:
Lari Taskula 2022-09-14 14:34:48 +00:00 committed by Tomas Cohen Arazi
parent 277e19bd10
commit 41d0daaff8
Signed by: tomascohen
GPG key ID: 0A272EA1B2F3C15F

View file

@ -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