|
Lines 575-581
function buildPatronSearchQuery(term, options) {
Link Here
|
| 575 |
|
575 |
|
| 576 |
let q = []; |
576 |
let q = []; |
| 577 |
let leading_wildcard; |
577 |
let leading_wildcard; |
| 578 |
let search_fields; |
578 |
let search_fields = []; |
| 579 |
let patterns = term.split(/[\s,]+/).filter(function (s) { return s.length }); |
579 |
let patterns = term.split(/[\s,]+/).filter(function (s) { return s.length }); |
| 580 |
|
580 |
|
| 581 |
// Bail if no patterns |
581 |
// Bail if no patterns |
|
Lines 591-599
function buildPatronSearchQuery(term, options) {
Link Here
|
| 591 |
leading_wildcard = defaultPatronSearchMethod === 'contains' ? '%' : ''; |
591 |
leading_wildcard = defaultPatronSearchMethod === 'contains' ? '%' : ''; |
| 592 |
} |
592 |
} |
| 593 |
|
593 |
|
|
|
594 |
let searched_attribute_fields = []; |
| 594 |
// Search fields: If search_fields option exists, we use that |
595 |
// Search fields: If search_fields option exists, we use that |
| 595 |
if (typeof options !== 'undefined' && options.search_fields) { |
596 |
if (typeof options !== 'undefined' && options.search_fields) { |
| 596 |
search_fields = expandPatronSearchFields(options.search_fields); |
597 |
expand_fields = expandPatronSearchFields(options.search_fields); |
|
|
598 |
expand_fields.split('\|').forEach(function (field, i) { |
| 599 |
if( field.startsWith('_ATTR_') ){ |
| 600 |
let attr_field = field.replace("_ATTR_",""); |
| 601 |
searched_attribute_fields.push( attr_field ); |
| 602 |
} else { |
| 603 |
search_fields.push( field ); |
| 604 |
} |
| 605 |
}); |
| 597 |
// If not, we use DefaultPatronSearchFields system preference instead |
606 |
// If not, we use DefaultPatronSearchFields system preference instead |
| 598 |
} else { |
607 |
} else { |
| 599 |
search_fields = defaultPatronSearchFields; |
608 |
search_fields = defaultPatronSearchFields; |
|
Lines 603-609
function buildPatronSearchQuery(term, options) {
Link Here
|
| 603 |
let pattern_subquery_and = []; |
612 |
let pattern_subquery_and = []; |
| 604 |
patterns.forEach(function (pattern, i) { |
613 |
patterns.forEach(function (pattern, i) { |
| 605 |
let pattern_subquery_or = []; |
614 |
let pattern_subquery_or = []; |
| 606 |
search_fields.split('\|').forEach(function (field, i) { |
615 |
search_fields.forEach(function (field, i) { |
| 607 |
pattern_subquery_or.push( |
616 |
pattern_subquery_or.push( |
| 608 |
{ ["me." + field]: { 'like': leading_wildcard + pattern + '%' } } |
617 |
{ ["me." + field]: { 'like': leading_wildcard + pattern + '%' } } |
| 609 |
); |
618 |
); |
|
Lines 620-628
function buildPatronSearchQuery(term, options) {
Link Here
|
| 620 |
}); |
629 |
}); |
| 621 |
q.push({ "-and": pattern_subquery_and }); |
630 |
q.push({ "-and": pattern_subquery_and }); |
| 622 |
|
631 |
|
|
|
632 |
|
| 623 |
// Add full search term for each search field |
633 |
// Add full search term for each search field |
| 624 |
let term_subquery_or = []; |
634 |
let term_subquery_or = []; |
| 625 |
search_fields.split('\|').forEach(function (field, i) { |
635 |
search_fields.forEach(function (field, i) { |
| 626 |
term_subquery_or.push( |
636 |
term_subquery_or.push( |
| 627 |
{ ["me." + field]: { 'like': leading_wildcard + term + '%' } } |
637 |
{ ["me." + field]: { 'like': leading_wildcard + term + '%' } } |
| 628 |
); |
638 |
); |
|
Lines 630-642
function buildPatronSearchQuery(term, options) {
Link Here
|
| 630 |
q.push({ "-or": term_subquery_or }); |
640 |
q.push({ "-or": term_subquery_or }); |
| 631 |
|
641 |
|
| 632 |
// Add each pattern for each extended patron attributes |
642 |
// Add each pattern for each extended patron attributes |
| 633 |
if (typeof options !== 'undefined' && options.search_fields == 'standard' && options.extended_attribute_types && extendedPatronAttributes) { |
643 |
if ( typeof options !== 'undefined' && ( (options.search_fields == 'standard' && options.extended_attribute_types) || searched_attribute_fields ) && extendedPatronAttributes) { |
|
|
644 |
extended_attribute_codes_to_search = (searched_attribute_fields.length > 0) ? searched_attribute_fields : options.extended_attribute_types; |
| 634 |
extended_attribute_subquery_and = []; |
645 |
extended_attribute_subquery_and = []; |
| 635 |
patterns.forEach(function (pattern, i) { |
646 |
patterns.forEach(function (pattern, i) { |
| 636 |
let extended_attribute_sub_or = []; |
647 |
let extended_attribute_sub_or = []; |
| 637 |
extended_attribute_sub_or.push({ |
648 |
extended_attribute_sub_or.push({ |
| 638 |
"extended_attributes.value": { "like": leading_wildcard + pattern + '%' }, |
649 |
"extended_attributes.value": { "like": leading_wildcard + pattern + '%' }, |
| 639 |
"extended_attributes.code": options.extended_attribute_types |
650 |
"extended_attributes.code": extended_attribute_codes_to_search |
| 640 |
}); |
651 |
}); |
| 641 |
extended_attribute_subquery_and.push(extended_attribute_sub_or); |
652 |
extended_attribute_subquery_and.push(extended_attribute_sub_or); |
| 642 |
}); |
653 |
}); |
| 643 |
- |
|
|