diff --git a/lib/Models/Subscriber.php b/lib/Models/Subscriber.php index 94640e1b58..de0b334279 100644 --- a/lib/Models/Subscriber.php +++ b/lib/Models/Subscriber.php @@ -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) @@ -771,19 +773,20 @@ 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 ) - ->whereRaw( - MP_SUBSCRIBER_SEGMENT_TABLE . '.status != ? ' . - ' OR ' . MP_SUBSCRIBER_SEGMENT_TABLE . '.subscriber_id IS NULL ', - self::STATUS_SUBSCRIBED - ); + ->whereNull(MP_SUBSCRIBER_SEGMENT_TABLE.'.subscriber_id'); } static function createMultiple($columns, $values) { diff --git a/tests/unit/Models/SubscriberTest.php b/tests/unit/Models/SubscriberTest.php index ba778debb6..e1962c2e3b 100644 --- a/tests/unit/Models/SubscriberTest.php +++ b/tests/unit/Models/SubscriberTest.php @@ -152,6 +152,9 @@ class SubscriberTest extends MailPoetTest { $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')) @@ -164,7 +167,7 @@ class SubscriberTest extends MailPoetTest { // subscribed to a segment SubscriberSegment::subscribeToSegments( $subscriber, - array($segment->id) + array($segment->id, $segment_2->id) ); $subscribers = Subscriber::filter('filterBy', array('segment' => 'none')) @@ -177,7 +180,7 @@ class SubscriberTest extends MailPoetTest { // unsubscribed SubscriberSegment::unsubscribeFromSegments( $subscriber, - array($segment->id) + array($segment->id, $segment_2->id) ); $subscribers = Subscriber::filter('filterBy', array('segment' => 'none'))