Show merged opens if respective setting is set

[MAILPOET-6164]
This commit is contained in:
alex-mpoet
2024-08-19 20:06:57 +03:00
committed by Aschepikov
parent ee1043fce9
commit 8a506e7278
3 changed files with 37 additions and 6 deletions

View File

@ -14,6 +14,7 @@ use MailPoet\Entities\StatisticsUnsubscribeEntity;
use MailPoet\Entities\StatisticsWooCommercePurchaseEntity;
use MailPoet\Entities\SubscriberEntity;
use MailPoet\Entities\UserAgentEntity;
use MailPoet\Settings\TrackingConfig;
use MailPoet\WooCommerce\Helper as WCHelper;
use MailPoetVendor\Doctrine\ORM\EntityManager;
use MailPoetVendor\Doctrine\ORM\Query\Expr\Join;
@ -28,12 +29,17 @@ class NewsletterStatisticsRepository extends Repository {
/** @var WCHelper */
private $wcHelper;
/** @var TrackingConfig */
private $trackingConfig;
public function __construct(
EntityManager $entityManager,
WCHelper $wcHelper
WCHelper $wcHelper,
TrackingConfig $trackingConfig
) {
parent::__construct($entityManager);
$this->wcHelper = $wcHelper;
$this->trackingConfig = $trackingConfig;
}
protected function getEntityClassName() {
@ -222,7 +228,10 @@ class NewsletterStatisticsRepository extends Repository {
private function getStatisticCounts(string $statisticsEntityName, array $newsletters, \DateTimeImmutable $from = null, \DateTimeImmutable $to = null): array {
$qb = $this->getStatisticsQuery($statisticsEntityName, $newsletters);
if (in_array($statisticsEntityName, [StatisticsOpenEntity::class, StatisticsClickEntity::class], true)) {
if (
$statisticsEntityName === StatisticsClickEntity::class
|| ($statisticsEntityName === StatisticsOpenEntity::class && $this->trackingConfig->areOpensSeparated())
) {
$qb->andWhere('(stats.userAgentType = :userAgentType) OR (stats.userAgentType IS NULL)')
->setParameter('userAgentType', UserAgentEntity::USER_AGENT_TYPE_HUMAN);
}

View File

@ -7,6 +7,9 @@ class TrackingConfig {
const LEVEL_PARTIAL = 'partial';
const LEVEL_BASIC = 'basic';
const OPENS_MERGED = 'merged';
const OPENS_SEPARATED = 'separated';
/** @var SettingsController */
private $settings;
@ -26,6 +29,15 @@ class TrackingConfig {
return $level === self::LEVEL_FULL;
}
public function areOpensMerged(string $opens = null): bool {
$opens = $opens ?? $this->settings->get('tracking.opens', self::OPENS_MERGED);
return $opens !== self::OPENS_SEPARATED;
}
public function areOpensSeparated(string $opens = null): bool {
return !$this->areOpensMerged($opens);
}
public function getConfig(): array {
return [
'level' => $this->settings->get('tracking.level', self::LEVEL_FULL),

View File

@ -10,6 +10,7 @@ use MailPoet\Entities\StatisticsWooCommercePurchaseEntity;
use MailPoet\Entities\SubscriberEntity;
use MailPoet\Entities\UserAgentEntity;
use MailPoet\Newsletter\Statistics\WooCommerceRevenue;
use MailPoet\Settings\TrackingConfig;
use MailPoet\WooCommerce\Helper as WCHelper;
use MailPoetVendor\Carbon\Carbon;
use MailPoetVendor\Doctrine\ORM\EntityManager;
@ -23,12 +24,17 @@ class SubscriberStatisticsRepository extends Repository {
/** @var WCHelper */
private $wcHelper;
/** @var TrackingConfig */
private $trackingConfig;
public function __construct(
EntityManager $entityManager,
WCHelper $wcHelper
WCHelper $wcHelper,
TrackingConfig $trackingConfig
) {
parent::__construct($entityManager);
$this->wcHelper = $wcHelper;
$this->trackingConfig = $trackingConfig;
}
protected function getEntityClassName() {
@ -64,9 +70,13 @@ class SubscriberStatisticsRepository extends Repository {
}
public function getStatisticsOpenCount(SubscriberEntity $subscriber, ?Carbon $startTime = null): int {
return (int)$this->getStatisticsOpenCountQuery($subscriber, $startTime)
$queryBuilder = $this->getStatisticsOpenCountQuery($subscriber, $startTime);
if ($this->trackingConfig->areOpensSeparated()) {
$queryBuilder
->andWhere('(stats.userAgentType = :userAgentType)')
->setParameter('userAgentType', UserAgentEntity::USER_AGENT_TYPE_HUMAN)
->setParameter('userAgentType', UserAgentEntity::USER_AGENT_TYPE_HUMAN);
}
return (int)$queryBuilder
->getQuery()
->getSingleScalarResult();
}