Remove bulk methods from legacy newsletter model
[MAILPOET-2898]
This commit is contained in:
committed by
Veljko V
parent
8a78322854
commit
babb27dd72
@@ -170,45 +170,6 @@ class Newsletter extends Model {
|
|||||||
return parent::trash();
|
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() {
|
public function delete() {
|
||||||
// delete queue, notification history and segment associations
|
// delete queue, notification history and segment associations
|
||||||
$children = $this->children()->select('id')->findArray();
|
$children = $this->children()->select('id')->findArray();
|
||||||
@@ -233,32 +194,6 @@ class Newsletter extends Model {
|
|||||||
return parent::delete();
|
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() {
|
public function restore() {
|
||||||
// restore trashed queue and notification history associations
|
// restore trashed queue and notification history associations
|
||||||
$children = $this->children()->select('id')->findArray();
|
$children = $this->children()->select('id')->findArray();
|
||||||
@@ -303,52 +238,6 @@ class Newsletter extends Model {
|
|||||||
return parent::restore();
|
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) {
|
public function setStatus($status = null) {
|
||||||
if ($status === self::STATUS_ACTIVE) {
|
if ($status === self::STATUS_ACTIVE) {
|
||||||
if (!$this->body || empty(json_decode($this->body))) {
|
if (!$this->body || empty(json_decode($this->body))) {
|
||||||
|
@@ -487,177 +487,6 @@ class NewsletterTest extends \MailPoetTest {
|
|||||||
expect(SendingQueue::whereNull('deleted_at')->findArray())->count(6);
|
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() {
|
public function testItDuplicatesNewsletter() {
|
||||||
$originalNewsletter = $this->newsletter;
|
$originalNewsletter = $this->newsletter;
|
||||||
$originalNewsletter->status = Newsletter::STATUS_SENT;
|
$originalNewsletter->status = Newsletter::STATUS_SENT;
|
||||||
|
Reference in New Issue
Block a user