From 4920b9ee5f3ed0945e5cf3014ca9c4a8f4bc8276 Mon Sep 17 00:00:00 2001 From: Pedro Amorim Date: Tue, 27 Jun 2023 09:07:49 +0000 Subject: [PATCH] Bug 34058: Add table_prefix argument to buildPatronSearchQuery --- .../intranet-tmpl/prog/js/staff-global.js | 31 +++++++++++++------ 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/koha-tmpl/intranet-tmpl/prog/js/staff-global.js b/koha-tmpl/intranet-tmpl/prog/js/staff-global.js index 3ab3a006dd..736320391a 100644 --- a/koha-tmpl/intranet-tmpl/prog/js/staff-global.js +++ b/koha-tmpl/intranet-tmpl/prog/js/staff-global.js @@ -514,13 +514,15 @@ function patron_autocomplete(node, options) { * Build patron search query * - term: The full search term input by the user * You can then pass a list of options: - * - search_type: String 'contain' or 'start_with', defaults to DefaultPatronSearchMethod system preference - * - search_fields: String comma-separated list of specific fields, defaults to DefaultPatronSearchFields system preference - * - extended_attribute_types: JSON object containing the patron attribute types to be searched on + * - search_type: (String) 'contain' or 'start_with', defaults to defaultPatronSearchMethod (see js_includes.inc) + * - search_fields: (String) comma-separated list of specific fields, defaults to defaultPatronSearchFields (see js_includes.inc) + * - extended_attribute_types: (JSON object) containing the patron searchable attribute types to be searched on (see patron-search.inc) + * - table_prefix: (String) table name to prefix the fields with, defaults to 'me' */ function buildPatronSearchQuery(term, options) { let q = []; + let table_prefix; let leading_wildcard; let search_fields; let patterns = term.split(/[\s,]+/).filter(function (s) { return s.length }); @@ -530,18 +532,26 @@ function buildPatronSearchQuery(term, options) { return; } - // Leading wildcard: If search_type option exists, we use that + // Table prefix: If table_prefix options exists, use that + if (typeof options !== 'undefined' && options.table_prefix) { + table_prefix = options.table_prefix; + // If not, default to 'me' + } else { + table_prefix = 'me'; + } + + // Leading wildcard: If search_type option exists, use that if (typeof options !== 'undefined' && options.search_type) { leading_wildcard = options.search_type === "contain" ? '%' : ''; - // If not, we use DefaultPatronSearchMethod system preference instead + // If not, use DefaultPatronSearchMethod system preference instead } else { leading_wildcard = defaultPatronSearchMethod === 'contains' ? '%' : ''; } - // Search fields: If search_fields option exists, we use that + // Search fields: If search_fields option exists, use that if (typeof options !== 'undefined' && options.search_fields) { search_fields = options.search_fields; - // If not, we use DefaultPatronSearchFields system preference instead + // If not, use DefaultPatronSearchFields system preference instead } else { search_fields = defaultPatronSearchFields; } @@ -552,12 +562,12 @@ function buildPatronSearchQuery(term, options) { let pattern_subquery_or = []; search_fields.split(',').forEach(function (field, i) { pattern_subquery_or.push( - { ["me." + field]: { 'like': leading_wildcard + pattern + '%' } } + { [table_prefix + "." + field]: { 'like': leading_wildcard + pattern + '%' } } ); if (field == 'dateofbirth') { try { let d = $date_to_rfc3339(pattern); - pattern_subquery_or.push({ ["me." + field]: d }); + pattern_subquery_or.push({ [table_prefix + "." + field]: d }); } catch { // Hide the warning if the date is not correct } @@ -571,12 +581,13 @@ function buildPatronSearchQuery(term, options) { let term_subquery_or = []; search_fields.split(',').forEach(function (field, i) { term_subquery_or.push( - { ["me." + field]: { 'like': leading_wildcard + term + '%' } } + { [table_prefix + "." + field]: { 'like': leading_wildcard + term + '%' } } ); }); q.push({ "-or": term_subquery_or }); // Add each pattern for each extended patron attributes + // extendedPatronAttributes: ExtendedPatronAttributes system preference (see js_includes.inc) if (typeof options !== 'undefined' && options.extended_attribute_types && extendedPatronAttributes) { extended_attribute_subquery_and = []; patterns.forEach(function (pattern, i) { -- 2.30.2