Sets newsletter status to draft when it's unscheduled
This commit is contained in:
@@ -65,13 +65,11 @@ class Newsletters extends APIEndpoint {
|
|||||||
$newsletter = Newsletter::createOrUpdate($data);
|
$newsletter = Newsletter::createOrUpdate($data);
|
||||||
$errors = $newsletter->getErrors();
|
$errors = $newsletter->getErrors();
|
||||||
|
|
||||||
if(!empty($errors)) {
|
if(!empty($errors)) return $this->badRequest($errors);
|
||||||
return $this->badRequest($errors);
|
|
||||||
} else {
|
|
||||||
if(!empty($segments)) {
|
if(!empty($segments)) {
|
||||||
NewsletterSegment::where('newsletter_id', $newsletter->id)
|
NewsletterSegment::where('newsletter_id', $newsletter->id)
|
||||||
->deleteMany();
|
->deleteMany();
|
||||||
|
|
||||||
foreach($segments as $segment) {
|
foreach($segments as $segment) {
|
||||||
if(!is_array($segment)) continue;
|
if(!is_array($segment)) continue;
|
||||||
$relation = NewsletterSegment::create();
|
$relation = NewsletterSegment::create();
|
||||||
@@ -86,7 +84,6 @@ class Newsletters extends APIEndpoint {
|
|||||||
'newsletter_type',
|
'newsletter_type',
|
||||||
$newsletter->type
|
$newsletter->type
|
||||||
)->findMany();
|
)->findMany();
|
||||||
|
|
||||||
// update newsletter options
|
// update newsletter options
|
||||||
foreach($option_fields as $option_field) {
|
foreach($option_fields as $option_field) {
|
||||||
if(isset($options[$option_field->name])) {
|
if(isset($options[$option_field->name])) {
|
||||||
@@ -99,11 +96,9 @@ class Newsletters extends APIEndpoint {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// reload newsletter with updated options
|
// reload newsletter with updated options
|
||||||
$newsletter = Newsletter::filter('filterWithOptions')
|
$newsletter = Newsletter::filter('filterWithOptions')
|
||||||
->findOne($newsletter->id);
|
->findOne($newsletter->id);
|
||||||
|
|
||||||
// if this is a post notification, process newsletter options and update its schedule
|
// if this is a post notification, process newsletter options and update its schedule
|
||||||
if($newsletter->type === Newsletter::TYPE_NOTIFICATION) {
|
if($newsletter->type === Newsletter::TYPE_NOTIFICATION) {
|
||||||
// generate the new schedule from options and get the new "next run" date
|
// generate the new schedule from options and get the new "next run" date
|
||||||
@@ -120,16 +115,23 @@ class Newsletters extends APIEndpoint {
|
|||||||
|
|
||||||
$queue = $newsletter->getQueue();
|
$queue = $newsletter->getQueue();
|
||||||
if($queue) {
|
if($queue) {
|
||||||
|
// if newsletter was previously scheduled and is now unscheduled, set its status to DRAFT and delete associated queue record
|
||||||
|
if($newsletter->status === Newsletter::STATUS_SCHEDULED && isset($options['isScheduled']) && empty($options['isScheduled'])) {
|
||||||
|
$queue->delete();
|
||||||
|
$newsletter->status = Newsletter::STATUS_DRAFT;
|
||||||
|
$newsletter->save();
|
||||||
|
} else {
|
||||||
|
$queue->newsletter_rendered_body = null;
|
||||||
$queue->newsletter_rendered_body = null;
|
$queue->newsletter_rendered_body = null;
|
||||||
$queue->newsletter_rendered_subject = null;
|
$queue->newsletter_rendered_subject = null;
|
||||||
$queue->save();
|
$queue->save();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Hooks::doAction('mailpoet_api_newsletters_save_after', $newsletter);
|
Hooks::doAction('mailpoet_api_newsletters_save_after', $newsletter);
|
||||||
|
|
||||||
return $this->successResponse($newsletter->asArray());
|
return $this->successResponse($newsletter->asArray());
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
function setStatus($data = array()) {
|
function setStatus($data = array()) {
|
||||||
$status = (isset($data['status']) ? $data['status'] : null);
|
$status = (isset($data['status']) ? $data['status'] : null);
|
||||||
|
@@ -169,9 +169,9 @@ class NewslettersTest extends \MailPoetTest {
|
|||||||
$sending_queue = SendingQueue::create();
|
$sending_queue = SendingQueue::create();
|
||||||
$sending_queue->newsletter_id = $this->newsletter->id;
|
$sending_queue->newsletter_id = $this->newsletter->id;
|
||||||
$sending_queue->status = SendingQueue::STATUS_SCHEDULED;
|
$sending_queue->status = SendingQueue::STATUS_SCHEDULED;
|
||||||
$sending_queue->newsletter_rendered_body = 'Rendered body ...';
|
$sending_queue->newsletter_rendered_body = array('html' => 'html', 'text' => 'text');
|
||||||
$sending_queue->newsletter_rendered_subject = 'Rendered subject ...';
|
|
||||||
$sending_queue->save();
|
$sending_queue->save();
|
||||||
|
expect($sending_queue->getErrors())->false();
|
||||||
|
|
||||||
$router = new Newsletters();
|
$router = new Newsletters();
|
||||||
$newsletter_data = array(
|
$newsletter_data = array(
|
||||||
@@ -771,6 +771,38 @@ class NewslettersTest extends \MailPoetTest {
|
|||||||
expect((boolean)$preview_link_data['preview'])->true();
|
expect((boolean)$preview_link_data['preview'])->true();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function testItDeletesSendingQueueAndSetsNewsletterStatusToDraftWhenItIsUnscheduled() {
|
||||||
|
$newsletter = $this->newsletter;
|
||||||
|
$newsletter->status = Newsletter::STATUS_SCHEDULED;
|
||||||
|
$newsletter->save();
|
||||||
|
expect($newsletter->getErrors())->false();
|
||||||
|
|
||||||
|
$sending_queue = SendingQueue::create();
|
||||||
|
$sending_queue->newsletter_id = $newsletter->id;
|
||||||
|
$sending_queue->newsletter_rendered_body = array(
|
||||||
|
'html' => 'html',
|
||||||
|
'text' => 'text'
|
||||||
|
);
|
||||||
|
$sending_queue->status = SendingQueue::STATUS_SCHEDULED;
|
||||||
|
$sending_queue->scheduled_at = Carbon::now()->format('Y-m-d H:i');
|
||||||
|
$sending_queue->save();
|
||||||
|
expect($sending_queue->getErrors())->false();
|
||||||
|
|
||||||
|
$newsletter_data = array(
|
||||||
|
'id' => $newsletter->id,
|
||||||
|
'options' => array(
|
||||||
|
'isScheduled' => false
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
$router = new Newsletters();
|
||||||
|
$response = $router->save($newsletter_data);
|
||||||
|
$newsletter = Newsletter::findOne($newsletter->id);
|
||||||
|
$sending_queue = SendingQueue::findOne($sending_queue->id);
|
||||||
|
expect($newsletter->status)->equals(Newsletter::STATUS_DRAFT);
|
||||||
|
expect($sending_queue)->false();
|
||||||
|
}
|
||||||
|
|
||||||
function _after() {
|
function _after() {
|
||||||
WPHooksHelper::releaseAllHooks();
|
WPHooksHelper::releaseAllHooks();
|
||||||
\ORM::raw_execute('TRUNCATE ' . Newsletter::$_table);
|
\ORM::raw_execute('TRUNCATE ' . Newsletter::$_table);
|
||||||
|
Reference in New Issue
Block a user