diff --git a/lib/WebGUI/Mailing.pm b/lib/WebGUI/Mailing.pm index 90bc27c..56b0a5a 100644 --- a/lib/WebGUI/Mailing.pm +++ b/lib/WebGUI/Mailing.pm @@ -8,6 +8,24 @@ use WebGUI::Mailing::Admin; use base 'WebGUI::Crud'; +sub canCancel { + my $self = shift; + + return 1 if $self->get('state') eq 'scheduled'; + return 0; +} + +sub cancel { + my $self = shift; + + $self->update( { + state => 'idle', + sendDate => undef, + } ); + + return; +} + sub crud_definition { my $class = shift; my $session = shift; @@ -162,6 +180,17 @@ sub sendQueuedEmails { return 1; } +sub www_cancel { + my $self = shift; + my $session = $self->session; + + return 'Cannot cancel mailing ['.$self->getId.']' unless $self->canCancel; + + $self->cancel; + + return WebGUI::Mailing::Admin->new($session)->www_view; +} + sub www_delete { my $self = shift; my $session = $self->session; diff --git a/lib/WebGUI/Mailing/Admin.pm b/lib/WebGUI/Mailing/Admin.pm index 793508c..404c080 100644 --- a/lib/WebGUI/Mailing/Admin.pm +++ b/lib/WebGUI/Mailing/Admin.pm @@ -129,6 +129,7 @@ sub www_view { editUrl => $url->page('newsletter=mailing;func=edit;id='.$mailing->getId ), deleteUrl => $url->page('newsletter=mailing;func=delete;id='.$mailing->getId ), previewUrl => $url->page('newsletter=mailing;func=previewEmail;id='.$mailing->getId ), + cancelUrl => $url->page('newsletter=mailing;func=cancel;id='.$mailing->getId ), }; };