diff --git a/lib/Models/Newsletter.php b/lib/Models/Newsletter.php index 7cf558b487..3ddb979f01 100644 --- a/lib/Models/Newsletter.php +++ b/lib/Models/Newsletter.php @@ -170,45 +170,6 @@ class Newsletter extends Model { return parent::trash(); } - public static function bulkTrash($orm) { - // bulk trash queue and notification history associations - parent::bulkAction($orm, function($ids) { - $children = Newsletter::whereIn('parent_id', $ids)->select('id')->findArray(); - if ($children) { - Newsletter::rawExecute( - 'UPDATE `' . Newsletter::$_table . '` ' . - 'SET `deleted_at` = NOW() ' . - 'WHERE `parent_id` IN (' . join(',', Helpers::flattenArray($ids)) . ')' - ); - ScheduledTask::rawExecute( - 'UPDATE `' . ScheduledTask::$_table . '` t ' . - 'JOIN `' . SendingQueue::$_table . '` q ON t.`id` = q.`task_id` ' . - 'SET t.`deleted_at` = NOW() ' . - 'WHERE q.`newsletter_id` IN (' . join(',', array_merge(Helpers::flattenArray($children), $ids)) . ')' - ); - SendingQueue::rawExecute( - 'UPDATE `' . SendingQueue::$_table . '` ' . - 'SET `deleted_at` = NOW() ' . - 'WHERE `newsletter_id` IN (' . join(',', array_merge(Helpers::flattenArray($children), $ids)) . ')' - ); - } else { - ScheduledTask::rawExecute( - 'UPDATE `' . ScheduledTask::$_table . '` t ' . - 'JOIN `' . SendingQueue::$_table . '` q ON t.`id` = q.`task_id` ' . - 'SET t.`deleted_at` = NOW() ' . - 'WHERE q.`newsletter_id` IN (' . join(',', Helpers::flattenArray($ids)) . ')' - ); - SendingQueue::rawExecute( - 'UPDATE `' . SendingQueue::$_table . '` ' . - 'SET `deleted_at` = NOW() ' . - 'WHERE `newsletter_id` IN (' . join(',', Helpers::flattenArray($ids)) . ')' - ); - } - }); - - return parent::bulkTrash($orm); - } - public function delete() { // delete queue, notification history and segment associations $children = $this->children()->select('id')->findArray(); @@ -233,32 +194,6 @@ class Newsletter extends Model { return parent::delete(); } - public static function bulkDelete($orm) { - // bulk delete queue, notification history and segment associations - parent::bulkAction($orm, function($ids) { - $children = Newsletter::whereIn('parent_id', $ids)->select('id')->findArray(); - if ($children) { - $children = Helpers::flattenArray($children); - Newsletter::whereIn('parent_id', $ids)->deleteMany(); - SendingQueue::getTasks() - ->whereIn('queues.newsletter_id', array_merge($children, $ids)) - ->findResultSet() - ->delete(); - SendingQueue::whereIn('newsletter_id', array_merge($children, $ids))->deleteMany(); - NewsletterSegment::whereIn('newsletter_id', array_merge($children, $ids))->deleteMany(); - } else { - SendingQueue::getTasks() - ->whereIn('queues.newsletter_id', $ids) - ->findResultSet() - ->delete(); - SendingQueue::whereIn('newsletter_id', $ids)->deleteMany(); - NewsletterSegment::whereIn('newsletter_id', $ids)->deleteMany(); - } - }); - - return parent::bulkDelete($orm); - } - public function restore() { // restore trashed queue and notification history associations $children = $this->children()->select('id')->findArray(); @@ -303,52 +238,6 @@ class Newsletter extends Model { return parent::restore(); } - public static function bulkRestore($orm) { - // bulk restore trashed queue and notification history associations - parent::bulkAction($orm, function($ids) { - $children = Newsletter::whereIn('parent_id', $ids)->select('id')->findArray(); - if ($children) { - Newsletter::whereIn('parent_id', $ids) - ->whereNotNull('deleted_at') - ->findResultSet() - ->set('deleted_at', null) - ->save(); - SendingQueue::getTasks() - ->whereIn('queues.newsletter_id', Helpers::flattenArray($children)) - ->whereNotNull('tasks.deleted_at') - ->findResultSet() - ->set('deleted_at', null) - ->save(); - SendingQueue::whereIn('newsletter_id', Helpers::flattenArray($children)) - ->whereNotNull('deleted_at') - ->findResultSet() - ->set('deleted_at', null) - ->save(); - } else { - SendingQueue::getTasks() - ->whereIn('queues.newsletter_id', $ids) - ->whereNotNull('tasks.deleted_at') - ->findResultSet() - ->set('deleted_at', null) - ->save(); - // Pause associated running scheduled tasks - SendingQueue::getTasks() - ->whereIn('queues.newsletter_id', $ids) - ->whereNull('tasks.status') - ->findResultSet() - ->set('status', ScheduledTaskEntity::STATUS_PAUSED) - ->save(); - SendingQueue::whereIn('newsletter_id', $ids) - ->whereNotNull('deleted_at') - ->findResultSet() - ->set('deleted_at', null) - ->save(); - } - }); - - return parent::bulkRestore($orm); - } - public function setStatus($status = null) { if ($status === self::STATUS_ACTIVE) { if (!$this->body || empty(json_decode($this->body))) { diff --git a/tests/integration/Models/NewsletterTest.php b/tests/integration/Models/NewsletterTest.php index 094bb1ff20..7c5e822df1 100644 --- a/tests/integration/Models/NewsletterTest.php +++ b/tests/integration/Models/NewsletterTest.php @@ -487,177 +487,6 @@ class NewsletterTest extends \MailPoetTest { expect(SendingQueue::whereNull('deleted_at')->findArray())->count(6); } - public function testItTrashesAllQueueAssociationsWhenNewslettersAreBulkTrashed() { - // create multiple newsletters and sending queues - for ($i = 1; $i <= 5; $i++) { - $newsletter = Newsletter::createOrUpdate( - [ - 'subject' => 'test', - 'type' => Newsletter::TYPE_STANDARD, - ] - ); - $sendingQueue = SendingTask::create(); - $sendingQueue->newsletterId = $newsletter->id; - $sendingQueue->save(); - } - // 5 queues/newsletters + 1 of each created in _before() method - expect(Newsletter::whereNull('deleted_at')->findArray())->count(6); - expect(SendingQueue::whereNull('deleted_at')->findArray())->count(6); - - // bulk trash newsletters and check that relations are trashed - Newsletter::bulkTrash(ORM::forTable(Newsletter::$_table)); - expect(Newsletter::whereNotNull('deleted_at')->findArray())->count(6); - expect(SendingQueue::whereNotNull('deleted_at')->findArray())->count(6); - } - - public function testItTrashesAllChildrenQueueAssociationsWhenParentNewslettersAreBulkTrashed() { - // create multiple children (post notification history) newsletters and sending queues - for ($i = 1; $i <= 5; $i++) { - $newsletter = Newsletter::createOrUpdate( - [ - 'subject' => 'test', - 'type' => Newsletter::TYPE_NOTIFICATION_HISTORY, - 'parent_id' => $this->newsletter->id, - ] - ); - $sendingQueue = SendingTask::create(); - $sendingQueue->newsletterId = $newsletter->id; - $sendingQueue->save(); - } - // 5 queues/newsletters + 1 of each created in _before() method - expect(Newsletter::whereNull('deleted_at')->findArray())->count(6); - expect(SendingQueue::whereNull('deleted_at')->findArray())->count(6); - - // bulk trash parent newsletters and check that relations are trashed - Newsletter::bulkTrash(ORM::forTable(Newsletter::$_table)); - expect(Newsletter::whereNotNull('deleted_at')->findArray())->count(6); - expect(SendingQueue::whereNotNull('deleted_at')->findArray())->count(6); - } - - public function testItBulkRestoresTrashedQueueAssociationsWhenNewslettersAreBulkRestored() { - // create multiple newsletters and sending queues - $sendingTasks = []; - for ($i = 1; $i <= 5; $i++) { - $newsletter = Newsletter::createOrUpdate( - [ - 'subject' => 'test', - 'type' => Newsletter::TYPE_STANDARD, - 'deleted_at' => date('Y-m-d H:i:s'), - ] - ); - $sendingTask = SendingTask::create(); - $sendingTask->newsletterId = $newsletter->id; - $sendingTask->deletedAt = date('Y-m-d H:i:s'); - $sendingTask->status = ScheduledTask::STATUS_SCHEDULED; - $sendingTask->save(); - $sendingTasks[] = $sendingTask; - } - - $inProgressSendingTask = $sendingTasks[0]; - $inProgressSendingTask->status = null; - $inProgressSendingTask->save(); - - expect(Newsletter::whereNotNull('deleted_at')->findArray())->count(5); - expect(SendingQueue::whereNotNull('deleted_at')->findArray())->count(5); - // Expect one deleted task to be running - expect(ScheduledTask::whereNotNull('deleted_at')->whereNull('status')->findArray())->count(1); - - // bulk restore newsletters and check that relations are restored - Newsletter::bulkRestore(ORM::forTable(Newsletter::$_table)); - // 5 queues/newsletters + 1 of each created in _before() method - expect(Newsletter::whereNull('deleted_at')->findArray())->count(6); - expect(SendingQueue::whereNull('deleted_at')->findArray())->count(6); - // Expect the previously running task to be paused - expect(ScheduledTask::where('status', ScheduledTask::STATUS_PAUSED)->findArray())->count(1); - } - - public function testItBulkRestoresTrashedChildrenQueueAssociationsWhenParentNewslettersAreBulkRestored() { - // create multiple children (post notification history) newsletters and sending queues - for ($i = 1; $i <= 5; $i++) { - $newsletter = Newsletter::createOrUpdate( - [ - 'subject' => 'test', - 'type' => Newsletter::TYPE_NOTIFICATION_HISTORY, - 'parent_id' => $this->newsletter->id, - 'deleted_at' => date('Y-m-d H:i:s'), - ] - ); - $sendingQueue = SendingTask::create(); - $sendingQueue->newsletterId = $newsletter->id; - $sendingQueue->deletedAt = date('Y-m-d H:i:s'); - $sendingQueue->save(); - } - expect(Newsletter::whereNotNull('deleted_at')->findArray())->count(5); - expect(SendingQueue::whereNotNull('deleted_at')->findArray())->count(5); - - // bulk restore parent newsletters and check that relations are restored - Newsletter::bulkRestore(ORM::forTable(Newsletter::$_table)); - // 1 parent and 5 queues/newsletters - expect(Newsletter::whereNull('deleted_at')->findArray())->count(6); - expect(SendingQueue::whereNull('deleted_at')->findArray())->count(6); - } - - public function testItBulkDeletesSegmentAndQueueAssociationsWhenNewslettersAreBulkDeleted() { - // create multiple newsletters, sending queues and newsletter segments - for ($i = 1; $i <= 5; $i++) { - $newsletter = Newsletter::createOrUpdate( - [ - 'subject' => 'test', - 'type' => Newsletter::TYPE_STANDARD, - ] - ); - $sendingQueue = SendingTask::create(); - $sendingQueue->newsletterId = $newsletter->id; - $sendingQueue->save(); - $newsletterSegment = NewsletterSegment::create(); - $newsletterSegment->newsletterId = $newsletter->id; - $newsletterSegment->segmentId = 1; - $newsletterSegment->save(); - } - // 5 queues/newsletters + 1 of each created in _before() method - expect(Newsletter::findArray())->count(6); - expect(SendingQueue::findArray())->count(6); - // 5 segment associations + 2 created in _before() method - expect(NewsletterSegment::findArray())->count(7); - - // 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); - } - - public function testItBulkDeletesChildrenSegmentAndQueueAssociationsWhenParentNewslettersAreBulkDeleted() { - $this->_after(); - // create multiple children (post notification history) newsletters, sending queues and newsletter segments - for ($i = 1; $i <= 5; $i++) { - $newsletter = Newsletter::createOrUpdate( - [ - 'subject' => 'test', - 'type' => Newsletter::TYPE_NOTIFICATION_HISTORY, - 'parent_id' => $this->newsletter->id, - ] - ); - $sendingQueue = SendingTask::create(); - $sendingQueue->newsletterId = $newsletter->id; - $sendingQueue->save(); - $newsletterSegment = NewsletterSegment::create(); - $newsletterSegment->newsletterId = $newsletter->id; - $newsletterSegment->segmentId = 1; - $newsletterSegment->save(); - } - // 5 queues/newsletters/segment associations - 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); - } - public function testItDuplicatesNewsletter() { $originalNewsletter = $this->newsletter; $originalNewsletter->status = Newsletter::STATUS_SENT;