From a56ced7e1502118965df99079586283b527851f3 Mon Sep 17 00:00:00 2001 From: Galen Charlton Date: Fri, 18 May 2018 14:38:47 -0400 Subject: [PATCH] add simple web services for adding or subtracting records from a temp list GET /eg/opac/api/mylist/add?record=45 GET /eg/opac/api/mylist/delete?record=45 The JSON response is a hash containing a mylist key pointing to the list of bib IDs of contents of the temporary list. The record parameter can be repeated to allow adding or removing records as an atomic operation. Note that this change also now available to /eg/opac/mylist/{add,delete} Signed-off-by: Galen Charlton --- .../src/perlmods/lib/OpenILS/WWW/EGCatLoader.pm | 6 +- .../lib/OpenILS/WWW/EGCatLoader/Container.pm | 84 ++++++++++++++++++---- 2 files changed, 75 insertions(+), 15 deletions(-) diff --git a/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader.pm b/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader.pm index d3aecaa0b0..b92fa47a4c 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader.pm @@ -129,7 +129,11 @@ sub load { } (undef, $self->ctx->{mylist}) = $self->fetch_mylist unless - $path =~ /opac\/my(opac\/lists|list)/; + $path =~ /opac\/my(opac\/lists|list)/ || + $path =~ m!opac/api/mylist!; + + return $self->load_api_mylist_add if $path =~ m|opac/api/mylist/add|; + return $self->load_api_mylist_delete if $path =~ m|opac/api/mylist/delete|; return $self->load_simple("home") if $path =~ m|opac/home|; return $self->load_simple("css") if $path =~ m|opac/css|; diff --git a/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Container.pm b/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Container.pm index df7b79fffc..7309b613d4 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Container.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Container.pm @@ -10,7 +10,7 @@ my $U = 'OpenILS::Application::AppUtils'; # Retrieve the users cached records AKA 'My List' # Returns an empty list if there are no cached records sub fetch_mylist { - my ($self, $with_marc_xml) = @_; + my ($self, $with_marc_xml, $skip_sort) = @_; my $list = []; my $cache_key = $self->cgi->cookie((ref $self)->COOKIE_ANON_CACHE); @@ -59,7 +59,7 @@ sub fetch_mylist { # Leverage QueryParser to sort the items by values of config.metabib_fields # from the items' marc records. - if (@$list) { + if (@$list && !$skip_sort) { my ($sorter, $modifier) = $self->_get_bookbag_sort_params("anonsort"); my $query = $self->_prepare_anonlist_sorting_query($list, $sorter, $modifier); my $args = { @@ -77,15 +77,8 @@ sub fetch_mylist { # Adds a record (by id) to My List, creating a new anon cache + list if necessary. sub load_mylist_add { my $self = shift; - my $rec_id = $self->cgi->param('record'); - my ($cache_key, $list) = $self->fetch_mylist; - push(@$list, $rec_id); - - $cache_key = $U->simplereq( - 'open-ils.actor', - 'open-ils.actor.anon_cache.set_value', - $cache_key, (ref $self)->ANON_CACHE_MYLIST, $list); + my ($cache_key, $list) = $self->_do_mylist_add(); # Check if we need to warn patron about adding to a "temporary" # list: @@ -96,21 +89,84 @@ sub load_mylist_add { return $self->mylist_action_redirect($cache_key); } -sub load_mylist_delete { +sub load_api_mylist_add { my $self = shift; - my $rec_id = $self->cgi->param('record'); - my ($cache_key, $list) = $self->fetch_mylist; - $list = [ grep { $_ ne $rec_id } @$list ]; + my ($cache_key, $list) = $self->_do_mylist_add(); + + $self->ctx->{json_response} = { + mylist => [ map { 0 + $_ } @$list ], # force integers + }; + $self->ctx->{json_reponse_cookie} = + $self->cgi->cookie( + -name => (ref $self)->COOKIE_ANON_CACHE, + -path => '/', + -value => ($cache_key) ? $cache_key : '', + -expires => ($cache_key) ? undef : '-1h' + ); + + return Apache2::Const::OK; +} + +sub _do_mylist_add { + my $self = shift; + my @rec_ids = $self->cgi->param('record'); + + my ($cache_key, $list) = $self->fetch_mylist(0, 1); + push(@$list, @rec_ids); $cache_key = $U->simplereq( 'open-ils.actor', 'open-ils.actor.anon_cache.set_value', $cache_key, (ref $self)->ANON_CACHE_MYLIST, $list); + return ($cache_key, $list); +} + +sub load_mylist_delete { + my $self = shift; + + my ($cache_key, $list) = $self->_do_mylist_delete; + return $self->mylist_action_redirect($cache_key); } +sub load_api_mylist_delete { + my $self = shift; + + my ($cache_key, $list) = $self->_do_mylist_delete(); + + $self->ctx->{json_response} = { + mylist => [ map { 0 + $_ } @$list ], # force integers + }; + $self->ctx->{json_reponse_cookie} = + $self->cgi->cookie( + -name => (ref $self)->COOKIE_ANON_CACHE, + -path => '/', + -value => ($cache_key) ? $cache_key : '', + -expires => ($cache_key) ? undef : '-1h' + ); + + return Apache2::Const::OK; +} + +sub _do_mylist_delete { + my $self = shift; + my @rec_ids = $self->cgi->param('record'); + + my ($cache_key, $list) = $self->fetch_mylist(0, 1); + foreach my $rec_id (@rec_ids) { + $list = [ grep { $_ ne $rec_id } @$list ]; + } + + $cache_key = $U->simplereq( + 'open-ils.actor', + 'open-ils.actor.anon_cache.set_value', + $cache_key, (ref $self)->ANON_CACHE_MYLIST, $list); + + return ($cache_key, $list); +} + sub load_mylist_move { my $self = shift; my @rec_ids = $self->cgi->param('record'); -- 2.11.0