Set newsletter status as draft when restoring newsletters trashed during sending [MAILPOET-816]
This commit is contained in:
@ -715,4 +715,23 @@ class Newsletter extends Model {
|
|||||||
self::NEWSLETTER_HASH_LENGTH
|
self::NEWSLETTER_HASH_LENGTH
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function restore() {
|
||||||
|
if ($this->status == self::STATUS_SENDING) {
|
||||||
|
$this->set('status', self::STATUS_DRAFT);
|
||||||
|
$this->save();
|
||||||
|
}
|
||||||
|
return parent::restore();
|
||||||
|
}
|
||||||
|
|
||||||
|
static function bulkRestore($orm) {
|
||||||
|
parent::bulkAction($orm, function($ids) {
|
||||||
|
Newsletter::whereIn('id', $ids)
|
||||||
|
->where('status', Newsletter::STATUS_SENDING)
|
||||||
|
->findResultSet()
|
||||||
|
->set('status', Newsletter::STATUS_DRAFT)
|
||||||
|
->save();
|
||||||
|
});
|
||||||
|
return parent::bulkRestore($orm);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -136,6 +136,9 @@ abstract class ValidModel extends \Model {
|
|||||||
} else {
|
} else {
|
||||||
$this->validateAndSet($key, $value);
|
$this->validateAndSet($key, $value);
|
||||||
}
|
}
|
||||||
|
// we should return $this to not break Idiorm's fluent interface:
|
||||||
|
// $model->set('property', 'foo')->save();
|
||||||
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@ class NewsletterTest extends MailPoetTest {
|
|||||||
$this->newsletter = Newsletter::createOrUpdate(array(
|
$this->newsletter = Newsletter::createOrUpdate(array(
|
||||||
'subject' => 'My Standard Newsletter',
|
'subject' => 'My Standard Newsletter',
|
||||||
'preheader' => 'Pre Header',
|
'preheader' => 'Pre Header',
|
||||||
'type' => 'standard'
|
'type' => Newsletter::TYPE_STANDARD
|
||||||
));
|
));
|
||||||
|
|
||||||
$this->segment_1 = Segment::createOrUpdate(array(
|
$this->segment_1 = Segment::createOrUpdate(array(
|
||||||
@ -162,7 +162,7 @@ class NewsletterTest extends MailPoetTest {
|
|||||||
$is_created = Newsletter::createOrUpdate(
|
$is_created = Newsletter::createOrUpdate(
|
||||||
array(
|
array(
|
||||||
'subject' => 'new newsletter',
|
'subject' => 'new newsletter',
|
||||||
'type' => 'standard',
|
'type' => Newsletter::TYPE_STANDARD,
|
||||||
'body' => 'body'
|
'body' => 'body'
|
||||||
));
|
));
|
||||||
expect($is_created->id() > 0)->true();
|
expect($is_created->id() > 0)->true();
|
||||||
@ -246,7 +246,7 @@ class NewsletterTest extends MailPoetTest {
|
|||||||
Newsletter::createOrUpdate(
|
Newsletter::createOrUpdate(
|
||||||
array(
|
array(
|
||||||
'subject' => 'search for "pineapple"',
|
'subject' => 'search for "pineapple"',
|
||||||
'type' => 'standard',
|
'type' => Newsletter::TYPE_STANDARD,
|
||||||
'body' => 'body'
|
'body' => 'body'
|
||||||
));
|
));
|
||||||
$newsletter = Newsletter::filter('search', 'pineapple')
|
$newsletter = Newsletter::filter('search', 'pineapple')
|
||||||
@ -384,6 +384,50 @@ class NewsletterTest extends MailPoetTest {
|
|||||||
expect($this->newsletter->queue()->findOne()->id)->equals($queue->id);
|
expect($this->newsletter->queue()->findOne()->id)->equals($queue->id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function testItCanBeRestored() {
|
||||||
|
$this->newsletter->status = Newsletter::STATUS_SENT;
|
||||||
|
$this->newsletter->trash();
|
||||||
|
expect($this->newsletter->deleted_at)->notNull();
|
||||||
|
$this->newsletter->restore();
|
||||||
|
expect($this->newsletter->deleted_at)->equals('NULL');
|
||||||
|
expect($this->newsletter->status)->equals(Newsletter::STATUS_SENT);
|
||||||
|
|
||||||
|
// if the restored newsletter was trashed while in sending,
|
||||||
|
// its status should be set to 'draft' to be able to send it again
|
||||||
|
$this->newsletter->status = Newsletter::STATUS_SENDING;
|
||||||
|
$this->newsletter->trash();
|
||||||
|
$this->newsletter->restore();
|
||||||
|
expect($this->newsletter->status)->equals(Newsletter::STATUS_DRAFT);
|
||||||
|
}
|
||||||
|
|
||||||
|
function testItCanBulkRestoreNewsletters() {
|
||||||
|
$statuses = array(
|
||||||
|
Newsletter::STATUS_DRAFT,
|
||||||
|
Newsletter::STATUS_SENT,
|
||||||
|
Newsletter::STATUS_SENDING
|
||||||
|
);
|
||||||
|
|
||||||
|
$newsletters = array();
|
||||||
|
for($i = 0; $i < count($statuses); $i++) {
|
||||||
|
$newsletters[$i] = Newsletter::createOrUpdate(
|
||||||
|
array(
|
||||||
|
'subject' => 'Test',
|
||||||
|
'preheader' => 'Some text',
|
||||||
|
'type' => Newsletter::TYPE_STANDARD,
|
||||||
|
'status' => $statuses[$i]
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Newsletter::filter('bulkTrash');
|
||||||
|
expect(Newsletter::whereNull('deleted_at')->findArray())->isEmpty();
|
||||||
|
expect(Newsletter::where('status', Newsletter::STATUS_SENDING)->findArray())->count(1);
|
||||||
|
|
||||||
|
Newsletter::filter('bulkRestore');
|
||||||
|
expect(Newsletter::whereNotNull('deleted_at')->findArray())->isEmpty();
|
||||||
|
expect(Newsletter::where('status', Newsletter::STATUS_SENDING)->findArray())->count(0);
|
||||||
|
}
|
||||||
|
|
||||||
function _after() {
|
function _after() {
|
||||||
ORM::raw_execute('TRUNCATE ' . NewsletterOption::$_table);
|
ORM::raw_execute('TRUNCATE ' . NewsletterOption::$_table);
|
||||||
ORM::raw_execute('TRUNCATE ' . Newsletter::$_table);
|
ORM::raw_execute('TRUNCATE ' . Newsletter::$_table);
|
||||||
|
Reference in New Issue
Block a user