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:
mrcasual
2017-01-19 20:47:58 -05:00
committed by GitHub
2 changed files with 61 additions and 4 deletions

View File

@@ -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');
} }

View File

@@ -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'