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') %>

+ + +
+ + + + +
+ <% include 'settings/mta.html' %> +
+ + +
+ <% include 'settings/basics.html' %> +
+ + +
+ <% include 'settings/signup.html' %> +
+ + <% if is_woocommerce_active %> + +
+ <% include 'settings/woocommerce.html' %> +
+ <% endif %> + + +
+ <% include 'settings/advanced.html' %> +
+ + +
+ <% include 'settings/premium.html' %> +
+ + +
+
+ + +<% 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') %>

- - -
- - - - -
- <% include 'settings/mta.html' %> -
- - -
- <% include 'settings/basics.html' %> -
- - -
- <% include 'settings/signup.html' %> -
- - <% if is_woocommerce_active %> - -
- <% include 'settings/woocommerce.html' %> -
- <% endif %> - - -
- <% include 'settings/advanced.html' %> -
- - -
- <% include 'settings/premium.html' %> -
- - -
-
+