diff --git a/lib/Subscription/ManageSubscriptionFormRenderer.php b/lib/Subscription/ManageSubscriptionFormRenderer.php index 8a2cd51a32..22c0d9be9a 100644 --- a/lib/Subscription/ManageSubscriptionFormRenderer.php +++ b/lib/Subscription/ManageSubscriptionFormRenderer.php @@ -74,6 +74,8 @@ class ManageSubscriptionFormRenderer { ] ); + $form = $this->wp->applyFilters('mailpoet_manage_subscription_page_form_fields', $form); + $templateData = [ 'actionUrl' => admin_url('admin-post.php'), 'redirectUrl' => $this->urlHelper->getCurrentUrl(), diff --git a/tests/integration/Subscription/ManageSubscriptionFormRendererTest.php b/tests/integration/Subscription/ManageSubscriptionFormRendererTest.php index 9d187b66f6..118d7c3b70 100644 --- a/tests/integration/Subscription/ManageSubscriptionFormRendererTest.php +++ b/tests/integration/Subscription/ManageSubscriptionFormRendererTest.php @@ -6,6 +6,7 @@ use MailPoet\Entities\SegmentEntity; use MailPoet\Entities\SubscriberEntity; use MailPoet\Entities\SubscriberSegmentEntity; use MailPoet\Models\Subscriber; +use MailPoet\WP\Functions as WPFunctions; class ManageSubscriptionFormRendererTest extends \MailPoetTest { /** @var ManageSubscriptionFormRenderer */ @@ -18,24 +19,7 @@ class ManageSubscriptionFormRendererTest extends \MailPoetTest { } public function testItGeneratesForm() { - $segment = new SegmentEntity(); - $segment->setName('Test segment'); - $segment->setDescription('Description'); - $segment->setType(SegmentEntity::TYPE_DEFAULT); - $this->entityManager->persist($segment); - - $subscriber = new SubscriberEntity(); - $subscriber->setStatus(SubscriberEntity::STATUS_SUBSCRIBED); - $subscriber->setFirstName('Fname'); - $subscriber->setLastName('Lname'); - $subscriber->setEmail('subscriber@test.com'); - - $subscriberSegment = new SubscriberSegmentEntity($segment, $subscriber, SubscriberEntity::STATUS_SUBSCRIBED); - $this->entityManager->persist($subscriberSegment); - $subscriber->getSegments()->add($subscriberSegment); - $this->entityManager->persist($subscriber); - $this->entityManager->flush(); - + $subscriber = $this->getSubscriber($this->getSegment()); $form = $this->formRenderer->renderForm(Subscriber::findOne($subscriber->getId())); expect($form)->regExp('/
/'); expect($form)->contains(''); @@ -45,6 +29,52 @@ class ManageSubscriptionFormRendererTest extends \MailPoetTest { expect($form)->contains('Need to change your email address? Unsubscribe here, then simply sign up again.'); } + public function testItAppliesFieldsFilter() { + $subscriber = $this->getSubscriber($this->getSegment()); + $wp = $this->diContainer->get(WPFunctions::class); + $wp->addFilter('mailpoet_manage_subscription_page_form_fields', function($fields) { + $fields[] = [ + 'type' => 'text', + 'name' => 'Additional info', + 'id' => 'additional_info', + 'params' => [ + 'label' => 'Additional info', + ], + ]; + return $fields; + }); + $form = $this->formRenderer->renderForm(Subscriber::findOne($subscriber->getId())); + expect($form)->regExp('//'); + } + + private function getSegment(): SegmentEntity { + $segment = new SegmentEntity(); + $segment->setName('Test segment'); + $segment->setDescription('Description'); + $segment->setType(SegmentEntity::TYPE_DEFAULT); + $this->entityManager->persist($segment); + $this->entityManager->flush(); + return $segment; + } + + private function getSubscriber(SegmentEntity $segment = null): SubscriberEntity { + $subscriber = new SubscriberEntity(); + $subscriber->setStatus(SubscriberEntity::STATUS_SUBSCRIBED); + $subscriber->setFirstName('Fname'); + $subscriber->setLastName('Lname'); + $subscriber->setEmail('subscriber@test.com'); + + if ($segment) { + $subscriberSegment = new SubscriberSegmentEntity($segment, $subscriber, SubscriberEntity::STATUS_SUBSCRIBED); + $this->entityManager->persist($subscriberSegment); + $subscriber->getSegments()->add($subscriberSegment); + } + + $this->entityManager->persist($subscriber); + $this->entityManager->flush(); + return $subscriber; + } + private function cleanup() { $this->truncateEntity(SubscriberEntity::class); $this->truncateEntity(SubscriberSegmentEntity::class);