diff --git a/mailpoet/lib/Segments/DynamicSegments/Filters/SubscriberSegment.php b/mailpoet/lib/Segments/DynamicSegments/Filters/SubscriberSegment.php index 40ed4c2bc4..14a3608aa4 100644 --- a/mailpoet/lib/Segments/DynamicSegments/Filters/SubscriberSegment.php +++ b/mailpoet/lib/Segments/DynamicSegments/Filters/SubscriberSegment.php @@ -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; } } diff --git a/mailpoet/tests/integration/Segments/DynamicSegments/Filters/SubscriberSegmentTest.php b/mailpoet/tests/integration/Segments/DynamicSegments/Filters/SubscriberSegmentTest.php index 3686038501..a25d099b9c 100644 --- a/mailpoet/tests/integration/Segments/DynamicSegments/Filters/SubscriberSegmentTest.php +++ b/mailpoet/tests/integration/Segments/DynamicSegments/Filters/SubscriberSegmentTest.php @@ -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,