@@ -, +, @@ GetMessage --- C4/Letters.pm | 37 ++++++++++++++++++---- .../prog/en/modules/members/notices.tt | 2 +- members/notices.pl | 26 ++++++--------- t/db_dependent/Letters.t | 13 +++++--- 4 files changed, 50 insertions(+), 28 deletions(-) --- a/C4/Letters.pm +++ a/C4/Letters.pm @@ -1085,11 +1085,28 @@ sub GetMessageTransportTypes { return $mtts; } +=head2 GetMessage + + my $message = C4::Letters::Message($message_id); + +=cut + +sub GetMessage { + my ( $message_id ) = @_; + return unless $message_id; + my $dbh = C4::Context->dbh; + return $dbh->selectrow_hashref(q| + SELECT message_id, borrowernumber, subject, content, metadata, letter_code, message_transport_type, status, time_queued, to_address, from_address, content_type + FROM message_queue + WHERE message_id = ? + |, {}, $message_id ); +} + =head2 ResendMessage - Attempt to resend a message. + Attempt to resend a message which has failed previously. - my $message_id = C4::Letters::ResendMessage(123); + my $has_been_resent = C4::Letters::ResendMessage($message_id); Updates the message to 'pending' status so that it will be resent later on. @@ -1100,11 +1117,17 @@ sub GetMessageTransportTypes { sub ResendMessage { my $message_id = shift; - - return ((C4::Letters::_set_message_status( { - message_id => $message_id, - status => 'pending', - } ) > 0) ? 1:0); + return unless $message_id; + + 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; } =head2 _add_attachements --- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/notices.tt +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/members/notices.tt @@ -71,7 +71,7 @@ [% 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
Resend
[% ELSIF ( QUEUED_MESSAGE.status == 'deleted' ) %]deleted [% ELSE %][% QUEUED_MESSAGE.status %][% END %] --- a/members/notices.pl +++ a/members/notices.pl @@ -49,25 +49,19 @@ $template->param( $borrower ); my ($picture, $dberror) = GetPatronImage($borrower->{'borrowernumber'}); $template->param( picture => 1 ) if $picture; -# Getting the messages -my $queued_messages = C4::Letters::GetQueuedMessages({borrowernumber => $borrowernumber}); - -# Bug 12426 - Allow resending of messages in Notices tab -if ($input->param('resendnotice')) { - foreach my $message (@$queued_messages){ - # resendnotice must be in this borrower's queue - we don't want to make it - # possible to change any message just by changing resendnotice id. - if ($message->{message_id} == $input->param('resendnotice')) { - # We also only want to resend messages in failed status - last unless $message->{status} eq "failed"; - - # Modify the message in $queued_message to have its new pending status - $message->{status} = 'pending' if (C4::Letters::ResendMessage($message->{message_id})); - last; - } +# Allow resending of messages in Notices tab +my $op = $input->param('op') || q{}; +if ( $op eq 'resend_notice' ) { + my $message_id = $input->param('message_id'); + my $message = C4::Letters::GetMessage( $message_id ); + if ( $message->{borrowernumber} = $borrowernumber ) { + C4::Letters::ResendMessage( $message_id ); } } +# Getting the messages +my $queued_messages = C4::Letters::GetQueuedMessages({borrowernumber => $borrowernumber}); + if (C4::Context->preference('ExtendedPatronAttributes')) { my $attributes = GetBorrowerAttributes($borrowernumber); $template->param( --- a/t/db_dependent/Letters.t +++ a/t/db_dependent/Letters.t @@ -18,7 +18,7 @@ # along with Koha; if not, see . use Modern::Perl; -use Test::More tests => 70; +use Test::More tests => 73; use Test::MockModule; use Test::Warn; @@ -138,9 +138,14 @@ is( ); # ResendMessage -C4::Letters::ResendMessage($messages->[0]->{message_id}); -$messages = C4::Letters::GetQueuedMessages({ borrowernumber => $borrowernumber }); -is($messages->[0]->{status},'pending', 'ResendMessage sets status to pending correctly (bug 12426)'); +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' ); # GetLetters my $letters = C4::Letters::GetLetters(); --