From c2c47a1c8437c1d4eb7ce59524d249290df980d0 Mon Sep 17 00:00:00 2001
From: Rostislav Wolny
Date: Thu, 30 Jul 2020 10:35:03 +0200
Subject: [PATCH] Add success message to subscription management form
[MAILPOET-1635]
---
assets/css/src/components-public/_public.scss | 6 +++++-
assets/css/src/mailpoet-public.scss | 1 +
lib/Subscription/Manage.php | 4 +++-
lib/Subscription/ManageSubscriptionFormRenderer.php | 6 +++++-
lib/Subscription/Pages.php | 6 +++++-
tests/acceptance/ManageSubscriptionLinkCest.php | 3 +++
views/subscription/manage_subscription.html | 5 +++++
7 files changed, 27 insertions(+), 4 deletions(-)
diff --git a/assets/css/src/components-public/_public.scss b/assets/css/src/components-public/_public.scss
index e7dd243017..98a2b1b8e2 100644
--- a/assets/css/src/components-public/_public.scss
+++ b/assets/css/src/components-public/_public.scss
@@ -440,7 +440,7 @@ div.mailpoet_form_slide_in.active {
}
}
-// Manage Subscrition page
+// Manage Subscription page
.mailpoet-manage-subscription {
.mailpoet_text_label,
.mailpoet_textarea_label,
@@ -451,4 +451,8 @@ div.mailpoet_form_slide_in.active {
.mailpoet_date_label {
padding-right: 10px;
}
+
+ .mailpoet-submit-success {
+ color: $color-input-success;
+ }
}
diff --git a/assets/css/src/mailpoet-public.scss b/assets/css/src/mailpoet-public.scss
index ae9becd843..758f4d3a3f 100644
--- a/assets/css/src/mailpoet-public.scss
+++ b/assets/css/src/mailpoet-public.scss
@@ -3,6 +3,7 @@
@import 'settings/breakpoints';
@import 'settings/grid';
+@import 'settings/colors';
// Tools
// Default mixins and functions. Not producing any CSS.
diff --git a/lib/Subscription/Manage.php b/lib/Subscription/Manage.php
index f4afd4f4d3..168651d7fc 100644
--- a/lib/Subscription/Manage.php
+++ b/lib/Subscription/Manage.php
@@ -54,6 +54,7 @@ class Manage {
$subscriberData = $_POST['data'];
$subscriberData = $this->fieldNameObfuscator->deobfuscateFormPayload($subscriberData);
+ $result = [];
if (!empty($subscriberData['email'])) {
$subscriber = Subscriber::where('email', $subscriberData['email'])->findOne();
@@ -76,9 +77,10 @@ class Manage {
$subscriber->getErrors();
}
}
+ $result = ['success' => true];
}
- $this->urlHelper->redirectBack();
+ $this->urlHelper->redirectBack($result);
}
private function updateSubscriptions(Subscriber $subscriber, array $subscriberData) {
diff --git a/lib/Subscription/ManageSubscriptionFormRenderer.php b/lib/Subscription/ManageSubscriptionFormRenderer.php
index 22c0d9be9a..0f04024594 100644
--- a/lib/Subscription/ManageSubscriptionFormRenderer.php
+++ b/lib/Subscription/ManageSubscriptionFormRenderer.php
@@ -15,6 +15,9 @@ use MailPoet\Util\Url as UrlHelper;
use MailPoet\WP\Functions as WPFunctions;
class ManageSubscriptionFormRenderer {
+ const FORM_STATE_SUCCESS = 'success';
+ const FORM_STATE_NOT_SUBMITTED = 'not_submitted';
+
/** @var SettingsController */
private $settings;
@@ -54,7 +57,7 @@ class ManageSubscriptionFormRenderer {
$this->templateRenderer = $templateRenderer;
}
- public function renderForm(Subscriber $subscriber): string {
+ public function renderForm(Subscriber $subscriber, string $formState = self::FORM_STATE_NOT_SUBMITTED): string {
$basicFields = $this->getBasicFields($subscriber);
$customFields = $this->getCustomFields($subscriber);
$segmentField = $this->getSegmentField($subscriber);
@@ -83,6 +86,7 @@ class ManageSubscriptionFormRenderer {
'token' => $this->linkTokens->getToken($subscriber),
'editEmailInfo' => __('Need to change your email address? Unsubscribe here, then simply sign up again.', 'mailpoet'),
'formHtml' => $this->formRenderer->renderBlocks($form, [], $honeypot = false),
+ 'formState' => $formState,
];
if ($subscriber->isWPUser() || $subscriber->isWooCommerceUser()) {
diff --git a/lib/Subscription/Pages.php b/lib/Subscription/Pages.php
index b1b85e9588..20ff2073cc 100644
--- a/lib/Subscription/Pages.php
+++ b/lib/Subscription/Pages.php
@@ -358,9 +358,13 @@ class Pages {
return $this->wp->__('Subscription management form is only available to mailing lists subscribers.', 'mailpoet');
}
+ $formStatus = isset($_GET['success']) && $_GET['success']
+ ? ManageSubscriptionFormRenderer::FORM_STATE_SUCCESS
+ : ManageSubscriptionFormRenderer::FORM_STATE_NOT_SUBMITTED;
+
return $this->wp->applyFilters(
'mailpoet_manage_subscription_page',
- $this->manageSubscriptionFormRenderer->renderForm($subscriber)
+ $this->manageSubscriptionFormRenderer->renderForm($subscriber, $formStatus)
);
}
diff --git a/tests/acceptance/ManageSubscriptionLinkCest.php b/tests/acceptance/ManageSubscriptionLinkCest.php
index c23310d0d6..e6ba2667a7 100644
--- a/tests/acceptance/ManageSubscriptionLinkCest.php
+++ b/tests/acceptance/ManageSubscriptionLinkCest.php
@@ -42,6 +42,8 @@ class ManageSubscriptionLinkCest {
$i->click('Manage your subscription');
$i->switchToNextTab();
$i->waitForText('Manage your subscription');
+ $successMessage = 'Your preferences have been saved.';
+ $i->dontSee($successMessage);
$formStatusElement = '[data-automation-id="form_status"]';
@@ -52,6 +54,7 @@ class ManageSubscriptionLinkCest {
$i->click('Save');
$i->waitForElement($formStatusElement);
$i->seeOptionIsSelected($formStatusElement, 'Unsubscribed');
+ $i->see($successMessage);
// change status back to subscribed
$i->selectOption($formStatusElement, 'Subscribed');
diff --git a/views/subscription/manage_subscription.html b/views/subscription/manage_subscription.html
index 62d8d38afd..237fff9568 100644
--- a/views/subscription/manage_subscription.html
+++ b/views/subscription/manage_subscription.html
@@ -11,5 +11,10 @@
<%= editEmailInfo|raw %>
<%= formHtml|raw %>
+ <% if formState == 'success' %>
+
+ <%= _x('Your preferences have been saved.', 'success message after saving subscription settings') %>
+
+ <% endif %>
<% endblock %>