Use only non-machine opens for segment open

[MAILPOET-3737]
This commit is contained in:
Pavel Dohnal
2021-08-26 12:34:05 +02:00
committed by Veljko V
parent aa4312dd3c
commit 49c9dd5f79
2 changed files with 24 additions and 0 deletions

View File

@@ -8,6 +8,7 @@ use MailPoet\Entities\StatisticsClickEntity;
use MailPoet\Entities\StatisticsNewsletterEntity;
use MailPoet\Entities\StatisticsOpenEntity;
use MailPoet\Entities\SubscriberEntity;
use MailPoet\Entities\UserAgentEntity;
use MailPoet\Util\Security;
use MailPoetVendor\Doctrine\DBAL\Query\QueryBuilder;
use MailPoetVendor\Doctrine\ORM\EntityManager;
@@ -98,6 +99,10 @@ class EmailAction implements Filter {
"stats.subscriber_id = $subscribersTable.id AND stats.newsletter_id = :newsletter" . $parameterSuffix
)->setParameter('newsletter' . $parameterSuffix, $newsletterId);
}
if ($action === EmailAction::ACTION_OPENED) {
$queryBuilder->andWhere('(stats.user_agent_type = :userAgentType) OR (stats.user_agent_type IS NULL)')
->setParameter('userAgentType', UserAgentEntity::USER_AGENT_TYPE_HUMAN);
}
if ($action === EmailAction::ACTION_CLICKED && $linkId) {
$where .= ' AND stats.link_id = :link' . $parameterSuffix;
}

View File

@@ -13,6 +13,7 @@ use MailPoet\Entities\StatisticsClickEntity;
use MailPoet\Entities\StatisticsNewsletterEntity;
use MailPoet\Entities\StatisticsOpenEntity;
use MailPoet\Entities\SubscriberEntity;
use MailPoet\Entities\UserAgentEntity;
use MailPoetVendor\Doctrine\DBAL\Driver\Statement;
class EmailActionTest extends \MailPoetTest {
@@ -177,6 +178,23 @@ class EmailActionTest extends \MailPoetTest {
expect($subscriber2->getEmail())->equals('not_opened@example.com');
}
public function testOpensNotIncludeMachineOpens() {
$subscriberOpenedMachine = $this->createSubscriber('opened_machine@example.com');
$this->createStatsNewsletter($subscriberOpenedMachine);
$open = $this->createStatisticsOpens($subscriberOpenedMachine);
$open->setUserAgentType(UserAgentEntity::USER_AGENT_TYPE_MACHINE);
$userAgent = new UserAgentEntity(UserAgentEntity::MACHINE_USER_AGENTS[0]);
$this->entityManager->persist($userAgent);
$open->setUserAgent($userAgent);
$this->entityManager->flush();
$segmentFilter = $this->getSegmentFilter(EmailAction::ACTION_OPENED, (int)$this->newsletter->getId());
$statement = $this->emailAction->apply($this->getQueryBuilder(), $segmentFilter)->execute();
assert($statement instanceof Statement);
$result = $statement->rowCount();
expect($result)->equals(2);
}
private function getQueryBuilder() {
$subscribersTable = $this->entityManager->getClassMetadata(SubscriberEntity::class)->getTableName();
return $this->entityManager
@@ -258,5 +276,6 @@ class EmailActionTest extends \MailPoetTest {
$this->truncateEntity(StatisticsClickEntity::class);
$this->truncateEntity(StatisticsNewsletterEntity::class);
$this->truncateEntity(NewsletterLinkEntity::class);
$this->truncateEntity(UserAgentEntity::class);
}
}