diff --git a/lib/Models/Newsletter.php b/lib/Models/Newsletter.php index ee2a661448..1138100f54 100644 --- a/lib/Models/Newsletter.php +++ b/lib/Models/Newsletter.php @@ -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); + } } diff --git a/tests/unit/Models/NewsletterTest.php b/tests/unit/Models/NewsletterTest.php index 471266558a..e77a0ad7e1 100644 --- a/tests/unit/Models/NewsletterTest.php +++ b/tests/unit/Models/NewsletterTest.php @@ -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);