Refactor getting count of subscribers without segment to repository
[MAILPOET-3164]
This commit is contained in:
committed by
Veljko V
parent
0ee10fe2f9
commit
6c7000430d
@ -12,6 +12,7 @@ use MailPoetVendor\Doctrine\DBAL\Connection;
|
|||||||
use MailPoetVendor\Doctrine\DBAL\Driver\Statement;
|
use MailPoetVendor\Doctrine\DBAL\Driver\Statement;
|
||||||
use MailPoetVendor\Doctrine\DBAL\Query\QueryBuilder;
|
use MailPoetVendor\Doctrine\DBAL\Query\QueryBuilder;
|
||||||
use MailPoetVendor\Doctrine\ORM\EntityManager;
|
use MailPoetVendor\Doctrine\ORM\EntityManager;
|
||||||
|
use MailPoetVendor\Doctrine\ORM\Query\Expr\Join;
|
||||||
|
|
||||||
class SegmentSubscribersRepository {
|
class SegmentSubscribersRepository {
|
||||||
/** @var EntityManager */
|
/** @var EntityManager */
|
||||||
@ -55,6 +56,23 @@ class SegmentSubscribersRepository {
|
|||||||
return (int)$result;
|
return (int)$result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getSubscribersWithoutSegmentCount(): int {
|
||||||
|
$queryBuilder = $this->entityManager->createQueryBuilder();
|
||||||
|
return (int)$queryBuilder
|
||||||
|
->select('COUNT(DISTINCT s) AS subscribersCount')
|
||||||
|
->from(SubscriberEntity::class, 's')
|
||||||
|
->leftJoin('s.subscriberSegments', 'ssg')
|
||||||
|
->leftJoin('ssg.segment', 'sg')
|
||||||
|
->leftJoin(SubscriberEntity::class, 's2', Join::WITH, (string)$queryBuilder->expr()->eq('s.id', 's2.id'))
|
||||||
|
->leftJoin('s2.subscriberSegments', 'ssg2', Join::WITH, 'ssg2.status = :statusSubscribed AND sg.id <> ssg2.segment')
|
||||||
|
->leftJoin('ssg2.segment', 'sg2', Join::WITH, (string)$queryBuilder->expr()->isNull('sg2.deletedAt'))
|
||||||
|
->andWhere('s.deletedAt IS NULL')
|
||||||
|
->andWhere('(ssg.status != :statusSubscribed OR ssg.id IS NULL OR sg.deletedAt IS NOT NULL)')
|
||||||
|
->andWhere('sg2.id IS NULL')
|
||||||
|
->setParameter('statusSubscribed', SubscriberEntity::STATUS_SUBSCRIBED)
|
||||||
|
->getQuery()->getSingleScalarResult();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method is fetches list of all segments basic data and count of subscribed subscribers.
|
* This method is fetches list of all segments basic data and count of subscribed subscribers.
|
||||||
* @return array<array{id: string, name: string, type: string, subscribers: int}>
|
* @return array<array{id: string, name: string, type: string, subscribers: int}>
|
||||||
|
@ -238,20 +238,7 @@ class SubscriberListingRepository extends ListingRepository {
|
|||||||
$this->applyGroup($queryBuilder, $group);
|
$this->applyGroup($queryBuilder, $group);
|
||||||
}
|
}
|
||||||
|
|
||||||
$queryBuilderNoSegment = clone $queryBuilder;
|
$subscribersWithoutSegment = $this->segmentSubscribersRepository->getSubscribersWithoutSegmentCount();
|
||||||
$subscribersWithoutSegment = $queryBuilderNoSegment
|
|
||||||
->select('COUNT(DISTINCT s) AS subscribersCount')
|
|
||||||
->leftJoin('s.subscriberSegments', 'ssg')
|
|
||||||
->leftJoin('ssg.segment', 'sg')
|
|
||||||
->leftJoin(SubscriberEntity::class, 's2', Join::WITH, (string)$queryBuilder->expr()->eq('s.id', 's2.id'))
|
|
||||||
->leftJoin('s2.subscriberSegments', 'ssg2', Join::WITH, 'ssg2.status = :statusSubscribed AND sg.id <> ssg2.segment')
|
|
||||||
->leftJoin('ssg2.segment', 'sg2', Join::WITH, (string)$queryBuilder->expr()->isNull('sg2.deletedAt'))
|
|
||||||
->andWhere('s.deletedAt IS NULL')
|
|
||||||
->andWhere('(ssg.status != :statusSubscribed OR ssg.id IS NULL OR sg.deletedAt IS NOT NULL)')
|
|
||||||
->andWhere('sg2.id IS NULL')
|
|
||||||
->setParameter('statusSubscribed', SubscriberEntity::STATUS_SUBSCRIBED)
|
|
||||||
->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)
|
||||||
|
Reference in New Issue
Block a user