Fix subscribers without segments count in subscribers filter

[MAILPOET-3164]
This commit is contained in:
Rostislav Wolny
2021-01-20 13:45:54 +01:00
committed by Veljko V
parent 8456581695
commit b7914a3ff6
2 changed files with 10 additions and 4 deletions

View File

@ -57,8 +57,13 @@ class SegmentSubscribersRepository {
} }
public function getSubscribersWithoutSegmentCount(): int { public function getSubscribersWithoutSegmentCount(): int {
$queryBuilder = $this->getSubscribersWithoutSegmentCountQuery();
return (int)$queryBuilder->getQuery()->getSingleScalarResult();
}
public function getSubscribersWithoutSegmentCountQuery(): \MailPoetVendor\Doctrine\ORM\QueryBuilder {
$queryBuilder = $this->entityManager->createQueryBuilder(); $queryBuilder = $this->entityManager->createQueryBuilder();
return (int)$queryBuilder return $queryBuilder
->select('COUNT(DISTINCT s) AS subscribersCount') ->select('COUNT(DISTINCT s) AS subscribersCount')
->from(SubscriberEntity::class, 's') ->from(SubscriberEntity::class, 's')
->leftJoin('s.subscriberSegments', 'ssg') ->leftJoin('s.subscriberSegments', 'ssg')
@ -69,8 +74,7 @@ class SegmentSubscribersRepository {
->andWhere('s.deletedAt IS NULL') ->andWhere('s.deletedAt IS NULL')
->andWhere('(ssg.status != :statusSubscribed OR ssg.id IS NULL OR sg.deletedAt IS NOT NULL)') ->andWhere('(ssg.status != :statusSubscribed OR ssg.id IS NULL OR sg.deletedAt IS NOT NULL)')
->andWhere('sg2.id IS NULL') ->andWhere('sg2.id IS NULL')
->setParameter('statusSubscribed', SubscriberEntity::STATUS_SUBSCRIBED) ->setParameter('statusSubscribed', SubscriberEntity::STATUS_SUBSCRIBED);
->getQuery()->getSingleScalarResult();
} }
private function loadSubscriberIdsInSegment(int $segmentId, array $candidateIds = null): array { private function loadSubscriberIdsInSegment(int $segmentId, array $candidateIds = null): array {

View File

@ -233,12 +233,14 @@ class SubscriberListingRepository extends ListingRepository {
$queryBuilder = clone $this->queryBuilder; $queryBuilder = clone $this->queryBuilder;
$this->applyFromClause($queryBuilder); $this->applyFromClause($queryBuilder);
$subscribersWithoutSegmentQuery = $this->segmentSubscribersRepository->getSubscribersWithoutSegmentCountQuery();
if ($group) { if ($group) {
$this->applyGroup($queryBuilder, $group); $this->applyGroup($queryBuilder, $group);
$this->applyGroup($subscribersWithoutSegmentQuery, $group);
} }
$subscribersWithoutSegment = $this->segmentSubscribersRepository->getSubscribersWithoutSegmentCount(); $subscribersWithoutSegment = $subscribersWithoutSegmentQuery->getQuery()->getSingleScalarResult();
$subscribersWithoutSegmentLabel = sprintf( $subscribersWithoutSegmentLabel = sprintf(
WPFunctions::get()->__('Subscribers without a list (%s)', 'mailpoet'), WPFunctions::get()->__('Subscribers without a list (%s)', 'mailpoet'),
number_format((float)$subscribersWithoutSegment) number_format((float)$subscribersWithoutSegment)