LP#1772680: Fixed issue related with Advanced Search when navigating from PINES to...
authorJaswinder Singh <jaswinder.singh0011@gmail.com>
Thu, 20 Sep 2018 02:03:25 +0000 (22:03 -0400)
committerChris Sharp <csharp@georgialibraries.org>
Wed, 16 Oct 2019 18:45:00 +0000 (14:45 -0400)
Signed-off-by: Jaswinder Singh <jaswinder.singh0011@gmail.com>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/RBDigitalSearch.pm

index b11dab6..4d591b8 100644 (file)
@@ -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;