diff --git a/lib/Entities/DynamicSegmentFilterEntity.php b/lib/Entities/DynamicSegmentFilterEntity.php new file mode 100644 index 0000000000..c5d2ca66a8 --- /dev/null +++ b/lib/Entities/DynamicSegmentFilterEntity.php @@ -0,0 +1,68 @@ +segment = $segment; + $this->filterData = $filterData; + } + + /** + * @return SegmentEntity|null + */ + public function getSegment() { + $this->safelyLoadToOneAssociation('segment'); + return $this->segment; + } + + /** + * @return array|null + */ + public function getFilterData() { + return $this->filterData; + } + + /** + * @return string|null + */ + public function getSegmentType() { + $filterData = $this->getFilterData(); + return $filterData['segmentType'] ?? null; + } + + public function setSegment(SegmentEntity $segment) { + $this->segment = $segment; + } + + public function setFilterData(array $filterData) { + $this->filterData = $filterData; + } +} diff --git a/lib/Entities/SegmentEntity.php b/lib/Entities/SegmentEntity.php index 5dbee8e7a7..d9536d487a 100644 --- a/lib/Entities/SegmentEntity.php +++ b/lib/Entities/SegmentEntity.php @@ -6,6 +6,7 @@ use MailPoet\Doctrine\EntityTraits\AutoincrementedIdTrait; use MailPoet\Doctrine\EntityTraits\CreatedAtTrait; use MailPoet\Doctrine\EntityTraits\DeletedAtTrait; use MailPoet\Doctrine\EntityTraits\UpdatedAtTrait; +use MailPoetVendor\Doctrine\Common\Collections\ArrayCollection; use MailPoetVendor\Doctrine\ORM\Mapping as ORM; use MailPoetVendor\Symfony\Component\Validator\Constraints as Assert; @@ -43,6 +44,19 @@ class SegmentEntity { */ private $description; + /** + * @ORM\OneToMany(targetEntity="MailPoet\Entities\DynamicSegmentFilterEntity", mappedBy="segment") + * @var DynamicSegmentFilterEntity[]|ArrayCollection + */ + private $dynamicFilters; + + public function __construct(string $name, string $type, string $description = '') { + $this->name = $name; + $this->type = $type; + $this->description = $description; + $this->dynamicFilters = new ArrayCollection(); + } + /** * @return string */ @@ -84,4 +98,11 @@ class SegmentEntity { public function setDescription($description) { $this->description = $description; } + + /** + * @return DynamicSegmentFilterEntity[]|ArrayCollection + */ + public function getDynamicFilters() { + return $this->dynamicFilters; + } } diff --git a/tests/integration/API/JSON/v1/SubscribersTest.php b/tests/integration/API/JSON/v1/SubscribersTest.php index 6ea8f9ff59..a3b65b19c2 100644 --- a/tests/integration/API/JSON/v1/SubscribersTest.php +++ b/tests/integration/API/JSON/v1/SubscribersTest.php @@ -107,14 +107,8 @@ class SubscribersTest extends \MailPoetTest { ); $this->obfuscatedEmail = $obfuscator->obfuscate('email'); $this->obfuscatedSegments = $obfuscator->obfuscate('segments'); - $this->segment1 = new SegmentEntity(); - $this->segment1->setName('Segment 1'); - $this->segment1->setDescription('Segment 1'); - $this->segment1->setType(SegmentEntity::TYPE_DEFAULT); - $this->segment2 = new SegmentEntity(); - $this->segment2->setName('Segment 2'); - $this->segment2->setDescription('Segment 2'); - $this->segment2->setType(SegmentEntity::TYPE_DEFAULT); + $this->segment1 = new SegmentEntity('Segment 1', SegmentEntity::TYPE_DEFAULT, 'Segment 1'); + $this->segment2 = new SegmentEntity('Segment 2', SegmentEntity::TYPE_DEFAULT, 'Segment 2'); $this->entityManager->persist($this->segment1); $this->entityManager->persist($this->segment2); diff --git a/tests/integration/Entities/NewsletterEntityTest.php b/tests/integration/Entities/NewsletterEntityTest.php index d0dc98aa28..badb8f5bd0 100644 --- a/tests/integration/Entities/NewsletterEntityTest.php +++ b/tests/integration/Entities/NewsletterEntityTest.php @@ -59,10 +59,7 @@ class NewsletterEntityTest extends \MailPoetTest { } private function createSegment(): SegmentEntity { - $segment = new SegmentEntity(); - $segment->setType(SegmentEntity::TYPE_DEFAULT); - $segment->setName('Segment'); - $segment->setDescription('Segment description'); + $segment = new SegmentEntity('Segment', SegmentEntity::TYPE_DEFAULT, 'Segment description'); $this->entityManager->persist($segment); return $segment; } diff --git a/tests/integration/Newsletter/Listing/NewsletterListingRepositoryTest.php b/tests/integration/Newsletter/Listing/NewsletterListingRepositoryTest.php index 9b40867ec7..4309d3d69f 100644 --- a/tests/integration/Newsletter/Listing/NewsletterListingRepositoryTest.php +++ b/tests/integration/Newsletter/Listing/NewsletterListingRepositoryTest.php @@ -69,10 +69,7 @@ class NewsletterListingRepositoryTest extends \MailPoetTest { $newsletter->setSubject('Newsletter without segment'); $this->entityManager->persist($newsletter); - $segment = new SegmentEntity(); - $segment->setName('Segment'); - $segment->setType(SegmentEntity::TYPE_DEFAULT); - $segment->setDescription('Segment description'); + $segment = new SegmentEntity('Segment', SegmentEntity::TYPE_DEFAULT, 'Segment description'); $this->entityManager->persist($segment); $newsletter = new NewsletterEntity(); @@ -299,19 +296,13 @@ class NewsletterListingRepositoryTest extends \MailPoetTest { $newsletter1->setSubject('Newsletter with segment 1'); $this->entityManager->persist($newsletter1); - $segment1 = new SegmentEntity(); - $segment1->setName('Segment 1'); - $segment1->setType(SegmentEntity::TYPE_DEFAULT); - $segment1->setDescription('Segment description'); + $segment1 = new SegmentEntity('Segment 1', SegmentEntity::TYPE_DEFAULT, 'Segment description'); $this->entityManager->persist($segment1); $newsletterSegment1 = new NewsletterSegmentEntity($newsletter1, $segment1); $this->entityManager->persist($newsletterSegment1); - $segment2 = new SegmentEntity(); - $segment2->setName('Segment 2'); - $segment2->setType(SegmentEntity::TYPE_DEFAULT); - $segment2->setDescription('Segment without any newsletter'); + $segment2 = new SegmentEntity('Segment 2', SegmentEntity::TYPE_DEFAULT, 'Segment without any newsletter'); $this->entityManager->persist($segment2); $this->entityManager->flush(); diff --git a/tests/integration/Newsletter/NewsletterRepositoryTest.php b/tests/integration/Newsletter/NewsletterRepositoryTest.php index d0ae1fd912..6b191a67d2 100644 --- a/tests/integration/Newsletter/NewsletterRepositoryTest.php +++ b/tests/integration/Newsletter/NewsletterRepositoryTest.php @@ -259,10 +259,7 @@ class NewsletterRepositoryTest extends \MailPoetTest { $this->entityManager->persist($queue); $newsletter->getQueues()->add($queue); - $segment = new SegmentEntity(); - $segment->setType(SegmentEntity::TYPE_DEFAULT); - $segment->setName(" List for newsletter id {$newsletter->getId()}"); - $segment->setDescription(''); + $segment = new SegmentEntity("List for newsletter id {$newsletter->getId()}", SegmentEntity::TYPE_DEFAULT); $this->entityManager->persist($segment); $subscriber = new SubscriberEntity(); diff --git a/tests/integration/Newsletter/NewsletterSaveControllerTest.php b/tests/integration/Newsletter/NewsletterSaveControllerTest.php index 2dcabfa8d0..3d37fe06b9 100644 --- a/tests/integration/Newsletter/NewsletterSaveControllerTest.php +++ b/tests/integration/Newsletter/NewsletterSaveControllerTest.php @@ -170,10 +170,7 @@ class NewsletterSaveControllerTest extends \MailPoetTest { } public function testItCanModifySegmentsOfExistingNewsletter() { - $segment = new SegmentEntity(); - $segment->setType(SegmentEntity::TYPE_DEFAULT); - $segment->setName('Segment 1'); - $segment->setDescription('Segment 1 description'); + $segment = new SegmentEntity('Segment 1', SegmentEntity::TYPE_DEFAULT, 'Segment 1 description'); $this->entityManager->persist($segment); $this->entityManager->flush(); $fakeSegmentId = 1; diff --git a/tests/integration/Subscribers/SubscriberListingRepositoryTest.php b/tests/integration/Subscribers/SubscriberListingRepositoryTest.php index 329b5a45cf..73fa2ff11b 100644 --- a/tests/integration/Subscribers/SubscriberListingRepositoryTest.php +++ b/tests/integration/Subscribers/SubscriberListingRepositoryTest.php @@ -129,10 +129,7 @@ class SubscriberListingRepositoryTest extends \MailPoetTest { } private function createSegmentEntity(): SegmentEntity { - $segment = new SegmentEntity(); - $segment->setName('Segment' . rand(0, 10000)); - $segment->setType(SegmentEntity::TYPE_DEFAULT); - $segment->setDescription('Segment description'); + $segment = new SegmentEntity('Segment' . rand(0, 10000), SegmentEntity::TYPE_DEFAULT, 'Segment description'); $this->entityManager->persist($segment); return $segment; } diff --git a/tests/integration/Subscription/ManageSubscriptionFormRendererTest.php b/tests/integration/Subscription/ManageSubscriptionFormRendererTest.php index 4afffb4ff4..e26ade9252 100644 --- a/tests/integration/Subscription/ManageSubscriptionFormRendererTest.php +++ b/tests/integration/Subscription/ManageSubscriptionFormRendererTest.php @@ -48,10 +48,7 @@ class ManageSubscriptionFormRendererTest extends \MailPoetTest { } private function getSegment(): SegmentEntity { - $segment = new SegmentEntity(); - $segment->setName('Test segment'); - $segment->setDescription('Description'); - $segment->setType(SegmentEntity::TYPE_DEFAULT); + $segment = new SegmentEntity('Test segment', SegmentEntity::TYPE_DEFAULT, 'Description'); $this->entityManager->persist($segment); $this->entityManager->flush(); return $segment;