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' => ''
|
||||
);
|
||||
|
||||
$subscribers_without_segment = self::filter('withoutSegments')->count();
|
||||
$subscribers_without_segment = self::filter('withoutSegments')
|
||||
->whereNull('deleted_at')
|
||||
->count();
|
||||
$subscribers_without_segment_label = sprintf(
|
||||
__('Subscribers without a list (%s)', 'mailpoet'),
|
||||
number_format($subscribers_without_segment)
|
||||
@@ -782,13 +784,18 @@ class Subscriber extends Model {
|
||||
|
||||
static function withoutSegments($orm) {
|
||||
return $orm->select(MP_SUBSCRIBERS_TABLE.'.*')
|
||||
->leftOuterJoin(
|
||||
MP_SUBSCRIBER_SEGMENT_TABLE,
|
||||
->rawJoin(
|
||||
'LEFT OUTER JOIN (
|
||||
SELECT `subscriber_id`
|
||||
FROM '.MP_SUBSCRIBER_SEGMENT_TABLE.'
|
||||
WHERE `status` = "'.self::STATUS_SUBSCRIBED.'"
|
||||
)',
|
||||
array(
|
||||
MP_SUBSCRIBERS_TABLE.'.id',
|
||||
'=',
|
||||
MP_SUBSCRIBER_SEGMENT_TABLE.'.subscriber_id'
|
||||
)
|
||||
),
|
||||
MP_SUBSCRIBER_SEGMENT_TABLE
|
||||
)
|
||||
->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() {
|
||||
$segment = Segment::createOrUpdate(array(
|
||||
'name' => 'some name'
|
||||
|
Reference in New Issue
Block a user