Commit 0813c72b authored by joubu's avatar joubu Committed by Brendan A Gallagher

Bug 12426: Simplify the code adding a new subroutine GetMessage

The C4::Letters module does not have a GetMessage subroutine, which
could be quite useful.
This patch adds it and simplifies the code added by the previous patch.
It also adds a few tests and fixes POD typos.

Note that ResendNotice only resends failed messages. This will avoid to
resend already sent messages (using an url from the browser history for
instance).
Signed-off-by: default avatarBrendan A Gallagher <brendan@bywatersolutions.com>
parent 05ea6ba1
......@@ -1094,11 +1094,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.
......@@ -1109,11 +1126,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
......
......@@ -71,7 +71,7 @@
<td>
[% IF ( QUEUED_MESSAGE.status == 'sent' ) %]sent
[% ELSIF ( QUEUED_MESSAGE.status == 'pending' ) %]pending
[% ELSIF ( QUEUED_MESSAGE.status == 'failed' ) %]failed <div class="notice"><a href="/cgi-bin/koha/members/notices.pl?borrowernumber=[% borrowernumber %]&resendnotice=[% QUEUED_MESSAGE.message_id %]" title="Attempt to resend the notice">Resend</a></div>
[% ELSIF ( QUEUED_MESSAGE.status == 'failed' ) %]failed <div class="notice"><a href="/cgi-bin/koha/members/notices.pl?borrowernumber=[% borrowernumber %]&amp;op=resend_notice&amp;message_id=[% QUEUED_MESSAGE.message_id %]" title="Attempt to resend the notice">Resend</a></div>
[% ELSIF ( QUEUED_MESSAGE.status == 'deleted' ) %]deleted
[% ELSE %][% QUEUED_MESSAGE.status %][% END %]
</td>
......
......@@ -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(
......
......@@ -18,7 +18,7 @@
# along with Koha; if not, see <http://www.gnu.org/licenses>.
use Modern::Perl;
use Test::More tests => 69;
use Test::More tests => 72;
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();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment