diff --git a/assets/js/src/settings/default_sender.jsx b/assets/js/src/old_settings/default_sender.jsx
similarity index 100%
rename from assets/js/src/settings/default_sender.jsx
rename to assets/js/src/old_settings/default_sender.jsx
diff --git a/assets/js/src/settings/premium_tab/messages/key_messages.jsx b/assets/js/src/old_settings/premium_tab/messages/key_messages.jsx
similarity index 100%
rename from assets/js/src/settings/premium_tab/messages/key_messages.jsx
rename to assets/js/src/old_settings/premium_tab/messages/key_messages.jsx
diff --git a/assets/js/src/settings/premium_tab/messages/mss_messages.jsx b/assets/js/src/old_settings/premium_tab/messages/mss_messages.jsx
similarity index 100%
rename from assets/js/src/settings/premium_tab/messages/mss_messages.jsx
rename to assets/js/src/old_settings/premium_tab/messages/mss_messages.jsx
diff --git a/assets/js/src/settings/premium_tab/messages/premium_installation_messages.jsx b/assets/js/src/old_settings/premium_tab/messages/premium_installation_messages.jsx
similarity index 100%
rename from assets/js/src/settings/premium_tab/messages/premium_installation_messages.jsx
rename to assets/js/src/old_settings/premium_tab/messages/premium_installation_messages.jsx
diff --git a/assets/js/src/settings/premium_tab/messages/premium_messages.jsx b/assets/js/src/old_settings/premium_tab/messages/premium_messages.jsx
similarity index 96%
rename from assets/js/src/settings/premium_tab/messages/premium_messages.jsx
rename to assets/js/src/old_settings/premium_tab/messages/premium_messages.jsx
index 0bce916760..1ddc606612 100644
--- a/assets/js/src/settings/premium_tab/messages/premium_messages.jsx
+++ b/assets/js/src/old_settings/premium_tab/messages/premium_messages.jsx
@@ -1,7 +1,7 @@
import PropTypes from 'prop-types';
import React from 'react';
import MailPoet from 'mailpoet';
-import { PremiumInstallationMessages } from 'settings/premium_tab/messages/premium_installation_messages.jsx';
+import { PremiumInstallationMessages } from 'old_settings/premium_tab/messages/premium_installation_messages.jsx';
const PremiumStatus = {
KEY_INVALID: 0,
diff --git a/assets/js/src/settings/premium_tab/premium_tab.jsx b/assets/js/src/old_settings/premium_tab/premium_tab.jsx
similarity index 95%
rename from assets/js/src/settings/premium_tab/premium_tab.jsx
rename to assets/js/src/old_settings/premium_tab/premium_tab.jsx
index 0dc7d09d34..7cc05a3096 100644
--- a/assets/js/src/settings/premium_tab/premium_tab.jsx
+++ b/assets/js/src/old_settings/premium_tab/premium_tab.jsx
@@ -2,10 +2,10 @@ import PropTypes from 'prop-types';
import React, { useMemo, useState } from 'react';
import ReactDOM from 'react-dom';
import MailPoet from 'mailpoet';
-import KeyMessages from 'settings/premium_tab/messages/key_messages.jsx';
-import { MssStatus, MssMessages } from 'settings/premium_tab/messages/mss_messages.jsx';
-import { PremiumStatus, PremiumMessages } from 'settings/premium_tab/messages/premium_messages.jsx';
-import { PremiumInstallationStatus } from 'settings/premium_tab/messages/premium_installation_messages.jsx';
+import KeyMessages from 'old_settings/premium_tab/messages/key_messages.jsx';
+import { MssStatus, MssMessages } from 'old_settings/premium_tab/messages/mss_messages.jsx';
+import { PremiumStatus, PremiumMessages } from 'old_settings/premium_tab/messages/premium_messages.jsx';
+import { PremiumInstallationStatus } from 'old_settings/premium_tab/messages/premium_installation_messages.jsx';
const requestServicesApi = async (key, action) => MailPoet.Ajax.post({
api_version: window.mailpoet_api_version,
diff --git a/assets/js/src/settings/reinstall_from_scratch.js b/assets/js/src/old_settings/reinstall_from_scratch.js
similarity index 100%
rename from assets/js/src/settings/reinstall_from_scratch.js
rename to assets/js/src/old_settings/reinstall_from_scratch.js
diff --git a/assets/js/src/settings/settings.jsx b/assets/js/src/old_settings/settings.jsx
similarity index 92%
rename from assets/js/src/settings/settings.jsx
rename to assets/js/src/old_settings/settings.jsx
index 599f200bcf..20cdae243b 100644
--- a/assets/js/src/settings/settings.jsx
+++ b/assets/js/src/old_settings/settings.jsx
@@ -1,6 +1,6 @@
import React from 'react';
import ReactDOM from 'react-dom';
-import DefaultSender from 'settings/default_sender.jsx';
+import DefaultSender from 'old_settings/default_sender.jsx';
import { GlobalContext, useGlobalContextValue } from 'context/index.jsx';
import Notices from 'notices/notices.jsx';
diff --git a/assets/js/src/settings/tabs.js b/assets/js/src/old_settings/tabs.js
similarity index 100%
rename from assets/js/src/settings/tabs.js
rename to assets/js/src/old_settings/tabs.js
diff --git a/assets/js/src/settings/index.tsx b/assets/js/src/settings/index.tsx
new file mode 100644
index 0000000000..f2b1e65f03
--- /dev/null
+++ b/assets/js/src/settings/index.tsx
@@ -0,0 +1,9 @@
+import React from 'react';
+import ReactDOM from 'react-dom';
+
+const App = () =>
Settings
;
+
+const container = document.getElementById('settings_container');
+if (container) {
+ ReactDOM.render(, container);
+}
diff --git a/assets/js/src/webpack_admin_index.jsx b/assets/js/src/webpack_admin_index.jsx
index 3545155201..568471295d 100644
--- a/assets/js/src/webpack_admin_index.jsx
+++ b/assets/js/src/webpack_admin_index.jsx
@@ -9,12 +9,13 @@ import 'subscribers/subscribers.jsx'; // side effect - renders ReactDOM to docum
import 'newsletters/newsletters.jsx'; // side effect - renders ReactDOM to window
import 'segments/segments.jsx'; // side effect - renders ReactDOM to document
import 'dynamic_segments/dynamic_segments.jsx'; // side effect - renders ReactDOM to document
-import 'settings/settings.jsx'; // side effect - renders ReactDOM to document
+import 'old_settings/settings.jsx'; // side effect - renders ReactDOM to document
import 'forms/forms.jsx'; // side effect - renders ReactDOM to document
-import 'settings/tabs.js'; // side effect - assigns to MailPoet.Router, executes code on doc ready
-import 'settings/premium_tab/premium_tab.jsx'; // side effect - renders ReactDOM to document
+import 'old_settings/tabs.js'; // side effect - assigns to MailPoet.Router, executes code on doc ready
+import 'old_settings/premium_tab/premium_tab.jsx'; // side effect - renders ReactDOM to document
import 'help/help.jsx'; // side effect - renders ReactDOM to document
-import 'settings/reinstall_from_scratch.js'; // side effect - adds event handler to document
+import 'old_settings/reinstall_from_scratch.js'; // side effect - adds event handler to document
+import 'settings/index.tsx'; // side effect - renders Settings to document
import 'subscribers/importExport/import.jsx'; // side effect - executes on doc ready, adds events
import 'subscribers/importExport/export.js'; // side effect - executes on doc ready
import 'wizard/wizard.jsx'; // side effect - renders ReactDOM to document
diff --git a/lib/AdminPages/Pages/OldSettings.php b/lib/AdminPages/Pages/OldSettings.php
new file mode 100644
index 0000000000..a731039a65
--- /dev/null
+++ b/lib/AdminPages/Pages/OldSettings.php
@@ -0,0 +1,104 @@
+pageRenderer = $pageRenderer;
+ $this->settings = $settings;
+ $this->woocommerceHelper = $woocommerceHelper;
+ $this->wp = $wp;
+ $this->servicesChecker = $servicesChecker;
+ $this->installation = $installation;
+ $this->captcha = $captcha;
+ }
+
+ public function render() {
+ $settings = $this->settings->getAll();
+
+ $premiumKeyValid = $this->servicesChecker->isPremiumKeyValid(false);
+ // force MSS key check even if the method isn't active
+ $mpApiKeyValid = $this->servicesChecker->isMailPoetAPIKeyValid(false, true);
+
+ $data = [
+ 'settings' => $settings,
+ 'segments' => Segment::getSegmentsWithSubscriberCount(),
+ 'cron_trigger' => CronTrigger::METHODS,
+ 'total_subscribers' => Subscriber::getTotalSubscribers(),
+ 'premium_plugin_active' => License::getLicense(),
+ 'premium_key_valid' => !empty($premiumKeyValid),
+ 'mss_active' => Bridge::isMPSendingServiceEnabled(),
+ 'mss_key_valid' => !empty($mpApiKeyValid),
+ 'members_plugin_active' => $this->wp->isPluginActive('members/members.php'),
+ 'pages' => Pages::getAll(),
+ 'current_user' => $this->wp->wpGetCurrentUser(),
+ 'linux_cron_path' => dirname(dirname(dirname(__DIR__))),
+ 'is_woocommerce_active' => $this->woocommerceHelper->isWooCommerceActive(),
+ 'ABSPATH' => ABSPATH,
+ 'hosts' => [
+ 'web' => Hosts::getWebHosts(),
+ 'smtp' => Hosts::getSMTPHosts(),
+ ],
+ 'built_in_captcha_supported' => $this->captcha->isSupported(),
+ ];
+
+ $data['is_new_user'] = $this->installation->isNewInstallation();
+
+ $data = array_merge($data, Installer::getPremiumStatus());
+
+ if (isset($_GET['enable-customizer-notice'])) {
+ $notice = new WPNotice(WPNotice::TYPE_ERROR, $this->wp->_x(
+ 'You need to have WooCommerce active to access the MailPoet email customizer for WooCommerce.',
+ 'Notice in Settings when WooCommerce is not enabled'
+ ), 'mailpoet');
+ $notice->displayWPNotice();
+ }
+ $this->pageRenderer->displayPage('old_settings.html', $data);
+ }
+}
diff --git a/lib/Config/Menu.php b/lib/Config/Menu.php
index 37301e1a2e..d474bfdd96 100644
--- a/lib/Config/Menu.php
+++ b/lib/Config/Menu.php
@@ -10,6 +10,7 @@ use MailPoet\AdminPages\Pages\Help;
use MailPoet\AdminPages\Pages\MP2Migration;
use MailPoet\AdminPages\Pages\NewsletterEditor;
use MailPoet\AdminPages\Pages\Newsletters;
+use MailPoet\AdminPages\Pages\OldSettings;
use MailPoet\AdminPages\Pages\Premium;
use MailPoet\AdminPages\Pages\RevenueTrackingPermission;
use MailPoet\AdminPages\Pages\Segments;
@@ -298,7 +299,7 @@ class Menu {
'mailpoet-settings',
[
$this,
- 'settings',
+ 'oldSettings',
]
);
@@ -403,6 +404,16 @@ class Menu {
'mailpoet-experimental',
[$this, 'experimentalFeatures']
);
+
+ // New Settings page
+ $this->wp->addSubmenuPage(
+ true,
+ $this->setPageTitle('New Settings'),
+ '',
+ AccessControl::PERMISSION_MANAGE_SETTINGS,
+ 'mailpoet-new-settings',
+ [$this, 'settings']
+ );
}
public function disableWPEmojis() {
@@ -434,6 +445,10 @@ class Menu {
$this->container->get(Premium::class)->render();
}
+ public function oldSettings() {
+ $this->container->get(OldSettings::class)->render();
+ }
+
public function settings() {
$this->container->get(Settings::class)->render();
}
diff --git a/lib/DI/ContainerConfigurator.php b/lib/DI/ContainerConfigurator.php
index 1b6f22309c..b6170dd87c 100644
--- a/lib/DI/ContainerConfigurator.php
+++ b/lib/DI/ContainerConfigurator.php
@@ -45,6 +45,7 @@ class ContainerConfigurator implements IContainerConfigurator {
$container->autowire(\MailPoet\AdminPages\Pages\Premium::class)->setPublic(true);
$container->autowire(\MailPoet\AdminPages\Pages\RevenueTrackingPermission::class)->setPublic(true);
$container->autowire(\MailPoet\AdminPages\Pages\Segments::class)->setPublic(true);
+ $container->autowire(\MailPoet\AdminPages\Pages\OldSettings::class)->setPublic(true);
$container->autowire(\MailPoet\AdminPages\Pages\Settings::class)->setPublic(true);
$container->autowire(\MailPoet\AdminPages\Pages\Subscribers::class)->setPublic(true);
$container->autowire(\MailPoet\AdminPages\Pages\SubscribersAPIKeyInvalid::class)->setPublic(true);
diff --git a/views/old_settings.html b/views/old_settings.html
new file mode 100644
index 0000000000..02cb72e280
--- /dev/null
+++ b/views/old_settings.html
@@ -0,0 +1,324 @@
+<% extends 'layout.html' %>
+
+<% block content %>
+
+
+
<%= __('Settings') %>
+
+
+
+
+
+
+<% endblock %>
+<% block translations %>
+ <%= localize({
+ 'reinstallConfirmation': __('Are you sure? All of your MailPoet data will be permanently erased (newsletters, statistics, subscribers, etc.).'),
+ 'announcementHeader': __('Get notified when someone subscribes'),
+ 'announcementParagraph1': __('It’s been a popular feature request from our users, we hope you get lots of emails about all your new subscribers!'),
+ 'announcementParagraph2': __('(You can turn this feature off if it’s too many emails.)'),
+ 'yourName': __('Your name'),
+ 'from': __('From'),
+ 'replyTo': __('Reply-to'),
+
+ 'premiumTabActivationKeyLabel': __('Activation Key', 'mailpoet'),
+ 'premiumTabDescription': __('This key is used to validate your free or paid subscription. Paying customers will enjoy automatic upgrades of their Premium plugin and access to faster support.', 'mailpoet'),
+ 'premiumTabNoKeyNotice': __('Please specify a license key before validating it.', 'mailpoet'),
+ 'premiumTabVerifyButton': __('Verify', 'mailpoet'),
+ 'premiumTabKeyValidMessage': __('Your key is valid', 'mailpoet'),
+ 'premiumTabKeyNotValidMessage': __('Your key is not valid', 'mailpoet'),
+ 'premiumTabPremiumActiveMessage': __('MailPoet Premium is active', 'mailpoet'),
+ 'premiumTabPremiumInstallingMessage': __('MailPoet Premium plugin is being installed', 'mailpoet'),
+ 'premiumTabPremiumActivatingMessage': __('MailPoet Premium plugin is being activated', 'mailpoet'),
+ 'premiumTabPremiumNotInstalledMessage': __('MailPoet Premium is not installed.', 'mailpoet'),
+ 'premiumTabPremiumInstallMessage': __('Install MailPoet Premium plugin', 'mailpoet'),
+ 'premiumTabPremiumNotActiveMessage': __('MailPoet Premium is not active.', 'mailpoet'),
+ 'premiumTabPremiumActivateMessage': __('Activate MailPoet Premium plugin', 'mailpoet'),
+ 'premiumTabPremiumInstallationInstallingMessage': __('downloading MailPoet Premium…', 'mailpoet'),
+ 'premiumTabPremiumInstallationActivatingMessage': __('activating MailPoet Premium…', 'mailpoet'),
+ 'premiumTabPremiumInstallationActiveMessage': __('MailPoet Premium is active!', 'mailpoet'),
+ 'premiumTabPremiumInstallationErrorMessage': __('Something went wrong. Please [link]download the Premium plugin from your account[/link] and [link]contact our support team[/link].', 'mailpoet'),
+ 'premiumTabPremiumKeyNotValidMessage': __('Your key is not valid for MailPoet Premium', 'mailpoet'),
+ 'premiumTabMssActiveMessage': __('MailPoet Sending Service is active', 'mailpoet'),
+ 'premiumTabMssNotActiveMessage': __('MailPoet Sending Service is not active.', 'mailpoet'),
+ 'premiumTabMssActivateMessage': __('Activate MailPoet Sending Service', 'mailpoet'),
+ 'premiumTabMssKeyNotValidMessage': __('Your key is not valid for the MailPoet Sending Service', 'mailpoet'),
+ }) %>
+<% endblock %>
diff --git a/views/settings.html b/views/settings.html
index 02cb72e280..4408fa24c0 100644
--- a/views/settings.html
+++ b/views/settings.html
@@ -1,273 +1,9 @@
<% extends 'layout.html' %>
<% block content %>
-
-
-
<%= __('Settings') %>
-
-
-
-
+