diff --git a/lib/Subscribers/SubscriberListingRepository.php b/lib/Subscribers/SubscriberListingRepository.php index e959e8d3e1..4267307e2a 100644 --- a/lib/Subscribers/SubscriberListingRepository.php +++ b/lib/Subscribers/SubscriberListingRepository.php @@ -16,6 +16,8 @@ use MailPoetVendor\Doctrine\ORM\Query\Expr\Join; use MailPoetVendor\Doctrine\ORM\QueryBuilder; class SubscriberListingRepository extends ListingRepository { + public const FILTER_WITHOUT_LIST = 'without-list'; + const DEFAULT_SORT_BY = 'createdAt'; private static $supportedStatuses = [ @@ -88,6 +90,14 @@ class SubscriberListingRepository extends ListingRepository { if (!$filters || !isset($filters['segment'])) { return; } + if ($filters['segment'] === self::FILTER_WITHOUT_LIST) { + $queryBuilder->leftJoin('s.subscriberSegments', 'ssg', Join::WITH, (string)$queryBuilder->expr()->eq('ssg.status', ':statusSubscribed')) + ->leftJoin('ssg.segment', 'sg', Join::WITH, (string)$queryBuilder->expr()->isNull('sg.deletedAt')) + ->andWhere('s.deletedAt IS NULL') + ->andWhere('sg.id IS NULL') + ->setParameter('statusSubscribed', SubscriberEntity::STATUS_SUBSCRIBED); + return; + } $segment = $this->entityManager->find(SegmentEntity::class, (int)$filters['segment']); if (!$segment instanceof SegmentEntity) { return; @@ -218,7 +228,7 @@ class SubscriberListingRepository extends ListingRepository { $withoutSegmentList = [ 'label' => $subscribersWithoutSegmentLabel, - 'value' => 'none', + 'value' => self::FILTER_WITHOUT_LIST, ]; $segmentList = [];