From f8f0b307e1659781b4a5c5bd19b6b7b69c079426 Mon Sep 17 00:00:00 2001 From: Mike Rylander Date: Wed, 23 Jan 2019 13:46:46 -0500 Subject: [PATCH] LP#1749475: Allow control (and propagation) of the sort direction on print/email; Silence log message in SendEmail reactor. Signed-off-by: Mike Rylander --- .../lib/OpenILS/Application/Search/Biblio.pm | 12 +++++--- .../lib/OpenILS/Application/Trigger/Reactor.pm | 5 +++- .../Application/Trigger/Reactor/SendEmail.pm | 2 +- .../lib/OpenILS/WWW/EGCatLoader/Account.pm | 32 ++++++++++++++++++---- .../lib/OpenILS/WWW/EGCatLoader/Container.pm | 4 +++ .../perlmods/lib/OpenILS/WWW/EGCatLoader/Record.pm | 13 ++++++++- Open-ILS/src/sql/Pg/950.data.seed-values.sql | 4 +-- .../sql/Pg/upgrade/XXXX.schema.AT-def-groups.sql | 4 +-- .../src/templates/opac/record/email_preview.tt2 | 6 +++- .../src/templates/opac/record/print_preview.tt2 | 6 +++- 10 files changed, 69 insertions(+), 19 deletions(-) diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Application/Search/Biblio.pm b/Open-ILS/src/perlmods/lib/OpenILS/Application/Search/Biblio.pm index 4f21bc402f..b5435a1c84 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Application/Search/Biblio.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Application/Search/Biblio.pm @@ -1926,6 +1926,7 @@ __PACKAGE__->register_method( { desc => 'Biblio record entry ID or array of IDs', type => 'number' }, { desc => 'Context library for holdings, if applicable' => 'number' }, { desc => 'Sort order, if applicable' => 'string' }, + { desc => 'Sort direction, if applicable' => 'string' }, { desc => 'Definition Group Member id' => 'number' }, { desc => 'Whether to bypass auth due to captcha' => 'bool' }, { desc => 'Email address, if none for the user' => 'string' }, @@ -1939,26 +1940,28 @@ __PACKAGE__->register_method( ); sub format_biblio_record_entry { - my($self, $conn, $arg1, $arg2, $arg3, $arg4, $arg5, $captcha_pass, $email, $subject) = @_; + my($self, $conn, $arg1, $arg2, $arg3, $arg4, $arg5, $arg6, $captcha_pass, $email, $subject) = @_; my $for_print = ($self->api_name =~ /print/); my $for_email = ($self->api_name =~ /email/); my $preview = ($self->api_name =~ /preview/); - my $e; my $auth; my $bib_id; my $context_org; my $holdings_context; my $bib_sort; my $group_member; my $type = 'brief'; + my $e; my $auth; my $bib_id; my $context_org; my $holdings_context; my $bib_sort; my $group_member; my $type = 'brief'; my $sort_dir; if ($for_print) { $bib_id = $arg1; $context_org = $arg2 || $U->get_org_tree->id; $holdings_context = $context_org; $bib_sort = $arg3 || 'author'; - $group_member = $arg4; + $sort_dir = $arg4 || 'ascending'; + $group_member = $arg5; $e = new_editor(xact => 1); } elsif ($for_email) { $auth = $arg1; $bib_id = $arg2; $bib_sort = $arg4 || 'author'; - $group_member = $arg5; + $sort_dir = $arg5 || 'ascending'; + $group_member = $arg6; $e = new_editor(authtoken => $auth, xact => 1); return $e->die_event unless $captcha_pass || $e->checkauth; $holdings_context = $arg3 || $U->get_org_tree->id; @@ -2010,6 +2013,7 @@ sub format_biblio_record_entry { subject => $subject, context_org => $holdings_context->shortname, sort_by => $bib_sort, + sort_dir => $sort_dir, preview => $preview }; diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Application/Trigger/Reactor.pm b/Open-ILS/src/perlmods/lib/OpenILS/Application/Trigger/Reactor.pm index 3d7fb2ec2e..f011417cfc 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Application/Trigger/Reactor.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Application/Trigger/Reactor.pm @@ -429,7 +429,7 @@ $_TT_helpers = { # input: list of bib bucket items; output: sorted list of unapi_bre objects sort_bucket_unapi_bre => sub { - my ($list, $unapi_args, $sortby) = @_; + my ($list, $unapi_args, $sortby, $sortdir) = @_; #$logger->info("sort_bucket_unapi_bre unapi_bre params: " . join(', ', map { "$_: $$unapi_args{$_}" } keys(%$unapi_args))); my @sorted_list; for my $i (@$list) { @@ -514,6 +514,9 @@ $_TT_helpers = { } } + if ($sortdir =~ /^d/) { + return [ sort { $$b{$sortby.'sort'} cmp $$a{$sortby.'sort'} } @sorted_list ]; + } return [ sort { $$a{$sortby.'sort'} cmp $$b{$sortby.'sort'} } @sorted_list ]; }, diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Application/Trigger/Reactor/SendEmail.pm b/Open-ILS/src/perlmods/lib/OpenILS/Application/Trigger/Reactor/SendEmail.pm index 5a28cb7b77..10e32e1a17 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Application/Trigger/Reactor/SendEmail.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Application/Trigger/Reactor/SendEmail.pm @@ -49,7 +49,7 @@ sub handler { my $text = encode_utf8($self->run_TT($env)); return 0 if (!$text); - if ($$env{user_data}{preview}) { + if ($$env{user_data} && ref($$env{user_data}) =~ /HASH/ && $$env{user_data}{preview}) { $logger->info("SendEmail Reactor: success in preview mode, not sending email"); return 1; } 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 2f22a49d51..6d5ab6f321 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Account.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Account.pm @@ -2598,19 +2598,39 @@ sub load_myopac_bookbag_update { return $self->generic_redirect($url); } elsif ($action eq 'print') { - if (my $incoming_sort = $cgi->param('sort') || $cgi->param('anonsort')) { - $incoming_sort =~ s/sort.*$//; - $self->ctx->{sort} = $incoming_sort; + my ($incoming_sort,$sort_dir) = $self->_get_bookbag_sort_params('sort'); + $sort_dir = $self->cgi->param('sort_dir') if $self->cgi->param('sort_dir'); + if (!$incoming_sort) { + ($incoming_sort,$sort_dir) = $self->_get_bookbag_sort_params('anonsort'); } + if (!$incoming_sort) { + $incoming_sort = 'author'; + } + + $incoming_sort =~ s/sort.*$//; + + $self->ctx->{sort} = $incoming_sort; + $self->ctx->{sort_dir} = $sort_dir; + my $items = $self->editor->search_container_biblio_record_entry_bucket_item({id=>\@selected_item}); my @bib_ids = map { $_->target_biblio_record_entry } @$items; my $temp_cache_key = $self->_stash_record_list_in_anon_cache(@bib_ids); return $self->load_mylist_print($temp_cache_key); } elsif ($action eq 'email') { - if (my $incoming_sort = $cgi->param('sort') || $cgi->param('anonsort')) { - $incoming_sort =~ s/sort.*$//; - $self->ctx->{sort} = $incoming_sort; + my ($incoming_sort,$sort_dir) = $self->_get_bookbag_sort_params('sort'); + $sort_dir = $self->cgi->param('sort_dir') if $self->cgi->param('sort_dir'); + if (!$incoming_sort) { + ($incoming_sort,$sort_dir) = $self->_get_bookbag_sort_params('anonsort'); } + if (!$incoming_sort) { + $incoming_sort = 'author'; + } + + $incoming_sort =~ s/sort.*$//; + + $self->ctx->{sort} = $incoming_sort; + $self->ctx->{sort_dir} = $sort_dir; + my $items = $self->editor->search_container_biblio_record_entry_bucket_item({id=>\@selected_item}); my @bib_ids = map { $_->target_biblio_record_entry } @$items; my $temp_cache_key = $self->_stash_record_list_in_anon_cache(@bib_ids); 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 738b4d64d0..89ccdd08c4 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Container.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Container.pm @@ -217,7 +217,9 @@ sub load_mylist_print { my $clear_cart = $self->cgi->param('clear_cart'); $url .= '&clear_cart=1' if $clear_cart; my $sort = $self->cgi->param('sort') || $self->cgi->param('anonsort'); + my $sort_dir = $self->cgi->param('sort_dir'); $url .= '&sort='.$sort if $sort; + $url .= '&sort_dir='.$sort_dir if $sort_dir; $url .= '&is_list=1'; return $self->generic_redirect($url); @@ -245,7 +247,9 @@ sub load_mylist_email { my $clear_cart = $self->cgi->param('clear_cart'); $url .= '&clear_cart=1' if $clear_cart; my $sort = $self->cgi->param('sort') || $self->cgi->param('anonsort'); + my $sort_dir = $self->cgi->param('sort_dir'); $url .= '&sort='.$sort if $sort; + $url .= '&sort_dir='.$sort_dir if $sort_dir; $url .= '&is_list=1'; return $self->generic_redirect($url); diff --git a/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Record.pm b/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Record.pm index 3608ff03ac..85aebe07d3 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Record.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Record.pm @@ -587,18 +587,29 @@ sub load_print_or_email_preview { $ctx->{context_org} = $context_org->id; - my $incoming_sort = $self->cgi->param('sort') || $self->cgi->param('anonsort') || 'author'; + my ($incoming_sort,$sort_dir) = $self->_get_bookbag_sort_params('sort'); + $sort_dir = $self->cgi->param('sort_dir') if $self->cgi->param('sort_dir'); + if (!$incoming_sort) { + ($incoming_sort,$sort_dir) = $self->_get_bookbag_sort_params('anonsort'); + } + if (!$incoming_sort) { + $incoming_sort = 'author'; + } + $incoming_sort =~ s/sort.*$//; $incoming_sort = 'author' unless (grep {$_ eq $incoming_sort} qw/title author pubdate/); + $ctx->{sort} = $incoming_sort; + $ctx->{sort_dir} = $sort_dir; my $method = "open-ils.search.biblio.record.$type.preview"; my @args = ( $list, $ctx->{context_org}, $ctx->{sort}, + $ctx->{sort_dir}, $ctx->{format}, $captcha_pass, $ctx->{email}, diff --git a/Open-ILS/src/sql/Pg/950.data.seed-values.sql b/Open-ILS/src/sql/Pg/950.data.seed-values.sql index b3ec186b87..2f1535b5bf 100644 --- a/Open-ILS/src/sql/Pg/950.data.seed-values.sql +++ b/Open-ILS/src/sql/Pg/950.data.seed-values.sql @@ -11833,7 +11833,7 @@ Auto-Submitted: auto-generated END; flesh_list = flesh_list _ '}'; - item_list = helpers.sort_bucket_unapi_bre(cbreb.items,{flesh => flesh_list, site => user_data.0.context_org, flesh_limit => flimit}, user_data.0.sort_by); + item_list = helpers.sort_bucket_unapi_bre(cbreb.items,{flesh => flesh_list, site => user_data.0.context_org, flesh_limit => flimit}, user_data.0.sort_by, user_data.0.sort_dir); FOR item IN item_list %] @@ -11890,7 +11890,7 @@ $$ END; flesh_list = flesh_list _ '}'; - item_list = helpers.sort_bucket_unapi_bre(cbreb.items,{flesh => flesh_list, site => user_data.0.context_org, flesh_limit => flimit}, user_data.0.sort_by); + item_list = helpers.sort_bucket_unapi_bre(cbreb.items,{flesh => flesh_list, site => user_data.0.context_org, flesh_limit => flimit}, user_data.0.sort_by, user_data.0.sort_dir); FOR item IN item_list %]
  • Bib ID# [% item.id %]
    diff --git a/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.AT-def-groups.sql b/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.AT-def-groups.sql index b3c9f93510..573aabb243 100644 --- a/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.AT-def-groups.sql +++ b/Open-ILS/src/sql/Pg/upgrade/XXXX.schema.AT-def-groups.sql @@ -79,7 +79,7 @@ Auto-Submitted: auto-generated END; flesh_list = flesh_list _ '}'; - item_list = helpers.sort_bucket_unapi_bre(cbreb.items,{flesh => flesh_list, site => user_data.0.context_org, flesh_limit => flimit}, user_data.0.sort_by); + item_list = helpers.sort_bucket_unapi_bre(cbreb.items,{flesh => flesh_list, site => user_data.0.context_org, flesh_limit => flimit}, user_data.0.sort_by, user_data.0.sort_dir); FOR item IN item_list %] @@ -123,7 +123,7 @@ UPDATE action_trigger.event_definition SET template = $$ END; flesh_list = flesh_list _ '}'; - item_list = helpers.sort_bucket_unapi_bre(cbreb.items,{flesh => flesh_list, site => user_data.0.context_org, flesh_limit => flimit}, user_data.0.sort_by); + item_list = helpers.sort_bucket_unapi_bre(cbreb.items,{flesh => flesh_list, site => user_data.0.context_org, flesh_limit => flimit}, user_data.0.sort_by, user_data.0.sort_dir); FOR item IN item_list %]
  • Bib ID# [% item.id %]
    diff --git a/Open-ILS/src/templates/opac/record/email_preview.tt2 b/Open-ILS/src/templates/opac/record/email_preview.tt2 index 88718cabf9..969809117f 100644 --- a/Open-ILS/src/templates/opac/record/email_preview.tt2 +++ b/Open-ILS/src/templates/opac/record/email_preview.tt2 @@ -9,7 +9,7 @@
    -
    + @@ -47,6 +47,10 @@ +
    [% END %] diff --git a/Open-ILS/src/templates/opac/record/print_preview.tt2 b/Open-ILS/src/templates/opac/record/print_preview.tt2 index 29b99f060f..8fc58390bb 100644 --- a/Open-ILS/src/templates/opac/record/print_preview.tt2 +++ b/Open-ILS/src/templates/opac/record/print_preview.tt2 @@ -9,7 +9,7 @@
    - + @@ -35,6 +35,10 @@ +
    [% END %] -- 2.11.0