Deletes all sending queue and segment associations when newsletters are bulk deleted

This commit is contained in:
Vlad
2017-04-27 21:12:18 -04:00
parent 0316f3ea3e
commit e10b99eaac
2 changed files with 47 additions and 0 deletions

View File

@@ -772,4 +772,20 @@ class Newsletter extends Model {
return parent::bulkRestore($orm);
}
static function bulkDelete($orm) {
// bulk delete segment associations
parent::bulkAction($orm, function($ids) {
NewsletterSegment::whereIn('newsletter_id', $ids)
->deleteMany();
});
// bulk delete queue associations
parent::bulkAction($orm, function($ids) {
SendingQueue::whereIn('newsletter_id', $ids)
->deleteMany();
});
return parent::bulkDelete($orm);
}
}

View File

@@ -522,6 +522,37 @@ class NewsletterTest extends MailPoetTest {
}
}
function testItBulkDeletesSegmentAndQueueAssociationsWhenNewslettersAreBulkDeleted() {
// delete default records
$this->_after();
// create multiple newsletters, sending queues and newsletter segments
for($i = 1; $i <= 5; $i++) {
$newsletter = Newsletter::createOrUpdate(
array(
'subject' => 'test',
'type' => Newsletter::TYPE_STANDARD
)
);
$sending_queue = SendingQueue::create();
$sending_queue->newsletter_id = $newsletter->id;
$sending_queue->save();
$newsletter_segment = NewsletterSegment::create();
$newsletter_segment->newsletter_id = $newsletter->id;
$newsletter_segment->segment_id = 1;
$newsletter_segment->save();
}
expect(Newsletter::findArray())->count(5);
expect(SendingQueue::findArray())->count(5);
expect(NewsletterSegment::findArray())->count(5);
// bulk delete newsletters and check that relations are deleted
Newsletter::bulkDelete(ORM::forTable(Newsletter::$_table));
expect(Newsletter::findArray())->count(0);
expect(SendingQueue::findArray())->count(0);
expect(NewsletterSegment::findArray())->count(0);
}
function _after() {
ORM::raw_execute('TRUNCATE ' . NewsletterOption::$_table);
ORM::raw_execute('TRUNCATE ' . Newsletter::$_table);