Add lookup data retrieval for subscribed to list

MAILPOET-5625
This commit is contained in:
John Oleksowicz
2023-10-05 14:27:48 -05:00
committed by Aschepikov
parent af9a6cbb67
commit d1f77d3ee5
2 changed files with 28 additions and 2 deletions

View File

@ -6,6 +6,7 @@ use MailPoet\Entities\DynamicSegmentFilterData;
use MailPoet\Entities\DynamicSegmentFilterEntity;
use MailPoet\Entities\SubscriberEntity;
use MailPoet\Entities\SubscriberSegmentEntity;
use MailPoet\Segments\SegmentsRepository;
use MailPoet\Util\Security;
use MailPoetVendor\Doctrine\DBAL\Connection;
use MailPoetVendor\Doctrine\DBAL\Query\QueryBuilder;
@ -17,10 +18,15 @@ class SubscriberSegment implements Filter {
/** @var EntityManager */
private $entityManager;
/** @var SegmentsRepository */
private $segmentsRepository;
public function __construct(
EntityManager $entityManager
EntityManager $entityManager,
SegmentsRepository $segmentsRepository
) {
$this->entityManager = $entityManager;
$this->segmentsRepository = $segmentsRepository;
}
public function apply(QueryBuilder $queryBuilder, DynamicSegmentFilterEntity $filter): QueryBuilder {
@ -61,6 +67,14 @@ class SubscriberSegment implements Filter {
}
public function getLookupData(DynamicSegmentFilterData $filterData): array {
return [];
$lookupData = [
'segments' => [],
];
$segmentIds = $filterData->getArrayParam('segments');
$segments = $this->segmentsRepository->findBy(['id' => $segmentIds]);
foreach ($segments as $segment) {
$lookupData['segments'][$segment->getId()] = $segment->getName();
}
return $lookupData;
}
}

View File

@ -6,6 +6,7 @@ use MailPoet\Entities\DynamicSegmentFilterData;
use MailPoet\Entities\SegmentEntity;
use MailPoet\Entities\SubscriberEntity;
use MailPoet\Entities\SubscriberSegmentEntity;
use MailPoet\Test\DataFactories\Segment;
use MailPoetVendor\Carbon\CarbonImmutable;
class SubscriberSegmentTest extends \MailPoetTest {
@ -66,6 +67,17 @@ class SubscriberSegmentTest extends \MailPoetTest {
$this->assertEqualsCanonicalizing(['a2@example.com', 'a3@example.com'], $emails);
}
public function testItRetrievesLookupData(): void {
$segment = (new Segment())->withName('test segment')->create();
$data = $this->getSegmentFilterData('all', [$segment->getId(), 293847]);
$lookupData = $this->filter->getLookupData($data);
$this->assertEqualsCanonicalizing([
'segments' => [
$segment->getId() => $segment->getName(),
],
], $lookupData);
}
private function getSegmentFilterData(string $operator, array $segments): DynamicSegmentFilterData {
return new DynamicSegmentFilterData(DynamicSegmentFilterData::TYPE_USER_ROLE, SubscriberSegment::TYPE, [
'operator' => $operator,