Use only non-machine opens for segment open
[MAILPOET-3737]
This commit is contained in:
@@ -8,6 +8,7 @@ use MailPoet\Entities\StatisticsClickEntity;
|
|||||||
use MailPoet\Entities\StatisticsNewsletterEntity;
|
use MailPoet\Entities\StatisticsNewsletterEntity;
|
||||||
use MailPoet\Entities\StatisticsOpenEntity;
|
use MailPoet\Entities\StatisticsOpenEntity;
|
||||||
use MailPoet\Entities\SubscriberEntity;
|
use MailPoet\Entities\SubscriberEntity;
|
||||||
|
use MailPoet\Entities\UserAgentEntity;
|
||||||
use MailPoet\Util\Security;
|
use MailPoet\Util\Security;
|
||||||
use MailPoetVendor\Doctrine\DBAL\Query\QueryBuilder;
|
use MailPoetVendor\Doctrine\DBAL\Query\QueryBuilder;
|
||||||
use MailPoetVendor\Doctrine\ORM\EntityManager;
|
use MailPoetVendor\Doctrine\ORM\EntityManager;
|
||||||
@@ -98,6 +99,10 @@ class EmailAction implements Filter {
|
|||||||
"stats.subscriber_id = $subscribersTable.id AND stats.newsletter_id = :newsletter" . $parameterSuffix
|
"stats.subscriber_id = $subscribersTable.id AND stats.newsletter_id = :newsletter" . $parameterSuffix
|
||||||
)->setParameter('newsletter' . $parameterSuffix, $newsletterId);
|
)->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) {
|
if ($action === EmailAction::ACTION_CLICKED && $linkId) {
|
||||||
$where .= ' AND stats.link_id = :link' . $parameterSuffix;
|
$where .= ' AND stats.link_id = :link' . $parameterSuffix;
|
||||||
}
|
}
|
||||||
|
@@ -13,6 +13,7 @@ use MailPoet\Entities\StatisticsClickEntity;
|
|||||||
use MailPoet\Entities\StatisticsNewsletterEntity;
|
use MailPoet\Entities\StatisticsNewsletterEntity;
|
||||||
use MailPoet\Entities\StatisticsOpenEntity;
|
use MailPoet\Entities\StatisticsOpenEntity;
|
||||||
use MailPoet\Entities\SubscriberEntity;
|
use MailPoet\Entities\SubscriberEntity;
|
||||||
|
use MailPoet\Entities\UserAgentEntity;
|
||||||
use MailPoetVendor\Doctrine\DBAL\Driver\Statement;
|
use MailPoetVendor\Doctrine\DBAL\Driver\Statement;
|
||||||
|
|
||||||
class EmailActionTest extends \MailPoetTest {
|
class EmailActionTest extends \MailPoetTest {
|
||||||
@@ -177,6 +178,23 @@ class EmailActionTest extends \MailPoetTest {
|
|||||||
expect($subscriber2->getEmail())->equals('not_opened@example.com');
|
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() {
|
private function getQueryBuilder() {
|
||||||
$subscribersTable = $this->entityManager->getClassMetadata(SubscriberEntity::class)->getTableName();
|
$subscribersTable = $this->entityManager->getClassMetadata(SubscriberEntity::class)->getTableName();
|
||||||
return $this->entityManager
|
return $this->entityManager
|
||||||
@@ -258,5 +276,6 @@ class EmailActionTest extends \MailPoetTest {
|
|||||||
$this->truncateEntity(StatisticsClickEntity::class);
|
$this->truncateEntity(StatisticsClickEntity::class);
|
||||||
$this->truncateEntity(StatisticsNewsletterEntity::class);
|
$this->truncateEntity(StatisticsNewsletterEntity::class);
|
||||||
$this->truncateEntity(NewsletterLinkEntity::class);
|
$this->truncateEntity(NewsletterLinkEntity::class);
|
||||||
|
$this->truncateEntity(UserAgentEntity::class);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user