From a23bc8b1e3d884c275f28b158953b2d748952430 Mon Sep 17 00:00:00 2001 From: Dan Scott Date: Thu, 5 Jan 2012 22:51:00 -0500 Subject: [PATCH] TPAC: Preserve loc, query, qtype, and sort params In some cases, mkurl() is not enough to preserve our desired CGI params - such as when redirects are triggered from within a Perl module, or forms are submitted. Accordingly, the following changes address these cases where the chosen location / query / query type was being dropped: * Switching between account preferences * Creating / deleting / sharing / editing bookbags * Moving items from temporary list to bookbags * Adding notes to items in a bookbag * Placing holds The primary mechanism for forms is the "preserve_params.tt2" block that can accept a "params" list of the CGI params that you want to preserve, but which defaults to location/query/qtype/sort. Similarly, we add the same preservation steps to the OpenILS::WWW::EGCatLoader::Account module for most actions. Signed-off-by: Dan Scott Signed-off-by: Bill Erickson --- .../lib/OpenILS/WWW/EGCatLoader/Account.pm | 23 +++++++++++++++---- Open-ILS/src/templates/opac/myopac/lists.tt2 | 17 ++++++++++---- .../src/templates/opac/parts/anon_list.tt2 | 6 ++--- .../opac/parts/myopac/prefs_base.tt2 | 12 +++++----- .../templates/opac/parts/preserve_params.tt2 | 9 ++++++++ .../templates/opac/parts/record/summary.tt2 | 2 +- Open-ILS/src/templates/opac/results.tt2 | 6 ++++- 7 files changed, 55 insertions(+), 20 deletions(-) create mode 100644 Open-ILS/src/templates/opac/parts/preserve_params.tt2 diff --git a/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Account.pm b/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Account.pm index 7f00cb6f07..7b0c1a18eb 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Account.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Account.pm @@ -536,6 +536,11 @@ sub handle_hold_update { $e->authtoken, undef, \@vals )->gather(1); # LFW XXX test for failure $url = 'https://' . $self->apache->hostname . $self->ctx->{opac_root} . '/myopac/holds'; + foreach my $param (('loc', 'qtype', 'query')) { + if ($self->cgi->param($param)) { + $url .= ";$param=" . uri_escape($self->cgi->param($param)); + } + } } $circ->kill_me; @@ -1574,9 +1579,10 @@ sub load_myopac_bookbags { my $url = $self->ctx->{opac_root} . '/myopac/lists?id=' . $bookbag->id; - # Keep it if we've got it - if ($self->cgi->param("sort")) { - $url .= ";sort=" . $self->cgi->param("sort"); + foreach my $param (('loc', 'qtype', 'query', 'sort')) { + if ($self->cgi->param($param)) { + $url .= ";$param=" . uri_escape($self->cgi->param($param)); + } } return $self->generic_redirect($url); @@ -1636,7 +1642,11 @@ sub load_myopac_bookbag_update { my $url = "https://" . $self->apache->hostname . $self->ctx->{opac_root} . "/myopac/lists?"; - $url .= 'sort=' . uri_escape($cgi->param("sort")) if $cgi->param("sort"); + foreach my $param (('loc', 'qtype', 'query', 'sort')) { + if ($cgi->param($param)) { + $url .= "$param=" . uri_escape($cgi->param($param)) . ";"; + } + } if ($action eq 'create') { $list = Fieldmapper::container::biblio_record_entry_bucket->new; @@ -1663,6 +1673,11 @@ sub load_myopac_bookbag_update { my $url = $self->ctx->{opac_root} . '/place_hold?hold_type=T'; $url .= ';hold_target=' . $_ for @hold_recs; + foreach my $param (('loc', 'qtype', 'query')) { + if ($cgi->param($param)) { + $url .= ";$param=" . uri_escape($cgi->param($param)); + } + } return $self->generic_redirect($url); } else { diff --git a/Open-ILS/src/templates/opac/myopac/lists.tt2 b/Open-ILS/src/templates/opac/myopac/lists.tt2 index 2a9b774df3..ffab0b3952 100644 --- a/Open-ILS/src/templates/opac/myopac/lists.tt2 +++ b/Open-ILS/src/templates/opac/myopac/lists.tt2 @@ -13,6 +13,7 @@ + [%- INCLUDE "opac/parts/preserve_params.tt2"; %] @@ -66,9 +67,10 @@

[% bbag.name | html %]

[% IF bbag.description %]
[% bbag.description | html %]
[% END %] -
+
+ [%- INCLUDE "opac/parts/preserve_params.tt2"; %] [% IF bbag.pub != 't' %] @@ -78,17 +80,19 @@ [% END %]
-
+
+ [%- INCLUDE "opac/parts/preserve_params.tt2"; %]
-
+
+ [%- INCLUDE "opac/parts/preserve_params.tt2"; %]
@@ -113,6 +117,7 @@
+ [%- INCLUDE "opac/parts/preserve_params.tt2" params=['loc', 'query', 'qtype']; %] [% INCLUDE "opac/parts/filtersort.tt2" value=CGI.param('sort') mode='bookbag' %] - + [%- INCLUDE "opac/parts/preserve_params.tt2"; %]
@@ -152,7 +157,7 @@
- + @@ -184,6 +189,7 @@ + [%- INCLUDE "opac/parts/preserve_params.tt2"; %] @@ -230,6 +236,7 @@ diff --git a/Open-ILS/src/templates/opac/parts/anon_list.tt2 b/Open-ILS/src/templates/opac/parts/anon_list.tt2 index 4a96558ad0..00a898dc48 100644 --- a/Open-ILS/src/templates/opac/parts/anon_list.tt2 +++ b/Open-ILS/src/templates/opac/parts/anon_list.tt2 @@ -6,13 +6,12 @@ id="anonsort" name="anonsort" value=CGI.param("anonsort") %] - + [%- INCLUDE "opac/parts/preserve_params.tt2"; %] - +

[% l('Temporary List') %]

+ [%- INCLUDE "opac/parts/preserve_params.tt2"; %]
@@ -39,6 +38,7 @@ [% END %] + [%- INCLUDE "opac/parts/preserve_params.tt2"; %] diff --git a/Open-ILS/src/templates/opac/parts/myopac/prefs_base.tt2 b/Open-ILS/src/templates/opac/parts/myopac/prefs_base.tt2 index aeec099640..b6a1194245 100644 --- a/Open-ILS/src/templates/opac/parts/myopac/prefs_base.tt2 +++ b/Open-ILS/src/templates/opac/parts/myopac/prefs_base.tt2 @@ -10,27 +10,27 @@ [% l("Personal Information") %] [% ELSIF prefs_page == 'notify' %] [% ELSE %]
[% l("Search Preferences") %] diff --git a/Open-ILS/src/templates/opac/parts/preserve_params.tt2 b/Open-ILS/src/templates/opac/parts/preserve_params.tt2 new file mode 100644 index 0000000000..14fe5be62a --- /dev/null +++ b/Open-ILS/src/templates/opac/parts/preserve_params.tt2 @@ -0,0 +1,9 @@ +[%- +UNLESS params; + params = ['loc', 'query', 'qtype', 'sort']; +END; +FOR param IN params; + IF CGI.param(param); %] + + [%- END; +END; %] diff --git a/Open-ILS/src/templates/opac/parts/record/summary.tt2 b/Open-ILS/src/templates/opac/parts/record/summary.tt2 index c67d0ef5bc..786703630f 100644 --- a/Open-ILS/src/templates/opac/parts/record/summary.tt2 +++ b/Open-ILS/src/templates/opac/parts/record/summary.tt2 @@ -34,7 +34,7 @@ operation = ctx.mylist.grep(ctx.bre_id).size ? "delete" : "add"; label = (operation == "add") ? l("Add to my list") : l("Remove from my list"); %] - + [% label %] diff --git a/Open-ILS/src/templates/opac/results.tt2 b/Open-ILS/src/templates/opac/results.tt2 index 17fddab2da..566936a6f8 100644 --- a/Open-ILS/src/templates/opac/results.tt2 +++ b/Open-ILS/src/templates/opac/results.tt2 @@ -31,7 +31,11 @@
[% IF ctx.mylist.size %]
- [% l('View My List') %] + [%- IF ctx.user; %] + [% l('View My List') %] + [%- ELSE %] + [% l('View My List') %] + [%- END %]
[% END %]
-- 2.43.2