Merge pull request #1256 from mailpoet/bugfix

fixing Segment::bulkDelete not deleting subscribers assiciations [MAILPOET-1287]
This commit is contained in:
stoletniy
2018-02-05 17:53:04 +03:00
committed by GitHub
3 changed files with 19 additions and 1 deletions

View File

@ -258,9 +258,15 @@ class Segment extends Model {
static function bulkDelete($orm) {
$count = parent::bulkAction($orm, function($ids) {
// delete segments (only default)
Segment::whereIn('id', $ids)
$segments = Segment::whereIn('id', $ids)
->where('type', Segment::TYPE_DEFAULT)
->findMany();
$ids = array_map(function($segment) {
return $segment->id;
}, $segments);
SubscriberSegment::whereIn('segment_id', $ids)
->deleteMany();
Segment::whereIn('id', $ids)->deleteMany();
});
return array('count' => $count);

View File

@ -13,6 +13,7 @@ use MailPoet\Models\NewsletterOption;
use MailPoet\Models\NewsletterOptionField;
use MailPoet\Models\NewsletterSegment;
use MailPoet\Models\Segment;
use MailPoet\Models\SubscriberSegment;
use MailPoet\Models\SendingQueue;
use MailPoet\Newsletter\Scheduler\Scheduler;
use MailPoet\Newsletter\Url;
@ -816,6 +817,7 @@ class NewslettersTest extends \MailPoetTest {
\ORM::raw_execute('TRUNCATE ' . NewsletterSegment::$_table);
\ORM::raw_execute('TRUNCATE ' . NewsletterOptionField::$_table);
\ORM::raw_execute('TRUNCATE ' . Segment::$_table);
\ORM::raw_execute('TRUNCATE ' . SubscriberSegment::$_table);
\ORM::raw_execute('TRUNCATE ' . SendingQueue::$_table);
}
}

View File

@ -4,6 +4,8 @@ namespace MailPoet\Test\API\JSON\v1;
use MailPoet\API\JSON\v1\Segments;
use MailPoet\API\JSON\Response as APIResponse;
use MailPoet\Models\Segment;
use MailPoet\Models\Subscriber;
use MailPoet\Models\SubscriberSegment;
class SegmentsTest extends \MailPoetTest {
function _before() {
@ -122,6 +124,12 @@ class SegmentsTest extends \MailPoetTest {
}
function testItCanBulkDeleteSegments() {
$subscriber_segment = SubscriberSegment::create(array(
'subscriber_id' => 1,
'segment_id' => $this->segment_1->id,
'status' => Subscriber::STATUS_SUBSCRIBED
));
$router = new Segments();
$response = $router->bulkAction(array(
'action' => 'trash',
@ -145,6 +153,8 @@ class SegmentsTest extends \MailPoetTest {
));
expect($response->status)->equals(APIResponse::STATUS_OK);
expect($response->meta['count'])->equals(0);
expect(SubscriberSegment::findOne($subscriber_segment->id))->equals(false);
}
function _after() {