Use feature flag for the MSS Pitch feature

[MAILPOET-2142]
This commit is contained in:
Pavel Dohnal
2019-09-17 14:24:39 +02:00
committed by Jack Kitterhing
parent a222d91d71
commit 4154d0b928
7 changed files with 52 additions and 5 deletions

View File

@@ -4,8 +4,10 @@ import PropTypes from 'prop-types';
import MSSUserSuccess from './success_for_mss_users.jsx'; import MSSUserSuccess from './success_for_mss_users.jsx';
import PitchMss from './success_pitch_mss.jsx'; import PitchMss from './success_pitch_mss.jsx';
function Success(props) { import FeaturesContext from '../../../features/context.jsx';
if (!window.has_premium_key) {
function SuccessContent(props) {
if (!window.has_premium_key && props.isSupported('display-mss-pitch')) {
return ( return (
<PitchMss <PitchMss
MSSPitchIllustrationUrl={props.MSSPitchIllustrationUrl} MSSPitchIllustrationUrl={props.MSSPitchIllustrationUrl}
@@ -25,6 +27,19 @@ function Success(props) {
); );
} }
function Success(props) {
return (
<FeaturesContext.Consumer>
{(FeaturesController) => (
<SuccessContent
{...props}
isSupported={FeaturesController.isSupported}
/>
)}
</FeaturesContext.Consumer>
);
}
Success.propTypes = { Success.propTypes = {
successClicked: PropTypes.func.isRequired, successClicked: PropTypes.func.isRequired,
illustrationImageUrl: PropTypes.string.isRequired, illustrationImageUrl: PropTypes.string.isRequired,
@@ -38,5 +53,18 @@ Success.propTypes = {
mailpoetAccountUrl: PropTypes.string.isRequired, mailpoetAccountUrl: PropTypes.string.isRequired,
}; };
SuccessContent.propTypes = {
successClicked: PropTypes.func.isRequired,
illustrationImageUrl: PropTypes.string.isRequired,
MSSPitchIllustrationUrl: PropTypes.string.isRequired,
newsletter: PropTypes.shape({
status: PropTypes.string.isRequired,
type: PropTypes.string.isRequired,
}).isRequired,
isWoocommerceActive: PropTypes.bool.isRequired,
subscribersCount: PropTypes.number.isRequired,
mailpoetAccountUrl: PropTypes.string.isRequired,
isSupported: PropTypes.func.isRequired,
};
export default Success; export default Success;

View File

@@ -1,10 +1,11 @@
import MailPoet from 'mailpoet';
export const getStepsCount = () => { export const getStepsCount = () => {
let stepsCount = 3; let stepsCount = 3;
if (window.is_woocommerce_active) { if (window.is_woocommerce_active) {
stepsCount += 1; stepsCount += 1;
} }
if (!window.has_premium_key) { if (!window.has_premium_key && MailPoet.FeaturesController.isSupported('display-mss-pitch')) {
stepsCount += 1; stepsCount += 1;
} }
return stepsCount; return stepsCount;

View File

@@ -5,6 +5,7 @@ namespace MailPoet\AdminPages\Pages;
use MailPoet\AdminPages\PageRenderer; use MailPoet\AdminPages\PageRenderer;
use MailPoet\Config\Env; use MailPoet\Config\Env;
use MailPoet\Config\Menu; use MailPoet\Config\Menu;
use MailPoet\Features\FeaturesController;
use MailPoet\Listing\PageLimit; use MailPoet\Listing\PageLimit;
use MailPoet\Models\Newsletter; use MailPoet\Models\Newsletter;
use MailPoet\Models\Segment; use MailPoet\Models\Segment;
@@ -40,6 +41,9 @@ class Newsletters {
/** @var Installation */ /** @var Installation */
private $installation; private $installation;
/** @var FeaturesController */
private $features_controller;
function __construct( function __construct(
PageRenderer $page_renderer, PageRenderer $page_renderer,
PageLimit $listing_page_limit, PageLimit $listing_page_limit,
@@ -47,7 +51,8 @@ class Newsletters {
SettingsController $settings, SettingsController $settings,
UserFlagsController $user_flags, UserFlagsController $user_flags,
WooCommerceHelper $woocommerce_helper, WooCommerceHelper $woocommerce_helper,
Installation $installation Installation $installation,
FeaturesController $features_controller
) { ) {
$this->page_renderer = $page_renderer; $this->page_renderer = $page_renderer;
$this->listing_page_limit = $listing_page_limit; $this->listing_page_limit = $listing_page_limit;
@@ -56,6 +61,7 @@ class Newsletters {
$this->user_flags = $user_flags; $this->user_flags = $user_flags;
$this->woocommerce_helper = $woocommerce_helper; $this->woocommerce_helper = $woocommerce_helper;
$this->installation = $installation; $this->installation = $installation;
$this->features_controller = $features_controller;
} }
function render() { function render() {
@@ -98,6 +104,7 @@ class Newsletters {
$data['is_woocommerce_active'] = $this->woocommerce_helper->isWooCommerceActive(); $data['is_woocommerce_active'] = $this->woocommerce_helper->isWooCommerceActive();
$data['is_mailpoet_update_available'] = array_key_exists(Env::$plugin_path, $this->wp->getPluginUpdates()); $data['is_mailpoet_update_available'] = array_key_exists(Env::$plugin_path, $this->wp->getPluginUpdates());
$data['subscribers_count'] = Subscriber::getTotalSubscribers(); $data['subscribers_count'] = Subscriber::getTotalSubscribers();
$data['mailpoet_feature_flags'] = $this->features_controller->getAllFlags();
if (!$data['premium_plugin_active']) { if (!$data['premium_plugin_active']) {
$data['free_premium_subscribers_limit'] = License::FREE_PREMIUM_SUBSCRIBERS_LIMIT; $data['free_premium_subscribers_limit'] = License::FREE_PREMIUM_SUBSCRIBERS_LIMIT;

View File

@@ -5,6 +5,7 @@ namespace MailPoet\AdminPages\Pages;
use MailPoet\AdminPages\PageRenderer; use MailPoet\AdminPages\PageRenderer;
use MailPoet\Config\Menu; use MailPoet\Config\Menu;
use MailPoet\Config\MP2Migrator; use MailPoet\Config\MP2Migrator;
use MailPoet\Features\FeaturesController;
use MailPoet\Models\Subscriber; use MailPoet\Models\Subscriber;
use MailPoet\Services\Bridge; use MailPoet\Services\Bridge;
use MailPoet\Settings\SettingsController; use MailPoet\Settings\SettingsController;
@@ -24,16 +25,21 @@ class WelcomeWizard {
/** @var WPFunctions */ /** @var WPFunctions */
private $wp; private $wp;
/** @var FeaturesController */
private $features_controller;
function __construct( function __construct(
PageRenderer $page_renderer, PageRenderer $page_renderer,
SettingsController $settings, SettingsController $settings,
WooCommerceHelper $woocommerce_helper, WooCommerceHelper $woocommerce_helper,
WPFunctions $wp WPFunctions $wp,
FeaturesController $features_controller
) { ) {
$this->page_renderer = $page_renderer; $this->page_renderer = $page_renderer;
$this->settings = $settings; $this->settings = $settings;
$this->woocommerce_helper = $woocommerce_helper; $this->woocommerce_helper = $woocommerce_helper;
$this->wp = $wp; $this->wp = $wp;
$this->features_controller = $features_controller;
} }
function render() { function render() {
@@ -47,6 +53,7 @@ class WelcomeWizard {
'subscribers_count' => Subscriber::getTotalSubscribers(), 'subscribers_count' => Subscriber::getTotalSubscribers(),
'has_premium_key' => Bridge::isMSSKeySpecified(), 'has_premium_key' => Bridge::isMSSKeySpecified(),
]; ];
$data['mailpoet_feature_flags'] = $this->features_controller->getAllFlags();
$this->page_renderer->displayPage('welcome_wizard.html', $data); $this->page_renderer->displayPage('welcome_wizard.html', $data);
} }
} }

View File

@@ -12,6 +12,7 @@ class FeaturesController {
const SEND_WORDPRESS_MAILS_WITH_MP3 = 'send-wordpress-mails-with-mp3'; const SEND_WORDPRESS_MAILS_WITH_MP3 = 'send-wordpress-mails-with-mp3';
const NEW_PREMIUM_PAGE = 'new-premium-page'; const NEW_PREMIUM_PAGE = 'new-premium-page';
const WC_TRANSACTIONAL_EMAILS_CUSTOMIZER = 'wc-transactional-emails-customizer'; const WC_TRANSACTIONAL_EMAILS_CUSTOMIZER = 'wc-transactional-emails-customizer';
const DISPLAY_MSS_PITCH = 'display-mss-pitch';
// Define feature defaults in the array below in the following form: // Define feature defaults in the array below in the following form:
// self::FEATURE_NAME_OF_FEATURE => true, // self::FEATURE_NAME_OF_FEATURE => true,
@@ -20,6 +21,7 @@ class FeaturesController {
self::SEND_WORDPRESS_MAILS_WITH_MP3 => false, self::SEND_WORDPRESS_MAILS_WITH_MP3 => false,
self::NEW_PREMIUM_PAGE => false, self::NEW_PREMIUM_PAGE => false,
self::WC_TRANSACTIONAL_EMAILS_CUSTOMIZER => false, self::WC_TRANSACTIONAL_EMAILS_CUSTOMIZER => false,
self::DISPLAY_MSS_PITCH => false,
]; ];
/** @var array */ /** @var array */

View File

@@ -28,6 +28,7 @@
var has_premium_key = <%= json_encode(has_premium_key) %>; var has_premium_key = <%= json_encode(has_premium_key) %>;
var MSS_pitch_illustration_url = '<%= cdn_url('welcome-wizard/illu-pitch-mss.20190912.png') %>'; var MSS_pitch_illustration_url = '<%= cdn_url('welcome-wizard/illu-pitch-mss.20190912.png') %>';
var mailpoet_account_url = '<%= add_referral_id("https://account.mailpoet.com/?s=" ~ subscribers_count) %>'; var mailpoet_account_url = '<%= add_referral_id("https://account.mailpoet.com/?s=" ~ subscribers_count) %>';
var mailpoet_feature_flags = <%= json_encode(mailpoet_feature_flags) %>;
var mailpoet_woocommerce_active = <%= json_encode(is_woocommerce_active) %>; var mailpoet_woocommerce_active = <%= json_encode(is_woocommerce_active) %>;
var mailpoet_automatic_emails = <%= json_encode(automatic_emails) %>; var mailpoet_automatic_emails = <%= json_encode(automatic_emails) %>;

View File

@@ -18,6 +18,7 @@
var subscribers_count = <%= subscribers_count %>; var subscribers_count = <%= subscribers_count %>;
var mailpoet_account_url = '<%= add_referral_id("https://account.mailpoet.com/?s=" ~ subscribers_count) %>'; var mailpoet_account_url = '<%= add_referral_id("https://account.mailpoet.com/?s=" ~ subscribers_count) %>';
var has_premium_key = <%= json_encode(has_premium_key) %>; var has_premium_key = <%= json_encode(has_premium_key) %>;
var mailpoet_feature_flags = <%= json_encode(mailpoet_feature_flags) %>;
</script> </script>
<div id="mailpoet_wizard_container"></div> <div id="mailpoet_wizard_container"></div>