Merge pull request #792 from mailpoet/remove_all_lists_fix
Fix 'Subscribers without a list' filter not showing unsubscribed subscribers [MAILPOET-789]
This commit is contained in:
@@ -280,7 +280,9 @@ class Subscriber extends Model {
|
|||||||
'value' => ''
|
'value' => ''
|
||||||
);
|
);
|
||||||
|
|
||||||
$subscribers_without_segment = self::filter('withoutSegments')->count();
|
$subscribers_without_segment = self::filter('withoutSegments')
|
||||||
|
->whereNull('deleted_at')
|
||||||
|
->count();
|
||||||
$subscribers_without_segment_label = sprintf(
|
$subscribers_without_segment_label = sprintf(
|
||||||
__('Subscribers without a list (%s)', 'mailpoet'),
|
__('Subscribers without a list (%s)', 'mailpoet'),
|
||||||
number_format($subscribers_without_segment)
|
number_format($subscribers_without_segment)
|
||||||
@@ -782,13 +784,18 @@ class Subscriber extends Model {
|
|||||||
|
|
||||||
static function withoutSegments($orm) {
|
static function withoutSegments($orm) {
|
||||||
return $orm->select(MP_SUBSCRIBERS_TABLE.'.*')
|
return $orm->select(MP_SUBSCRIBERS_TABLE.'.*')
|
||||||
->leftOuterJoin(
|
->rawJoin(
|
||||||
MP_SUBSCRIBER_SEGMENT_TABLE,
|
'LEFT OUTER JOIN (
|
||||||
|
SELECT `subscriber_id`
|
||||||
|
FROM '.MP_SUBSCRIBER_SEGMENT_TABLE.'
|
||||||
|
WHERE `status` = "'.self::STATUS_SUBSCRIBED.'"
|
||||||
|
)',
|
||||||
array(
|
array(
|
||||||
MP_SUBSCRIBERS_TABLE.'.id',
|
MP_SUBSCRIBERS_TABLE.'.id',
|
||||||
'=',
|
'=',
|
||||||
MP_SUBSCRIBER_SEGMENT_TABLE.'.subscriber_id'
|
MP_SUBSCRIBER_SEGMENT_TABLE.'.subscriber_id'
|
||||||
)
|
),
|
||||||
|
MP_SUBSCRIBER_SEGMENT_TABLE
|
||||||
)
|
)
|
||||||
->whereNull(MP_SUBSCRIBER_SEGMENT_TABLE.'.subscriber_id');
|
->whereNull(MP_SUBSCRIBER_SEGMENT_TABLE.'.subscriber_id');
|
||||||
}
|
}
|
||||||
|
@@ -141,6 +141,56 @@ class SubscriberTest extends MailPoetTest {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function testItHasSegmentFilter() {
|
||||||
|
// remove all subscribers
|
||||||
|
Subscriber::deleteMany();
|
||||||
|
|
||||||
|
$subscriber = Subscriber::create();
|
||||||
|
$subscriber->hydrate(Fixtures::get('subscriber_template'));
|
||||||
|
$subscriber->save();
|
||||||
|
|
||||||
|
$segment = Segment::createOrUpdate(array(
|
||||||
|
'name' => 'Test segment'
|
||||||
|
));
|
||||||
|
$segment_2 = Segment::createOrUpdate(array(
|
||||||
|
'name' => 'Test segment 2'
|
||||||
|
));
|
||||||
|
|
||||||
|
// not yet subscribed
|
||||||
|
$subscribers = Subscriber::filter('filterBy', array('segment' => 'none'))
|
||||||
|
->findMany();
|
||||||
|
expect($subscribers)->count(1);
|
||||||
|
$subscribers = Subscriber::filter('filterBy', array('segment' => $segment->id))
|
||||||
|
->findMany();
|
||||||
|
expect($subscribers)->count(0);
|
||||||
|
|
||||||
|
// subscribed to a segment
|
||||||
|
SubscriberSegment::subscribeToSegments(
|
||||||
|
$subscriber,
|
||||||
|
array($segment->id, $segment_2->id)
|
||||||
|
);
|
||||||
|
|
||||||
|
$subscribers = Subscriber::filter('filterBy', array('segment' => 'none'))
|
||||||
|
->findMany();
|
||||||
|
expect($subscribers)->count(0);
|
||||||
|
$subscribers = Subscriber::filter('filterBy', array('segment' => $segment->id))
|
||||||
|
->findMany();
|
||||||
|
expect($subscribers)->count(1);
|
||||||
|
|
||||||
|
// unsubscribed
|
||||||
|
SubscriberSegment::unsubscribeFromSegments(
|
||||||
|
$subscriber,
|
||||||
|
array($segment->id, $segment_2->id)
|
||||||
|
);
|
||||||
|
|
||||||
|
$subscribers = Subscriber::filter('filterBy', array('segment' => 'none'))
|
||||||
|
->findMany();
|
||||||
|
expect($subscribers)->count(1);
|
||||||
|
$subscribers = Subscriber::filter('filterBy', array('segment' => $segment->id))
|
||||||
|
->findMany();
|
||||||
|
expect($subscribers)->count(0);
|
||||||
|
}
|
||||||
|
|
||||||
function testItCanHaveSegment() {
|
function testItCanHaveSegment() {
|
||||||
$segment = Segment::createOrUpdate(array(
|
$segment = Segment::createOrUpdate(array(
|
||||||
'name' => 'some name'
|
'name' => 'some name'
|
||||||
|
Reference in New Issue
Block a user