From 0316f3ea3ea98ffe432832f3bcf4d77418d0a56f Mon Sep 17 00:00:00 2001 From: Vlad Date: Thu, 27 Apr 2017 21:00:16 -0400 Subject: [PATCH] Restores all sending queue associations when newsletters are bulk restored --- lib/Models/Newsletter.php | 10 ++++++++++ tests/unit/Models/NewsletterTest.php | 30 ++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/lib/Models/Newsletter.php b/lib/Models/Newsletter.php index 8942cde3bd..ee2a661448 100644 --- a/lib/Models/Newsletter.php +++ b/lib/Models/Newsletter.php @@ -753,6 +753,15 @@ class Newsletter extends Model { } static function bulkRestore($orm) { + // bulk restore trashed queue associations + parent::bulkAction($orm, function($ids) { + SendingQueue::whereIn('newsletter_id', $ids) + ->whereNotNull('deleted_at') + ->findResultSet() + ->set('deleted_at', null) + ->save(); + }); + parent::bulkAction($orm, function($ids) { Newsletter::whereIn('id', $ids) ->where('status', Newsletter::STATUS_SENDING) @@ -760,6 +769,7 @@ class Newsletter extends Model { ->set('status', Newsletter::STATUS_DRAFT) ->save(); }); + return parent::bulkRestore($orm); } } diff --git a/tests/unit/Models/NewsletterTest.php b/tests/unit/Models/NewsletterTest.php index 1bc875e3dd..471266558a 100644 --- a/tests/unit/Models/NewsletterTest.php +++ b/tests/unit/Models/NewsletterTest.php @@ -492,6 +492,36 @@ class NewsletterTest extends MailPoetTest { } } + function testItBulkRestoresTrashedQueueAssociationsWhenNewslettersAreBulkRestored() { + // delete default records + $this->_after(); + + // create multiple newsletters and sending queues + for($i = 1; $i <= 5; $i++) { + $newsletter = Newsletter::createOrUpdate( + array( + 'subject' => 'test', + 'type' => Newsletter::TYPE_STANDARD, + 'deleted_at' => date('Y-m-d H:i:s') + ) + ); + $sending_queue = SendingQueue::create(); + $sending_queue->newsletter_id = $newsletter->id; + $sending_queue->deleted_at = date('Y-m-d H:i:s'); + $sending_queue->save(); + } + expect(Newsletter::findArray())->count(5); + expect(SendingQueue::findArray())->count(5); + + // bulk restore newsletters and check that relations are restored + Newsletter::bulkRestore(ORM::forTable(Newsletter::$_table)); + $newsletters = Newsletter::findMany(); + foreach($newsletters as $newsletter) { + expect($newsletter->deleted_at)->null(); + expect($newsletter->queue()->findOne()->deleted_at)->null(); + } + } + function _after() { ORM::raw_execute('TRUNCATE ' . NewsletterOption::$_table); ORM::raw_execute('TRUNCATE ' . Newsletter::$_table);