From ec716f984db6577eddfb9893ffc276f94046b046 Mon Sep 17 00:00:00 2001 From: Lari Taskula Date: Wed, 16 Sep 2015 18:31:57 +0300 Subject: [PATCH] Bug 12426: Allow resend for sent messages This patch allows to resend both sent and failed messages. With messages in 'sent' status, we have to be careful not to accidentally send sent messages again. With the previous patch using GET request, this was likely to happen because of browser storing the GET parameters. This patch changes request method from GET to POST. Instead of a simple link, we now have a form element. In notices.pl we redirect back to notices.pl, because with POST there is a risk of resending the message accidentally by form resubmission at refresh. To test, find/create a Patron that has failed notices in message_queue: 1. Enable EnchancedMessagingPreferences system preference 2. Go to Patrons -> Notices 3. In the Notice column, click the title of the failed message 4. Observe that there is nothing for resending the failed message 5. Apply patch. 6. Reload Notices page and repeat step 3 7. Observe that there is now a link "Resend" in the Status-column 8. Click Resend 9. Observe that the message gets into 'pending' status --- C4/Letters.pm | 13 ++++++------- koha-tmpl/intranet-tmpl/prog/en/modules/members/notices.tt | 13 ++++++++++++- members/notices.pl | 2 ++ t/db_dependent/Letters.t | 4 +--- 4 files changed, 21 insertions(+), 11 deletions(-) diff --git a/C4/Letters.pm b/C4/Letters.pm index f0d7aa3..012468a 100644 --- a/C4/Letters.pm +++ b/C4/Letters.pm @@ -1096,13 +1096,12 @@ sub ResendMessage { my $message = GetMessage( $message_id ); return unless $message; - if ( $message->{status} eq 'failed' ) { - return ((C4::Letters::_set_message_status( { - message_id => $message_id, - status => 'pending', - } ) > 0) ? 1:0); - } - return 0; + + return ((C4::Letters::_set_message_status( { + message_id => $message_id, + status => 'pending', + } ) > 0) ? 1:0); + } =head2 _add_attachements diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/members/notices.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/members/notices.tt index 189209c..9028bde 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/notices.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/members/notices.tt @@ -70,9 +70,20 @@ [% IF ( QUEUED_MESSAGE.status == 'sent' ) %]sent [% ELSIF ( QUEUED_MESSAGE.status == 'pending' ) %]pending - [% ELSIF ( QUEUED_MESSAGE.status == 'failed' ) %]failed
Resend
+ [% ELSIF ( QUEUED_MESSAGE.status == 'failed' ) %]failed [% ELSIF ( QUEUED_MESSAGE.status == 'deleted' ) %]deleted [% ELSE %][% QUEUED_MESSAGE.status %][% END %] + + [% IF ( QUEUED_MESSAGE.status != 'pending' ) %] +
+
+ + + + Resend +
+
+ [% END %] [% QUEUED_MESSAGE.time_queued | $KohaDates with_hours => 1 %] diff --git a/members/notices.pl b/members/notices.pl index 2fdbe88..95595ef 100755 --- a/members/notices.pl +++ b/members/notices.pl @@ -58,6 +58,8 @@ if ( $op eq 'resend_notice' ) { my $message = C4::Letters::GetMessage( $message_id ); if ( $message->{borrowernumber} = $borrowernumber ) { C4::Letters::ResendMessage( $message_id ); + # redirect to self to avoid form submission on refresh + print $input->redirect("/cgi-bin/koha/members/notices.pl?borrowernumber=$borrowernumber"); } } diff --git a/t/db_dependent/Letters.t b/t/db_dependent/Letters.t index 78cb458..bab3977 100644 --- a/t/db_dependent/Letters.t +++ b/t/db_dependent/Letters.t @@ -18,7 +18,7 @@ # along with Koha; if not, see . use Modern::Perl; -use Test::More tests => 69; +use Test::More tests => 68; use Test::MockModule; use Test::Warn; @@ -141,8 +141,6 @@ my $resent = C4::Letters::ResendMessage($messages->[0]->{message_id}); my $message = C4::Letters::GetMessage( $messages->[0]->{message_id}); is( $resent, 1, 'The message should have been resent' ); is($message->{status},'pending', 'ResendMessage sets status to pending correctly (bug 12426)'); -$resent = C4::Letters::ResendMessage($messages->[0]->{message_id}); -is( $resent, 0, 'The message should not have been resent again' ); $resent = C4::Letters::ResendMessage(); is( $resent, undef, 'ResendMessage should return undef if not message_id given' ); -- 1.9.1