1 package OpenILS::WWW::EGCatLoader;
2 use strict; use warnings;
3 use Apache2::Const -compile => qw(OK DECLINED FORBIDDEN HTTP_INTERNAL_SERVER_ERROR REDIRECT HTTP_BAD_REQUEST);
4 use OpenSRF::Utils::Logger qw/$logger/;
5 use OpenILS::Utils::CStoreEditor qw/:funcs/;
6 use OpenILS::Utils::Fieldmapper;
7 use OpenILS::Application::AppUtils;
8 my $U = 'OpenILS::Application::AppUtils';
10 # Retrieve the users cached records AKA 'My List'
11 # Returns an empty list if there are no cached records
13 my ($self, $with_marc_xml) = @_;
16 my $cache_key = $self->cgi->cookie((ref $self)->COOKIE_ANON_CACHE);
20 $list = $U->simplereq(
22 'open-ils.actor.anon_cache.get_value',
23 $cache_key, (ref $self)->ANON_CACHE_MYLIST);
33 $marc_xml = $self->fetch_marc_xml_by_id($list);
36 # Leverage QueryParser to sort the items by values of config.metabib_fields
37 # from the items' marc records.
39 my ($sorter, $modifier) = $self->_get_bookbag_sort_params("anonsort");
40 my $query = $self->_prepare_anonlist_sorting_query($list, $sorter, $modifier);
41 $list = $U->bib_record_list_via_search($query) or
42 return Apache2::Const::HTTP_INTERNAL_SERVER_ERROR;
45 return ($cache_key, $list, $marc_xml);
49 # Adds a record (by id) to My List, creating a new anon cache + list if necessary.
52 my $rec_id = $self->cgi->param('record');
54 my ($cache_key, $list) = $self->fetch_mylist;
55 push(@$list, $rec_id);
57 $cache_key = $U->simplereq(
59 'open-ils.actor.anon_cache.set_value',
60 $cache_key, (ref $self)->ANON_CACHE_MYLIST, $list);
62 # Check if we need to warn patron about adding to a "temporary"
64 if ($self->check_for_temp_list_warning) {
65 return $self->mylist_warning_redirect($cache_key);
68 return $self->mylist_action_redirect($cache_key);
71 sub load_mylist_delete {
73 my $rec_id = $self->cgi->param('record');
75 my ($cache_key, $list) = $self->fetch_mylist;
76 $list = [ grep { $_ ne $rec_id } @$list ];
78 $cache_key = $U->simplereq(
80 'open-ils.actor.anon_cache.set_value',
81 $cache_key, (ref $self)->ANON_CACHE_MYLIST, $list);
83 return $self->mylist_action_redirect($cache_key);
86 sub load_mylist_move {
88 my @rec_ids = $self->cgi->param('record');
89 my $action = $self->cgi->param('action') || '';
91 return $self->load_myopac_bookbag_update('place_hold', undef, @rec_ids)
92 if $action eq 'place_hold';
94 my ($cache_key, $list) = $self->fetch_mylist;
95 return $self->mylist_action_redirect unless $cache_key;
98 foreach my $id (@$list) { push(@keep, $id) unless grep { $id eq $_ } @rec_ids; }
100 $cache_key = $U->simplereq(
102 'open-ils.actor.anon_cache.set_value',
103 $cache_key, (ref $self)->ANON_CACHE_MYLIST, \@keep
106 if ($self->ctx->{user} and $action =~ /^\d+$/) {
107 # in this case, action becomes list_id
108 $self->load_myopac_bookbag_update('add_rec', $self->cgi->param('action'));
109 # XXX TODO: test for failure of above
112 return $self->mylist_action_redirect($cache_key);
115 sub load_cache_clear {
117 $self->clear_anon_cache;
118 return $self->mylist_action_redirect;
121 # Wipes the entire anonymous cache, including My List
122 sub clear_anon_cache {
126 my $cache_key = $self->cgi->cookie((ref $self)->COOKIE_ANON_CACHE) or return;
130 'open-ils.actor.anon_cache.delete_session', $cache_key)
135 # Called after an anon-cache / My List action occurs. Redirect
136 # to the redirect_url (cgi param) or referrer or home.
137 sub mylist_action_redirect {
139 my $cache_key = shift;
142 if( my $anchor = $self->cgi->param('anchor') ) {
143 # on the results page, we want to redirect
144 # back to record that was affected
145 $url = $self->ctx->{referer};
146 $url =~ s/#.*|$/#$anchor/;
149 return $self->generic_redirect(
152 -name => (ref $self)->COOKIE_ANON_CACHE,
154 -value => ($cache_key) ? $cache_key : '',
155 -expires => ($cache_key) ? undef : '-1h'
160 # called after an anon-cache / my list addition when we are configured
161 # to show a warning to the user.
163 sub mylist_warning_redirect {
165 my $cache_key = shift;
167 my $base_url = sprintf(
168 "%s://%s%s/temp_warn",
169 $self->cgi->https ? 'https' : 'http',
170 $self->apache->hostname,
171 $self->ctx->{opac_root}
174 my $redirect = $self->ctx->{referer};
175 if (my $anchor = $self->cgi->param('anchor')) {
176 $redirect =~ s/#.*|$/#$anchor/;
179 $base_url .= '?redirect_to=' . uri_escape($redirect);
181 return $self->generic_redirect(
184 -name => (ref $self)->COOKIE_ANON_CACHE,
186 -value => ($cache_key) ? $cache_key : '',
187 -expires => ($cache_key) ? undef : '-1h'
194 (undef, $self->ctx->{mylist}, $self->ctx->{mylist_marc_xml}) =
195 $self->fetch_mylist(1);
197 return Apache2::Const::OK;
200 sub load_temp_warn_post {
202 my $url = $self->cgi->param('redirect_to');
203 return $self->generic_redirect(
206 -name => 'no_temp_list_warn',
208 -value => ($self->cgi->param('no_temp_list_warn')) ? '1' : '',
209 -expires => ($self->cgi->param('no_temp_list_warn')) ? undef : '-1h'
216 $self->ctx->{'redirect_to'} = $self->cgi->param('redirect_to');
217 return Apache2::Const::OK;