Fix count returned from shortcode mailpoet_subscribers_count
[MAILPOET-3424]
This commit is contained in:
@ -2,11 +2,12 @@
|
||||
|
||||
namespace MailPoet\Config;
|
||||
|
||||
use MailPoet\Entities\SubscriberEntity;
|
||||
use MailPoet\Form\Widget;
|
||||
use MailPoet\Models\Newsletter;
|
||||
use MailPoet\Models\Subscriber;
|
||||
use MailPoet\Models\SubscriberSegment;
|
||||
use MailPoet\Newsletter\Url as NewsletterUrl;
|
||||
use MailPoet\Segments\SegmentSubscribersRepository;
|
||||
use MailPoet\Subscription\Pages;
|
||||
use MailPoet\WP\Functions as WPFunctions;
|
||||
|
||||
@ -17,9 +18,17 @@ class Shortcodes {
|
||||
/** @var WPFunctions */
|
||||
private $wp;
|
||||
|
||||
public function __construct(Pages $subscriptionPages, WPFunctions $wp) {
|
||||
/** @var SegmentSubscribersRepository */
|
||||
private $segmentSubscribersRepository;
|
||||
|
||||
public function __construct(
|
||||
Pages $subscriptionPages,
|
||||
WPFunctions $wp,
|
||||
SegmentSubscribersRepository $segmentSubscribersRepository
|
||||
) {
|
||||
$this->subscriptionPages = $subscriptionPages;
|
||||
$this->wp = $wp;
|
||||
$this->segmentSubscribersRepository = $segmentSubscribersRepository;
|
||||
}
|
||||
|
||||
public function init() {
|
||||
@ -75,10 +84,7 @@ class Shortcodes {
|
||||
return $this->wp->numberFormatI18n(Subscriber::filter('subscribed')->count());
|
||||
} else {
|
||||
return $this->wp->numberFormatI18n(
|
||||
SubscriberSegment::whereIn('segment_id', $segmentIds)
|
||||
->select('subscriber_id')->distinct()
|
||||
->filter('subscribed')
|
||||
->findResultSet()->count()
|
||||
$this->segmentSubscribersRepository->getSubscribersCountBySegmentIds($segmentIds, SubscriberEntity::STATUS_SUBSCRIBED)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -56,6 +56,34 @@ class SegmentSubscribersRepository {
|
||||
return (int)$result;
|
||||
}
|
||||
|
||||
public function getSubscribersCountBySegmentIds(array $segmentIds, string $status = null): int {
|
||||
$subscribersTable = $this->entityManager->getClassMetadata(SubscriberEntity::class)->getTableName();
|
||||
$subscribersSegmentsTable = $this->entityManager->getClassMetadata(SubscriberSegmentEntity::class)->getTableName();
|
||||
|
||||
$queryBuilder = $this->entityManager
|
||||
->getConnection()
|
||||
->createQueryBuilder()
|
||||
->select("count(DISTINCT $subscribersTable.id)")
|
||||
->from($subscribersTable)
|
||||
->join(
|
||||
$subscribersTable,
|
||||
$subscribersSegmentsTable,
|
||||
'subsegment',
|
||||
"subsegment.subscriber_id = $subscribersTable.id"
|
||||
)->andWhere("$subscribersTable.deleted_at IS NULL")
|
||||
->andWhere("subsegment.segment_id IN (:segmentIds)")
|
||||
->setParameter('segmentIds', $segmentIds, Connection::PARAM_INT_ARRAY);
|
||||
|
||||
if ($status) {
|
||||
$queryBuilder->andWhere("$subscribersTable.status = :status")
|
||||
->andWhere("subsegment.status = :status")
|
||||
->setParameter('status', $status);
|
||||
}
|
||||
$statement = $this->executeQuery($queryBuilder);
|
||||
$result = $statement->fetchColumn();
|
||||
return (int)$result;
|
||||
}
|
||||
|
||||
public function getSubscribersWithoutSegmentCount(): int {
|
||||
$queryBuilder = $this->getSubscribersWithoutSegmentCountQuery();
|
||||
return (int)$queryBuilder->getQuery()->getSingleScalarResult();
|
||||
|
Reference in New Issue
Block a user