From 833d1c564a16b8cefa3f9384091632cd08b01db0 Mon Sep 17 00:00:00 2001 From: Jaswinder Singh Date: Wed, 19 Sep 2018 22:03:25 -0400 Subject: [PATCH] LP#1772680: Fixed issue related with Advanced Search when navigating from PINES to RBDigital Tab Signed-off-by: Jaswinder Singh Signed-off-by: Galen Charlton --- .../lib/OpenILS/WWW/EGCatLoader/RBDigitalSearch.pm | 162 ++++++++++++--------- 1 file changed, 94 insertions(+), 68 deletions(-) diff --git a/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/RBDigitalSearch.pm b/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/RBDigitalSearch.pm index b11dab6e9a..4d591b8f70 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/RBDigitalSearch.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/RBDigitalSearch.pm @@ -140,7 +140,7 @@ sub load_rbdigital_results { my $library_location = $cgi->param('locg') || ''; my $sort_by = ''; my $sort_order = ''; - + # Prepage ctx structure $ctx->{page} = 'rresult' unless $internal; $ctx->{ids} = []; @@ -159,73 +159,79 @@ sub load_rbdigital_results { $logger->info('EbookAPI: RBDigitalSearch: facet: '.scalar(@facets)); - # filters - my $filters = []; - - # Build array with Search Inputs - # Title (if any) - if (defined($cgi->param('query_title'))) { - push @{search_inputs}, 'title_' . $cgi->param('query_title'); - } + # Parse parameters passed by Evergreen Advanced Search + if ($cgi->param('qtype')) { + #Evergreen Advanced Search: + @search_inputs = _parse_evergreen_advanced_search($cgi); + $logger->info("Parsed User Query: ".Dumper(@search_inputs)); + $value_to_search = ''; + } else { + #RBDigital Advanced Search: + # Build array with Search Inputs from RBDigital Advanced Search + # Title (if any) + if (defined($cgi->param('query_title'))) { + push @{search_inputs}, 'title_' . $cgi->param('query_title'); + } - # Author (if any) - if (defined($cgi->param('query_author')) && $cgi->param('query_author') ne '') { - push @{search_inputs}, 'author_' . $cgi->param('query_author'); - } + # Author (if any) + if (defined($cgi->param('query_author')) && $cgi->param('query_author') ne '') { + push @{search_inputs}, 'author_' . $cgi->param('query_author'); + } - # Narrator (if any) - if (defined($cgi->param('query_narrator')) && $cgi->param('query_narrator') ne '') { - push @{search_inputs}, 'narrator_' . $cgi->param('query_narrator'); - } + # Narrator (if any) + if (defined($cgi->param('query_narrator')) && $cgi->param('query_narrator') ne '') { + push @{search_inputs}, 'narrator_' . $cgi->param('query_narrator'); + } - # Series (if any) - if (defined($cgi->param('query_series')) && $cgi->param('query_series') ne '') { - push @{search_inputs}, 'series_' . $cgi->param('query_series'); - } + # Series (if any) + if (defined($cgi->param('query_series')) && $cgi->param('query_series') ne '') { + push @{search_inputs}, 'series_' . $cgi->param('query_series'); + } - # Publisher (if any) - if (defined($cgi->param('query_publisher')) && $cgi->param('query_publisher') ne '') { - push @{search_inputs}, 'publisher_' . $cgi->param('query_publisher'); - } + # Publisher (if any) + if (defined($cgi->param('query_publisher')) && $cgi->param('query_publisher') ne '') { + push @{search_inputs}, 'publisher_' . $cgi->param('query_publisher'); + } - # Genre (if any) - if (defined($cgi->param('item_genre')) && $cgi->param('item_genre') ne '') { - push @{search_inputs}, 'genre_' . $cgi->param('item_genre'); - } + # Genre (if any) + if (defined($cgi->param('item_genre')) && $cgi->param('item_genre') ne '') { + push @{search_inputs}, 'genre_' . $cgi->param('item_genre'); + } - # Audience (if any) - if (defined($cgi->param('item_audience')) && $cgi->param('item_audience') ne '') { - push @{search_inputs}, 'audience_' . $cgi->param('item_audience'); - } + # Audience (if any) + if (defined($cgi->param('item_audience')) && $cgi->param('item_audience') ne '') { + push @{search_inputs}, 'audience_' . $cgi->param('item_audience'); + } - # Availability (if any) - if (defined($cgi->param('item_availability')) && $cgi->param('item_availability') ne '') { - push @{search_inputs}, 'availability_' . $cgi->param('item_availability'); - } + # Availability (if any) + if (defined($cgi->param('item_availability')) && $cgi->param('item_availability') ne '') { + push @{search_inputs}, 'availability_' . $cgi->param('item_availability'); + } - # Published Date (if any) - if (defined($cgi->param('item_published')) && $cgi->param('item_published') ne '') { - push @{search_inputs}, 'published_' . $cgi->param('item_published'); - } + # Published Date (if any) + if (defined($cgi->param('item_published')) && $cgi->param('item_published') ne '') { + push @{search_inputs}, 'published_' . $cgi->param('item_published'); + } - # Date Added (if any) - if (defined($cgi->param('item_date-added')) && $cgi->param('item_date-added') ne '') { - push @{search_inputs}, 'date-added_' . $cgi->param('item_date-added'); - } + # Date Added (if any) + if (defined($cgi->param('item_date-added')) && $cgi->param('item_date-added') ne '') { + push @{search_inputs}, 'date-added_' . $cgi->param('item_date-added'); + } - # Fiction (if any) - if (defined($cgi->param('item_isfiction')) && $cgi->param('item_isfiction') ne '') { - push @{search_inputs}, 'isfiction_' . $cgi->param('item_isfiction'); - } + # Fiction (if any) + if (defined($cgi->param('item_isfiction')) && $cgi->param('item_isfiction') ne '') { + push @{search_inputs}, 'isfiction_' . $cgi->param('item_isfiction'); + } - # Language (if any) - if (defined($cgi->param('item_language')) && $cgi->param('item_language') ne '') { - push @{search_inputs}, 'language_' . $cgi->param('item_language'); - } + # Language (if any) + if (defined($cgi->param('item_language')) && $cgi->param('item_language') ne '') { + push @{search_inputs}, 'language_' . $cgi->param('item_language'); + } - # Digital Rights (if any) - if (defined($cgi->param('item_hasdrm')) && $cgi->param('item_hasdrm') ne '') { - push @{search_inputs}, 'hasdrm_' . $cgi->param('item_hasdrm'); + # Digital Rights (if any) + if (defined($cgi->param('item_hasdrm')) && $cgi->param('item_hasdrm') ne '') { + push @{search_inputs}, 'hasdrm_' . $cgi->param('item_hasdrm'); + } } # Determine sort by and sort order @@ -441,7 +447,6 @@ sub _search { return Apache2::Const::OK; } - #$self->timelog("Firing off the basic search from RBDigital library"); my $basic_search_req = $ebookapi_session->request($method, $authtoken, $session_id, $value_to_search, $search_type, @@ -528,8 +533,7 @@ sub _get_search_facets { } elsif ($filter->{tokenLabel} eq 'language') { push @{$facets->{language}}, [$filter]; } - } - + } }; # return hash reference @@ -549,25 +553,21 @@ sub _scrub_name { return rtrim($return_value); } - # Perl trim function to remove whitespace from the start and end of the string -sub trim($) -{ +sub trim($) { my $string = shift; $string =~ s/^\s+//; $string =~ s/\s+$//; return $string; } # Left trim function to remove leading whitespace -sub ltrim($) -{ +sub ltrim($) { my $string = shift; $string =~ s/^\s+//; return $string; } # Right trim function to remove trailing whitespace -sub rtrim($) -{ +sub rtrim($) { my $string = shift; $string =~ s/\s+$//; return $string; @@ -602,15 +602,41 @@ sub _get_search_fields { { #TODO: Replace the below by join statement digital_services_id => $digital_services_req->content->[0]->id - } ); return $mapped_search_field_req->recv()->{content}; - } return []; } +# Call this method to parse the Evergreen search structure generated by the Advanced Search +sub _parse_evergreen_advanced_search { + my ($cgi) = @_; + my @search_inputs = (); + + return $cgi->param('query') unless $cgi->param('qtype'); + + my %parts; + my @part_names = qw/qtype contains query bool/; + $parts{$_} = [ $cgi->param($_) ] for (@part_names); + + for (my $i = 0; $i < scalar @{$parts{'qtype'}}; $i++) { + my ($qtype, $contains, $query, $bool) = map { $parts{$_}->[$i] } @part_names; + + next unless $query =~ /\S/; + + # Hack for journal title + if ($qtype eq 'jtitle') { + $qtype = 'title'; + } + + push @{search_inputs}, $qtype. '_' . $query; + } + + return @search_inputs; + +} + 1; -- 2.11.0