Refactor segment filter data to embedded object
[MAILPOET-3177]
This commit is contained in:
committed by
Veljko V
parent
bd63ae508f
commit
40c9f047be
@@ -37,7 +37,7 @@ class DynamicSegmentsResponseBuilder {
|
|||||||
if (!$filter instanceof DynamicSegmentFilterEntity) {
|
if (!$filter instanceof DynamicSegmentFilterEntity) {
|
||||||
return $data;
|
return $data;
|
||||||
}
|
}
|
||||||
return array_merge($data, $filter->getFilterData() ?? []);
|
return array_merge($data, $filter->getFilterData()->getData() ?? []);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function buildForListing(array $segments): array {
|
public function buildForListing(array $segments): array {
|
||||||
|
40
lib/Entities/DynamicSegmentFilterData.php
Normal file
40
lib/Entities/DynamicSegmentFilterData.php
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace MailPoet\Entities;
|
||||||
|
|
||||||
|
use MailPoetVendor\Doctrine\ORM\Mapping as ORM;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ORM\Embeddable()
|
||||||
|
*/
|
||||||
|
class DynamicSegmentFilterData {
|
||||||
|
const TYPE_USER_ROLE = 'userRole';
|
||||||
|
const TYPE_EMAIL = 'email';
|
||||||
|
const TYPE_WOOCOMMERCE = 'woocommerce';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ORM\Column(type="serialized_array")
|
||||||
|
* @var array|null
|
||||||
|
*/
|
||||||
|
private $filterData;
|
||||||
|
|
||||||
|
public function __construct(array $filterData) {
|
||||||
|
$this->filterData = $filterData;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getData(): ?array {
|
||||||
|
return $this->filterData;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return mixed|null
|
||||||
|
*/
|
||||||
|
public function getParam(string $name) {
|
||||||
|
return $this->filterData[$name] ?? null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getFilterType(): ?string {
|
||||||
|
$filterData = $this->getData();
|
||||||
|
return $filterData['segmentType'] ?? null;
|
||||||
|
}
|
||||||
|
}
|
@@ -18,10 +18,6 @@ class DynamicSegmentFilterEntity {
|
|||||||
use UpdatedAtTrait;
|
use UpdatedAtTrait;
|
||||||
use SafeToOneAssociationLoadTrait;
|
use SafeToOneAssociationLoadTrait;
|
||||||
|
|
||||||
const TYPE_USER_ROLE = 'userRole';
|
|
||||||
const TYPE_EMAIL = 'email';
|
|
||||||
const TYPE_WOOCOMMERCE = 'woocommerce';
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @ORM\ManyToOne(targetEntity="MailPoet\Entities\SegmentEntity", inversedBy="filters")
|
* @ORM\ManyToOne(targetEntity="MailPoet\Entities\SegmentEntity", inversedBy="filters")
|
||||||
* @var SegmentEntity|null
|
* @var SegmentEntity|null
|
||||||
@@ -29,12 +25,12 @@ class DynamicSegmentFilterEntity {
|
|||||||
private $segment;
|
private $segment;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @ORM\Column(type="serialized_array")
|
* @ORM\Embedded(class="MailPoet\Entities\DynamicSegmentFilterData", columnPrefix=false)
|
||||||
* @var array|null
|
* @var DynamicSegmentFilterData
|
||||||
*/
|
*/
|
||||||
private $filterData;
|
private $filterData;
|
||||||
|
|
||||||
public function __construct(SegmentEntity $segment, array $filterData) {
|
public function __construct(SegmentEntity $segment, DynamicSegmentFilterData $filterData) {
|
||||||
$this->segment = $segment;
|
$this->segment = $segment;
|
||||||
$this->filterData = $filterData;
|
$this->filterData = $filterData;
|
||||||
}
|
}
|
||||||
@@ -48,32 +44,13 @@ class DynamicSegmentFilterEntity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return array|null
|
* @return DynamicSegmentFilterData
|
||||||
*/
|
*/
|
||||||
public function getFilterData() {
|
public function getFilterData() {
|
||||||
return $this->filterData;
|
return $this->filterData;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @return mixed|null
|
|
||||||
*/
|
|
||||||
public function getFilterDataParam(string $name) {
|
|
||||||
return $this->filterData[$name] ?? null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return string|null
|
|
||||||
*/
|
|
||||||
public function getSegmentType() {
|
|
||||||
$filterData = $this->getFilterData();
|
|
||||||
return $filterData['segmentType'] ?? null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function setSegment(SegmentEntity $segment) {
|
public function setSegment(SegmentEntity $segment) {
|
||||||
$this->segment = $segment;
|
$this->segment = $segment;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function setFilterData(array $filterData) {
|
|
||||||
$this->filterData = $filterData;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@@ -3,7 +3,7 @@
|
|||||||
namespace MailPoet\Segments\DynamicSegments;
|
namespace MailPoet\Segments\DynamicSegments;
|
||||||
|
|
||||||
use MailPoet\DynamicSegments\Exceptions\InvalidSegmentTypeException;
|
use MailPoet\DynamicSegments\Exceptions\InvalidSegmentTypeException;
|
||||||
use MailPoet\Entities\DynamicSegmentFilterEntity;
|
use MailPoet\Entities\DynamicSegmentFilterData;
|
||||||
use MailPoet\Segments\DynamicSegments\Filters\EmailAction;
|
use MailPoet\Segments\DynamicSegments\Filters\EmailAction;
|
||||||
use MailPoet\Segments\DynamicSegments\Filters\UserRole;
|
use MailPoet\Segments\DynamicSegments\Filters\UserRole;
|
||||||
use MailPoet\Segments\DynamicSegments\Filters\WooCommerceCategory;
|
use MailPoet\Segments\DynamicSegments\Filters\WooCommerceCategory;
|
||||||
@@ -35,18 +35,18 @@ class FilterHandler {
|
|||||||
$this->wooCommerceCategory = $wooCommerceCategory;
|
$this->wooCommerceCategory = $wooCommerceCategory;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function apply(QueryBuilder $queryBuilder, DynamicSegmentFilterEntity $filterEntity): QueryBuilder {
|
public function apply(QueryBuilder $queryBuilder, DynamicSegmentFilterData $filter): QueryBuilder {
|
||||||
switch ($filterEntity->getSegmentType()) {
|
switch ($filter->getFilterType()) {
|
||||||
case DynamicSegmentFilterEntity::TYPE_USER_ROLE:
|
case DynamicSegmentFilterData::TYPE_USER_ROLE:
|
||||||
return $this->userRole->apply($queryBuilder, $filterEntity);
|
return $this->userRole->apply($queryBuilder, $filter);
|
||||||
case DynamicSegmentFilterEntity::TYPE_EMAIL:
|
case DynamicSegmentFilterData::TYPE_EMAIL:
|
||||||
return $this->emailAction->apply($queryBuilder, $filterEntity);
|
return $this->emailAction->apply($queryBuilder, $filter);
|
||||||
case DynamicSegmentFilterEntity::TYPE_WOOCOMMERCE:
|
case DynamicSegmentFilterData::TYPE_WOOCOMMERCE:
|
||||||
$action = $filterEntity->getFilterDataParam('action');
|
$action = $filter->getParam('action');
|
||||||
if ($action === WooCommerceProduct::ACTION_PRODUCT) {
|
if ($action === WooCommerceProduct::ACTION_PRODUCT) {
|
||||||
return $this->wooCommerceProduct->apply($queryBuilder, $filterEntity);
|
return $this->wooCommerceProduct->apply($queryBuilder, $filter);
|
||||||
}
|
}
|
||||||
return $this->wooCommerceCategory->apply($queryBuilder, $filterEntity);
|
return $this->wooCommerceCategory->apply($queryBuilder, $filter);
|
||||||
default:
|
default:
|
||||||
throw new InvalidSegmentTypeException('Invalid type', InvalidSegmentTypeException::INVALID_TYPE);
|
throw new InvalidSegmentTypeException('Invalid type', InvalidSegmentTypeException::INVALID_TYPE);
|
||||||
}
|
}
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
namespace MailPoet\Segments\DynamicSegments\Filters;
|
namespace MailPoet\Segments\DynamicSegments\Filters;
|
||||||
|
|
||||||
use MailPoet\Entities\DynamicSegmentFilterEntity;
|
use MailPoet\Entities\DynamicSegmentFilterData;
|
||||||
use MailPoet\Entities\StatisticsClickEntity;
|
use MailPoet\Entities\StatisticsClickEntity;
|
||||||
use MailPoet\Entities\StatisticsNewsletterEntity;
|
use MailPoet\Entities\StatisticsNewsletterEntity;
|
||||||
use MailPoet\Entities\StatisticsOpenEntity;
|
use MailPoet\Entities\StatisticsOpenEntity;
|
||||||
@@ -23,10 +23,10 @@ class EmailAction implements Filter {
|
|||||||
$this->entityManager = $entityManager;
|
$this->entityManager = $entityManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function apply(QueryBuilder $queryBuilder, DynamicSegmentFilterEntity $filterEntity): QueryBuilder {
|
public function apply(QueryBuilder $queryBuilder, DynamicSegmentFilterData $filter): QueryBuilder {
|
||||||
$action = $filterEntity->getFilterDataParam('action');
|
$action = $filter->getParam('action');
|
||||||
$newsletterId = (int)$filterEntity->getFilterDataParam('newsletter_id');
|
$newsletterId = (int)$filter->getParam('newsletter_id');
|
||||||
$linkId = $filterEntity->getFilterDataParam('link_id') ? (int)$filterEntity->getFilterDataParam('link_id') : null;
|
$linkId = $filter->getParam('link_id') ? (int)$filter->getParam('link_id') : null;
|
||||||
|
|
||||||
$statsSentTable = $this->entityManager->getClassMetadata(StatisticsNewsletterEntity::class)->getTableName();
|
$statsSentTable = $this->entityManager->getClassMetadata(StatisticsNewsletterEntity::class)->getTableName();
|
||||||
$subscribersTable = $this->entityManager->getClassMetadata(SubscriberEntity::class)->getTableName();
|
$subscribersTable = $this->entityManager->getClassMetadata(SubscriberEntity::class)->getTableName();
|
||||||
|
@@ -2,9 +2,9 @@
|
|||||||
|
|
||||||
namespace MailPoet\Segments\DynamicSegments\Filters;
|
namespace MailPoet\Segments\DynamicSegments\Filters;
|
||||||
|
|
||||||
use MailPoet\Entities\DynamicSegmentFilterEntity;
|
use MailPoet\Entities\DynamicSegmentFilterData;
|
||||||
use MailPoetVendor\Doctrine\DBAL\Query\QueryBuilder;
|
use MailPoetVendor\Doctrine\DBAL\Query\QueryBuilder;
|
||||||
|
|
||||||
interface Filter {
|
interface Filter {
|
||||||
public function apply(QueryBuilder $queryBuilder, DynamicSegmentFilterEntity $filterEntity): QueryBuilder;
|
public function apply(QueryBuilder $queryBuilder, DynamicSegmentFilterData $filter): QueryBuilder;
|
||||||
}
|
}
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
namespace MailPoet\Segments\DynamicSegments\Filters;
|
namespace MailPoet\Segments\DynamicSegments\Filters;
|
||||||
|
|
||||||
use MailPoet\Entities\DynamicSegmentFilterEntity;
|
use MailPoet\Entities\DynamicSegmentFilterData;
|
||||||
use MailPoet\Entities\SubscriberEntity;
|
use MailPoet\Entities\SubscriberEntity;
|
||||||
use MailPoet\Segments\DynamicSegments\Exceptions\InvalidFilterException;
|
use MailPoet\Segments\DynamicSegments\Exceptions\InvalidFilterException;
|
||||||
use MailPoetVendor\Doctrine\DBAL\Query\QueryBuilder;
|
use MailPoetVendor\Doctrine\DBAL\Query\QueryBuilder;
|
||||||
@@ -16,9 +16,9 @@ class UserRole implements Filter {
|
|||||||
$this->entityManager = $entityManager;
|
$this->entityManager = $entityManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function apply(QueryBuilder $queryBuilder, DynamicSegmentFilterEntity $filterEntity): QueryBuilder {
|
public function apply(QueryBuilder $queryBuilder, DynamicSegmentFilterData $filter): QueryBuilder {
|
||||||
global $wpdb;
|
global $wpdb;
|
||||||
$role = $filterEntity->getFilterDataParam('wordpressRole');
|
$role = $filter->getParam('wordpressRole');
|
||||||
if (!$role) {
|
if (!$role) {
|
||||||
throw new InvalidFilterException('Missing role', InvalidFilterException::MISSING_ROLE);
|
throw new InvalidFilterException('Missing role', InvalidFilterException::MISSING_ROLE);
|
||||||
}
|
}
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
namespace MailPoet\Segments\DynamicSegments\Filters;
|
namespace MailPoet\Segments\DynamicSegments\Filters;
|
||||||
|
|
||||||
use MailPoet\Entities\DynamicSegmentFilterEntity;
|
use MailPoet\Entities\DynamicSegmentFilterData;
|
||||||
use MailPoet\Entities\SubscriberEntity;
|
use MailPoet\Entities\SubscriberEntity;
|
||||||
use MailPoet\WP\Functions as WPFunctions;
|
use MailPoet\WP\Functions as WPFunctions;
|
||||||
use MailPoetVendor\Doctrine\DBAL\Query\QueryBuilder;
|
use MailPoetVendor\Doctrine\DBAL\Query\QueryBuilder;
|
||||||
@@ -27,9 +27,9 @@ class WooCommerceCategory implements Filter {
|
|||||||
$this->wp = $wp;
|
$this->wp = $wp;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function apply(QueryBuilder $queryBuilder, DynamicSegmentFilterEntity $filterEntity): QueryBuilder {
|
public function apply(QueryBuilder $queryBuilder, DynamicSegmentFilterData $filter): QueryBuilder {
|
||||||
global $wpdb;
|
global $wpdb;
|
||||||
$categoryId = (int)$filterEntity->getFilterDataParam('category_id');
|
$categoryId = (int)$filter->getParam('category_id');
|
||||||
$subscribersTable = $this->entityManager->getClassMetadata(SubscriberEntity::class)->getTableName();
|
$subscribersTable = $this->entityManager->getClassMetadata(SubscriberEntity::class)->getTableName();
|
||||||
return $queryBuilder->innerJoin(
|
return $queryBuilder->innerJoin(
|
||||||
$subscribersTable,
|
$subscribersTable,
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
namespace MailPoet\Segments\DynamicSegments\Filters;
|
namespace MailPoet\Segments\DynamicSegments\Filters;
|
||||||
|
|
||||||
use MailPoet\Entities\DynamicSegmentFilterEntity;
|
use MailPoet\Entities\DynamicSegmentFilterData;
|
||||||
use MailPoet\Entities\SubscriberEntity;
|
use MailPoet\Entities\SubscriberEntity;
|
||||||
use MailPoetVendor\Doctrine\DBAL\Query\QueryBuilder;
|
use MailPoetVendor\Doctrine\DBAL\Query\QueryBuilder;
|
||||||
use MailPoetVendor\Doctrine\ORM\EntityManager;
|
use MailPoetVendor\Doctrine\ORM\EntityManager;
|
||||||
@@ -17,9 +17,9 @@ class WooCommerceProduct implements Filter {
|
|||||||
$this->entityManager = $entityManager;
|
$this->entityManager = $entityManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function apply(QueryBuilder $queryBuilder, DynamicSegmentFilterEntity $filterEntity): QueryBuilder {
|
public function apply(QueryBuilder $queryBuilder, DynamicSegmentFilterData $filter): QueryBuilder {
|
||||||
global $wpdb;
|
global $wpdb;
|
||||||
$productId = (int)$filterEntity->getFilterDataParam('product_id');
|
$productId = (int)$filter->getParam('product_id');
|
||||||
$subscribersTable = $this->entityManager->getClassMetadata(SubscriberEntity::class)->getTableName();
|
$subscribersTable = $this->entityManager->getClassMetadata(SubscriberEntity::class)->getTableName();
|
||||||
return $queryBuilder->innerJoin(
|
return $queryBuilder->innerJoin(
|
||||||
$subscribersTable,
|
$subscribersTable,
|
||||||
|
@@ -171,7 +171,7 @@ class SegmentSubscribersRepository {
|
|||||||
return $queryBuilder->andWhere('0 = 1');
|
return $queryBuilder->andWhere('0 = 1');
|
||||||
}
|
}
|
||||||
foreach ($filters as $filter) {
|
foreach ($filters as $filter) {
|
||||||
$queryBuilder = $this->filterHandler->apply($queryBuilder, $filter);
|
$queryBuilder = $this->filterHandler->apply($queryBuilder, $filter->getFilterData());
|
||||||
}
|
}
|
||||||
$subscribersTable = $this->entityManager->getClassMetadata(SubscriberEntity::class)->getTableName();
|
$subscribersTable = $this->entityManager->getClassMetadata(SubscriberEntity::class)->getTableName();
|
||||||
$queryBuilder = $queryBuilder->andWhere("$subscribersTable.deleted_at IS NULL");
|
$queryBuilder = $queryBuilder->andWhere("$subscribersTable.deleted_at IS NULL");
|
||||||
|
@@ -335,7 +335,7 @@ class SubscriberListingRepository extends ListingRepository {
|
|||||||
) {
|
) {
|
||||||
// Apply dynamic segments filters
|
// Apply dynamic segments filters
|
||||||
foreach ($segment->getDynamicFilters() as $filter) {
|
foreach ($segment->getDynamicFilters() as $filter) {
|
||||||
$subscribersQuery = $this->dynamicSegmentsFilter->apply($subscribersQuery, $filter);
|
$subscribersQuery = $this->dynamicSegmentsFilter->apply($subscribersQuery, $filter->getFilterData());
|
||||||
}
|
}
|
||||||
// Apply group, search to fetch only necessary ids
|
// Apply group, search to fetch only necessary ids
|
||||||
$subscribersTable = $this->entityManager->getClassMetadata(SubscriberEntity::class)->getTableName();
|
$subscribersTable = $this->entityManager->getClassMetadata(SubscriberEntity::class)->getTableName();
|
||||||
|
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace MailPoet\API\JSON\ResponseBuilders;
|
namespace MailPoet\API\JSON\ResponseBuilders;
|
||||||
|
|
||||||
|
use MailPoet\Entities\DynamicSegmentFilterData;
|
||||||
use MailPoet\Entities\DynamicSegmentFilterEntity;
|
use MailPoet\Entities\DynamicSegmentFilterEntity;
|
||||||
use MailPoet\Entities\SegmentEntity;
|
use MailPoet\Entities\SegmentEntity;
|
||||||
use MailPoet\Entities\SubscriberEntity;
|
use MailPoet\Entities\SubscriberEntity;
|
||||||
@@ -27,7 +28,7 @@ class DynamicSegmentsResponseBuilderTest extends \MailPoetTest {
|
|||||||
expect($response['name'])->equals($name);
|
expect($response['name'])->equals($name);
|
||||||
expect($response['description'])->equals($description);
|
expect($response['description'])->equals($description);
|
||||||
expect($response['type'])->equals(SegmentEntity::TYPE_DYNAMIC);
|
expect($response['type'])->equals(SegmentEntity::TYPE_DYNAMIC);
|
||||||
expect($response['segmentType'])->equals(DynamicSegmentFilterEntity::TYPE_USER_ROLE);
|
expect($response['segmentType'])->equals(DynamicSegmentFilterData::TYPE_USER_ROLE);
|
||||||
expect($response['wordpressRole'])->equals('editor');
|
expect($response['wordpressRole'])->equals('editor');
|
||||||
expect($response)->hasKey('created_at');
|
expect($response)->hasKey('created_at');
|
||||||
expect($response)->hasKey('updated_at');
|
expect($response)->hasKey('updated_at');
|
||||||
@@ -65,10 +66,10 @@ class DynamicSegmentsResponseBuilderTest extends \MailPoetTest {
|
|||||||
|
|
||||||
private function createDynamicSegmentEntity(string $name, string $description): SegmentEntity {
|
private function createDynamicSegmentEntity(string $name, string $description): SegmentEntity {
|
||||||
$segment = new SegmentEntity($name, SegmentEntity::TYPE_DYNAMIC, $description);
|
$segment = new SegmentEntity($name, SegmentEntity::TYPE_DYNAMIC, $description);
|
||||||
$dynamicFilter = new DynamicSegmentFilterEntity($segment, [
|
$dynamicFilter = new DynamicSegmentFilterEntity($segment, new DynamicSegmentFilterData([
|
||||||
'wordpressRole' => 'editor',
|
'wordpressRole' => 'editor',
|
||||||
'segmentType' => DynamicSegmentFilterEntity::TYPE_USER_ROLE,
|
'segmentType' => DynamicSegmentFilterData::TYPE_USER_ROLE,
|
||||||
]);
|
]));
|
||||||
$segment->getDynamicFilters()->add($dynamicFilter);
|
$segment->getDynamicFilters()->add($dynamicFilter);
|
||||||
$this->entityManager->persist($segment);
|
$this->entityManager->persist($segment);
|
||||||
$this->entityManager->persist($dynamicFilter);
|
$this->entityManager->persist($dynamicFilter);
|
||||||
|
@@ -8,6 +8,7 @@ use MailPoet\API\JSON\ResponseBuilders\DynamicSegmentsResponseBuilder;
|
|||||||
use MailPoet\DI\ContainerWrapper;
|
use MailPoet\DI\ContainerWrapper;
|
||||||
use MailPoet\DynamicSegments\Exceptions\ErrorSavingException;
|
use MailPoet\DynamicSegments\Exceptions\ErrorSavingException;
|
||||||
use MailPoet\DynamicSegments\Exceptions\InvalidSegmentTypeException;
|
use MailPoet\DynamicSegments\Exceptions\InvalidSegmentTypeException;
|
||||||
|
use MailPoet\Entities\DynamicSegmentFilterData;
|
||||||
use MailPoet\Entities\DynamicSegmentFilterEntity;
|
use MailPoet\Entities\DynamicSegmentFilterEntity;
|
||||||
use MailPoet\Entities\SegmentEntity;
|
use MailPoet\Entities\SegmentEntity;
|
||||||
use MailPoet\Listing\BulkActionController;
|
use MailPoet\Listing\BulkActionController;
|
||||||
@@ -249,10 +250,10 @@ class DynamicSegmentsTest extends \MailPoetTest {
|
|||||||
|
|
||||||
private function createDynamicSegmentEntity(string $name, string $description): SegmentEntity {
|
private function createDynamicSegmentEntity(string $name, string $description): SegmentEntity {
|
||||||
$segment = new SegmentEntity($name, SegmentEntity::TYPE_DYNAMIC, $description);
|
$segment = new SegmentEntity($name, SegmentEntity::TYPE_DYNAMIC, $description);
|
||||||
$dynamicFilter = new DynamicSegmentFilterEntity($segment, [
|
$dynamicFilter = new DynamicSegmentFilterEntity($segment, new DynamicSegmentFilterData([
|
||||||
'wordpressRole' => 'editor',
|
'wordpressRole' => 'editor',
|
||||||
'segmentType' => DynamicSegmentFilterEntity::TYPE_USER_ROLE,
|
'segmentType' => DynamicSegmentFilterData::TYPE_USER_ROLE,
|
||||||
]);
|
]));
|
||||||
$segment->getDynamicFilters()->add($dynamicFilter);
|
$segment->getDynamicFilters()->add($dynamicFilter);
|
||||||
$this->entityManager->persist($segment);
|
$this->entityManager->persist($segment);
|
||||||
$this->entityManager->persist($dynamicFilter);
|
$this->entityManager->persist($dynamicFilter);
|
||||||
|
@@ -2,11 +2,10 @@
|
|||||||
|
|
||||||
namespace MailPoet\Segments\DynamicSegments\Filters;
|
namespace MailPoet\Segments\DynamicSegments\Filters;
|
||||||
|
|
||||||
use MailPoet\Entities\DynamicSegmentFilterEntity;
|
use MailPoet\Entities\DynamicSegmentFilterData;
|
||||||
use MailPoet\Entities\NewsletterEntity;
|
use MailPoet\Entities\NewsletterEntity;
|
||||||
use MailPoet\Entities\NewsletterLinkEntity;
|
use MailPoet\Entities\NewsletterLinkEntity;
|
||||||
use MailPoet\Entities\ScheduledTaskEntity;
|
use MailPoet\Entities\ScheduledTaskEntity;
|
||||||
use MailPoet\Entities\SegmentEntity;
|
|
||||||
use MailPoet\Entities\SendingQueueEntity;
|
use MailPoet\Entities\SendingQueueEntity;
|
||||||
use MailPoet\Entities\StatisticsClickEntity;
|
use MailPoet\Entities\StatisticsClickEntity;
|
||||||
use MailPoet\Entities\StatisticsNewsletterEntity;
|
use MailPoet\Entities\StatisticsNewsletterEntity;
|
||||||
@@ -178,16 +177,13 @@ class EmailActionTest extends \MailPoetTest {
|
|||||||
->from($subscribersTable);
|
->from($subscribersTable);
|
||||||
}
|
}
|
||||||
|
|
||||||
private function getSegmentFilter(string $action, int $newsletterId, int $linkId = null): DynamicSegmentFilterEntity {
|
private function getSegmentFilter(string $action, int $newsletterId, int $linkId = null): DynamicSegmentFilterData {
|
||||||
return new DynamicSegmentFilterEntity(
|
return new DynamicSegmentFilterData([
|
||||||
new SegmentEntity('segment', SegmentEntity::TYPE_DYNAMIC, 'Description'),
|
'segmentType' => DynamicSegmentFilterData::TYPE_EMAIL,
|
||||||
[
|
|
||||||
'segmentType' => DynamicSegmentFilterEntity::TYPE_EMAIL,
|
|
||||||
'action' => $action,
|
'action' => $action,
|
||||||
'newsletter_id' => $newsletterId,
|
'newsletter_id' => $newsletterId,
|
||||||
'link_id' => $linkId,
|
'link_id' => $linkId,
|
||||||
]
|
]);
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private function createSubscriber(string $email) {
|
private function createSubscriber(string $email) {
|
||||||
|
@@ -2,8 +2,7 @@
|
|||||||
|
|
||||||
namespace MailPoet\Segments\DynamicSegments\Filters;
|
namespace MailPoet\Segments\DynamicSegments\Filters;
|
||||||
|
|
||||||
use MailPoet\Entities\DynamicSegmentFilterEntity;
|
use MailPoet\Entities\DynamicSegmentFilterData;
|
||||||
use MailPoet\Entities\SegmentEntity;
|
|
||||||
use MailPoet\Entities\SubscriberEntity;
|
use MailPoet\Entities\SubscriberEntity;
|
||||||
|
|
||||||
class UserRoleTest extends \MailPoetTest {
|
class UserRoleTest extends \MailPoetTest {
|
||||||
@@ -48,14 +47,11 @@ class UserRoleTest extends \MailPoetTest {
|
|||||||
->from($subscribersTable);
|
->from($subscribersTable);
|
||||||
}
|
}
|
||||||
|
|
||||||
private function getSegmentFilter(string $role): DynamicSegmentFilterEntity {
|
private function getSegmentFilter(string $role): DynamicSegmentFilterData {
|
||||||
return new DynamicSegmentFilterEntity(
|
return new DynamicSegmentFilterData([
|
||||||
new SegmentEntity('segment', SegmentEntity::TYPE_DYNAMIC, 'Description'),
|
'segmentType' => DynamicSegmentFilterData::TYPE_USER_ROLE,
|
||||||
[
|
|
||||||
'segmentType' => DynamicSegmentFilterEntity::TYPE_USER_ROLE,
|
|
||||||
'wordpressRole' => $role,
|
'wordpressRole' => $role,
|
||||||
]
|
]);
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function _after() {
|
public function _after() {
|
||||||
|
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace MailPoet\Segments;
|
namespace MailPoet\Segments;
|
||||||
|
|
||||||
|
use MailPoet\Entities\DynamicSegmentFilterData;
|
||||||
use MailPoet\Entities\DynamicSegmentFilterEntity;
|
use MailPoet\Entities\DynamicSegmentFilterEntity;
|
||||||
use MailPoet\Entities\SegmentEntity;
|
use MailPoet\Entities\SegmentEntity;
|
||||||
use MailPoet\Entities\SubscriberEntity;
|
use MailPoet\Entities\SubscriberEntity;
|
||||||
@@ -170,10 +171,10 @@ class SegmentSubscribersRepositoryTest extends \MailPoetTest {
|
|||||||
|
|
||||||
private function createDynamicSegmentEntity(): SegmentEntity {
|
private function createDynamicSegmentEntity(): SegmentEntity {
|
||||||
$segment = new SegmentEntity('Segment' . rand(0, 10000), SegmentEntity::TYPE_DYNAMIC, 'Segment description');
|
$segment = new SegmentEntity('Segment' . rand(0, 10000), SegmentEntity::TYPE_DYNAMIC, 'Segment description');
|
||||||
$dynamicFilter = new DynamicSegmentFilterEntity($segment, [
|
$dynamicFilter = new DynamicSegmentFilterEntity($segment, new DynamicSegmentFilterData([
|
||||||
'wordpressRole' => 'editor',
|
'wordpressRole' => 'editor',
|
||||||
'segmentType' => DynamicSegmentFilterEntity::TYPE_USER_ROLE,
|
'segmentType' => DynamicSegmentFilterData::TYPE_USER_ROLE,
|
||||||
]);
|
]));
|
||||||
$segment->getDynamicFilters()->add($dynamicFilter);
|
$segment->getDynamicFilters()->add($dynamicFilter);
|
||||||
$this->entityManager->persist($segment);
|
$this->entityManager->persist($segment);
|
||||||
$this->entityManager->persist($dynamicFilter);
|
$this->entityManager->persist($dynamicFilter);
|
||||||
|
@@ -3,6 +3,7 @@
|
|||||||
namespace MailPoet\Segments;
|
namespace MailPoet\Segments;
|
||||||
|
|
||||||
use MailPoet\Config\Populator;
|
use MailPoet\Config\Populator;
|
||||||
|
use MailPoet\Entities\DynamicSegmentFilterData;
|
||||||
use MailPoet\Entities\DynamicSegmentFilterEntity;
|
use MailPoet\Entities\DynamicSegmentFilterEntity;
|
||||||
use MailPoet\Entities\SegmentEntity;
|
use MailPoet\Entities\SegmentEntity;
|
||||||
use MailPoet\Entities\SubscriberEntity;
|
use MailPoet\Entities\SubscriberEntity;
|
||||||
@@ -140,10 +141,10 @@ class SegmentsSimpleListRepositoryTest extends \MailPoetTest {
|
|||||||
|
|
||||||
private function createDynamicSegmentEntityForEditorUsers(): SegmentEntity {
|
private function createDynamicSegmentEntityForEditorUsers(): SegmentEntity {
|
||||||
$segment = new SegmentEntity('Segment' . rand(0, 10000), SegmentEntity::TYPE_DYNAMIC, 'Segment description');
|
$segment = new SegmentEntity('Segment' . rand(0, 10000), SegmentEntity::TYPE_DYNAMIC, 'Segment description');
|
||||||
$dynamicFilter = new DynamicSegmentFilterEntity($segment, [
|
$dynamicFilter = new DynamicSegmentFilterEntity($segment, new DynamicSegmentFilterData([
|
||||||
'wordpressRole' => 'editor',
|
'wordpressRole' => 'editor',
|
||||||
'segmentType' => DynamicSegmentFilterEntity::TYPE_USER_ROLE,
|
'segmentType' => DynamicSegmentFilterData::TYPE_USER_ROLE,
|
||||||
]);
|
]));
|
||||||
$segment->getDynamicFilters()->add($dynamicFilter);
|
$segment->getDynamicFilters()->add($dynamicFilter);
|
||||||
$this->entityManager->persist($segment);
|
$this->entityManager->persist($segment);
|
||||||
$this->entityManager->persist($dynamicFilter);
|
$this->entityManager->persist($dynamicFilter);
|
||||||
|
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace MailPoet\Subscribers;
|
namespace MailPoet\Subscribers;
|
||||||
|
|
||||||
|
use MailPoet\Entities\DynamicSegmentFilterData;
|
||||||
use MailPoet\Entities\DynamicSegmentFilterEntity;
|
use MailPoet\Entities\DynamicSegmentFilterEntity;
|
||||||
use MailPoet\Entities\SegmentEntity;
|
use MailPoet\Entities\SegmentEntity;
|
||||||
use MailPoet\Entities\SubscriberEntity;
|
use MailPoet\Entities\SubscriberEntity;
|
||||||
@@ -289,10 +290,10 @@ class SubscriberListingRepositoryTest extends \MailPoetTest {
|
|||||||
|
|
||||||
private function createDynamicSegmentEntity(): SegmentEntity {
|
private function createDynamicSegmentEntity(): SegmentEntity {
|
||||||
$segment = new SegmentEntity('Segment' . rand(0, 10000), SegmentEntity::TYPE_DYNAMIC, 'Segment description');
|
$segment = new SegmentEntity('Segment' . rand(0, 10000), SegmentEntity::TYPE_DYNAMIC, 'Segment description');
|
||||||
$dynamicFilter = new DynamicSegmentFilterEntity($segment, [
|
$dynamicFilter = new DynamicSegmentFilterEntity($segment, new DynamicSegmentFilterData([
|
||||||
'wordpressRole' => 'editor',
|
'wordpressRole' => 'editor',
|
||||||
'segmentType' => DynamicSegmentFilterEntity::TYPE_USER_ROLE,
|
'segmentType' => DynamicSegmentFilterData::TYPE_USER_ROLE,
|
||||||
]);
|
]));
|
||||||
$segment->getDynamicFilters()->add($dynamicFilter);
|
$segment->getDynamicFilters()->add($dynamicFilter);
|
||||||
$this->entityManager->persist($segment);
|
$this->entityManager->persist($segment);
|
||||||
$this->entityManager->persist($dynamicFilter);
|
$this->entityManager->persist($dynamicFilter);
|
||||||
|
Reference in New Issue
Block a user