LP#1749475: Allow control (and propagation) of the sort direction on print/email... collab/dyrcona/lp-1749475-print_email_improvements-rebase
authorMike Rylander <mrylander@gmail.com>
Wed, 23 Jan 2019 18:46:46 +0000 (13:46 -0500)
committerJason Stephenson <jason@sigio.com>
Wed, 20 Feb 2019 14:05:26 +0000 (09:05 -0500)
Signed-off-by: Mike Rylander <mrylander@gmail.com>
Open-ILS/src/perlmods/lib/OpenILS/Application/Search/Biblio.pm
Open-ILS/src/perlmods/lib/OpenILS/Application/Trigger/Reactor.pm
Open-ILS/src/perlmods/lib/OpenILS/Application/Trigger/Reactor/SendEmail.pm
Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Account.pm
Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Container.pm
Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Record.pm
Open-ILS/src/sql/Pg/950.data.seed-values.sql
Open-ILS/src/sql/Pg/upgrade/XXXX.schema.AT-def-groups.sql
Open-ILS/src/templates/opac/record/email_preview.tt2
Open-ILS/src/templates/opac/record/print_preview.tt2

index 4f21bc4..b5435a1 100644 (file)
@@ -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
     };
 
index 3d7fb2e..f011417 100644 (file)
@@ -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 ];
     },
 
index 5a28cb7..10e32e1 100644 (file)
@@ -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;
     }
index c1a7465..a408d1f 100644 (file)
@@ -2640,19 +2640,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);
index 738b4d6..89ccdd0 100644 (file)
@@ -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);
index 303190b..a9e39c2 100644 (file)
@@ -575,18 +575,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},
index 2e0ed74..b168a05 100644 (file)
@@ -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 %]
         <li>
             Bib ID# [% item.id %]<br />
index b3c9f93..573aabb 100644 (file)
@@ -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 %]
         <li>
             Bib ID# [% item.id %]<br />
index 88718ca..9698091 100644 (file)
@@ -9,7 +9,7 @@
     <br class="clear-both" />
     <div id="content-wrapper" class="content-wrapper-record-page">
 
-    <form id="previewForm" method="POST" action="[% mkurl('',{},['locg','format','sort','context_org','bre_id','is_list']) %]">
+    <form id="previewForm" method="POST" action="[% mkurl('',{},['locg','format','sort','sort_dir','context_org','bre_id','is_list']) %]">
         <input type="hidden" name="old_event" value="[% ctx.preview_record.id %]"/>
         <input type="hidden" name="bre_id" value="[% ctx.bre_id %]"/>
         <input type="hidden" name="locg" value="[% ctx.selected_print_email_loc %]"/>
                     <option [% IF ctx.sort == 'title'; 'selected="selected"'; END %] value="title">[% l('Title') %]</option>
                     <option [% IF ctx.sort == 'pubdate'; 'selected="selected"'; END %] value="pubdate">[% l('Publication Date') %]</option>
                 </select>
+                <select id="sort_dir" name="sort_dir">
+                    <option [% IF ctx.sort_dir == 'ascending'; 'selected="selected"'; END %] value="ascending">[% l('Ascending') %]</option>
+                    <option [% IF ctx.sort_dir == 'descending'; 'selected="selected"'; END %] value="descending">[% l('Descending') %]</option>
+                </select>
             </label>
         </div>
         [% END %]
index 29b99f0..8fc5839 100644 (file)
@@ -9,7 +9,7 @@
     <br class="clear-both" />
     <div id="content-wrapper" class="content-wrapper-record-page">
 
-    <form id="previewForm" action="[% mkurl('',{},['locg','format','sort','context_org','bre_id','is_list']) %]">
+    <form id="previewForm" action="[% mkurl('',{},['locg','format','sort','sort_by','context_org','bre_id','is_list']) %]">
         <input type="hidden" name="old_event" value="[% ctx.preview_record.id %]"/>
         <input type="hidden" name="bre_id" value="[% ctx.bre_id %]"/>
         <input type="hidden" name="locg" value="[% ctx.selected_print_email_loc %]"/>
                     <option [% IF ctx.sort == 'title'; 'selected="selected"'; END %] value="title">[% l('Title') %]</option>
                     <option [% IF ctx.sort == 'pubdate'; 'selected="selected"'; END %] value="pubdate">[% l('Publication Date') %]</option>
                 </select>
+                <select id="sort_dir" name="sort_dir">
+                    <option [% IF ctx.sort_dir == 'ascending'; 'selected="selected"'; END %] value="ascending">[% l('Ascending') %]</option>
+                    <option [% IF ctx.sort_dir == 'descending'; 'selected="selected"'; END %] value="descending">[% l('Descending') %]</option>
+                </select>
             </label>
         </div>
         [% END %]