TPAC: repair staff client End link for showing last record
authorBill Erickson <berick@esilibrary.com>
Fri, 4 May 2012 16:07:35 +0000 (12:07 -0400)
committerLebbeous Fogle-Weekley <lebbeous@esilibrary.com>
Wed, 9 May 2012 14:02:10 +0000 (10:02 -0400)
In the embedded TPAC, when staff clicks the End link in the record
detail page to jump to the last record in the search results, it now
makes an intermediate jump through search code, which locates the last
record in the set (via CGI param find_last) then redirects to the record
detail page for the last record.  With this approach, we don't have to
pre-fetch the entire set of record IDs just to render the paging links.
Tip o' the hat to Mike R. for the design suggestion.

https://bugs.launchpad.net/evergreen/+bug/984070

Signed-off-by: Bill Erickson <berick@esilibrary.com>
Signed-off-by: Ben Shum <bshum@biblio.org>
Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Search.pm
Open-ILS/src/templates/opac/parts/js.tt2

index b10f312..53365e0 100644 (file)
@@ -265,6 +265,9 @@ sub load_rresults {
     my $ctx = $self->ctx;
     my $e = $self->editor;
 
+    # find the last record in the set, then redirect
+    my $find_last = $cgi->param('find_last');
+
     $self->timelog("Loading results");
     # load bookbag metadata, if requested.
     if (my $bbag_err = $self->load_rresults_bookbag) {
@@ -316,7 +319,7 @@ sub load_rresults {
 
     $self->get_staff_search_settings;
 
-    if ($ctx->{staff_saved_search_size}) {
+    if (!$find_last and $ctx->{staff_saved_search_size}) {
         my ($key, $list) = $self->staff_save_search($query);
         if ($key) {
             $self->apache->headers_out->add(
@@ -390,6 +393,15 @@ sub load_rresults {
     $ctx->{hit_count} = $results->{count};
     $ctx->{parsed_query} = $results->{parsed_query};
 
+    if ($find_last) {
+        # redirect to the record detail page for the last record in the results
+        my $rec_id = pop @$rec_ids;
+        $cgi->delete('find_last');
+        my $url = $cgi->url(-full => 1, -path => 1, -query => 1);
+        $url =~ s|/results|/record/$rec_id|;
+        return $self->generic_redirect($url);
+    }
+
     return Apache2::Const::OK if @$rec_ids == 0 or $internal;
 
     $self->load_rresults_bookbag_item_notes($rec_ids) if $ctx->{bookbag};
index 517b230..df50a03 100644 (file)
@@ -12,7 +12,7 @@
                 "[% ctx.prev_rec_url || '' %]",
                 "[% ctx.next_rec_url || '' %]",
                 "[% mkurl(ctx.first_search_record, {page => 0}) %]",
-                "[% mkurl(ctx.last_search_record, {page => POSIX.floor(ctx.hit_count / ctx.page_size)}) %]",
+                "[% mkurl(ctx.opac_root _ '/results', {find_last => 1, page => POSIX.floor(ctx.hit_count / ctx.page_size)}) %]",
                 "[% mkurl(ctx.opac_root _ '/results', {}, ['expand','cnoffset']) %]"
             );
         </script>