From 41b23b24b961d4b09fc55ca456050b7be36dde22 Mon Sep 17 00:00:00 2001 From: Sam Najian Date: Wed, 18 Jan 2023 22:21:27 +0100 Subject: [PATCH] Add Coupon block feature flag [MAILPOET-4678] --- .../assets/js/src/newsletter_editor/blocks/coupon.ts | 8 +++++++- mailpoet/lib/Features/FeaturesController.php | 3 +++ mailpoet/lib/Newsletter/Renderer/Preprocessor.php | 12 ++++++++++-- .../WooCommerce/TransactionalEmails/RendererTest.php | 4 +++- .../unit/Newsletter/Renderer/PreprocessorTest.php | 7 +++++-- 5 files changed, 28 insertions(+), 6 deletions(-) diff --git a/mailpoet/assets/js/src/newsletter_editor/blocks/coupon.ts b/mailpoet/assets/js/src/newsletter_editor/blocks/coupon.ts index 8a85eee482..2f6e5b747c 100644 --- a/mailpoet/assets/js/src/newsletter_editor/blocks/coupon.ts +++ b/mailpoet/assets/js/src/newsletter_editor/blocks/coupon.ts @@ -7,6 +7,9 @@ import { BaseBlock } from 'newsletter_editor/blocks/base'; import _ from 'underscore'; import jQuery from 'jquery'; import 'backbone.marionette'; +import { MailPoet } from '../../mailpoet'; + +export const FEATURE_COUPON_BLOCK = 'Coupon block'; const Module: Record void> = {}; const base = BaseBlock; @@ -232,7 +235,10 @@ Module.CouponWidgetView = base.WidgetView.extend({ }); App.on('before:start', (BeforeStartApp) => { - if (!window.MailPoet.isWoocommerceActive) { + if ( + !MailPoet.FeaturesController.isSupported(FEATURE_COUPON_BLOCK) || + !window.MailPoet.isWoocommerceActive + ) { return; } BeforeStartApp.registerBlockType('coupon', { diff --git a/mailpoet/lib/Features/FeaturesController.php b/mailpoet/lib/Features/FeaturesController.php index 236d98e85c..4ad95f6121 100644 --- a/mailpoet/lib/Features/FeaturesController.php +++ b/mailpoet/lib/Features/FeaturesController.php @@ -9,11 +9,14 @@ class FeaturesController { const FEATURE_LANDINGPAGE = 'landingpage'; + const FEATURE_COUPON_BLOCK = 'Coupon block'; + // Define feature defaults in the array below in the following form: // self::FEATURE_NAME_OF_FEATURE => true, private $defaults = [ self::FEATURE_HOMEPAGE => false, self::FEATURE_LANDINGPAGE => false, + self::FEATURE_COUPON_BLOCK => false, ]; /** @var array|null */ diff --git a/mailpoet/lib/Newsletter/Renderer/Preprocessor.php b/mailpoet/lib/Newsletter/Renderer/Preprocessor.php index 829a873c52..0130576159 100644 --- a/mailpoet/lib/Newsletter/Renderer/Preprocessor.php +++ b/mailpoet/lib/Newsletter/Renderer/Preprocessor.php @@ -3,6 +3,7 @@ namespace MailPoet\Newsletter\Renderer; use MailPoet\Entities\NewsletterEntity; +use MailPoet\Features\FeaturesController; use MailPoet\Newsletter\Renderer\Blocks\AbandonedCartContent; use MailPoet\Newsletter\Renderer\Blocks\AutomatedLatestContentBlock; use MailPoet\Tasks\Sending as SendingTask; @@ -31,16 +32,21 @@ class Preprocessor { /*** @var CouponPreProcessor */ private $couponPreProcessor; + /*** @var FeaturesController */ + private $featuresController; + public function __construct( AbandonedCartContent $abandonedCartContent, AutomatedLatestContentBlock $automatedLatestContent, ContentPreprocessor $wooCommerceContentPreprocessor, - CouponPreProcessor $couponPreProcessor + CouponPreProcessor $couponPreProcessor, + FeaturesController $featuresController ) { $this->abandonedCartContent = $abandonedCartContent; $this->automatedLatestContent = $automatedLatestContent; $this->wooCommerceContentPreprocessor = $wooCommerceContentPreprocessor; $this->couponPreProcessor = $couponPreProcessor; + $this->featuresController = $featuresController; } /** @@ -54,7 +60,9 @@ class Preprocessor { } $blocks = []; $contentBlocks = $content['blocks']; - $contentBlocks = $this->couponPreProcessor->processCoupons($newsletter, $contentBlocks, $preview); + if ($this->featuresController->isSupported(FeaturesController::FEATURE_COUPON_BLOCK)) { + $contentBlocks = $this->couponPreProcessor->processCoupons($newsletter, $contentBlocks, $preview); + } foreach ($contentBlocks as $block) { $processedBlock = $this->processBlock($newsletter, $block, $preview, $sendingTask); if (!empty($processedBlock)) { diff --git a/mailpoet/tests/integration/WooCommerce/TransactionalEmails/RendererTest.php b/mailpoet/tests/integration/WooCommerce/TransactionalEmails/RendererTest.php index 7594f21beb..996ce1d750 100644 --- a/mailpoet/tests/integration/WooCommerce/TransactionalEmails/RendererTest.php +++ b/mailpoet/tests/integration/WooCommerce/TransactionalEmails/RendererTest.php @@ -5,6 +5,7 @@ namespace MailPoet\WooCommerce\TransactionalEmails; use Codeception\Stub; use MailPoet\Config\ServicesChecker; use MailPoet\Entities\NewsletterEntity; +use MailPoet\Features\FeaturesController; use MailPoet\Models\Newsletter; use MailPoet\Newsletter\Editor\LayoutHelper as L; use MailPoet\Newsletter\NewslettersRepository; @@ -110,7 +111,8 @@ class RendererTest extends \MailPoetTest { $this->diContainer->get(\MailPoet\Newsletter\Renderer\Blocks\AbandonedCartContent::class), $this->diContainer->get(\MailPoet\Newsletter\Renderer\Blocks\AutomatedLatestContentBlock::class), $wooPreprocessor, - $this->diContainer->get(\MailPoet\WooCommerce\CouponPreProcessor::class) + $this->diContainer->get(\MailPoet\WooCommerce\CouponPreProcessor::class), + $this->diContainer->get(FeaturesController::class) ), $this->diContainer->get(\MailPoetVendor\CSS::class), $this->diContainer->get(ServicesChecker::class), diff --git a/mailpoet/tests/unit/Newsletter/Renderer/PreprocessorTest.php b/mailpoet/tests/unit/Newsletter/Renderer/PreprocessorTest.php index bb1edde01e..d1e95a18fb 100644 --- a/mailpoet/tests/unit/Newsletter/Renderer/PreprocessorTest.php +++ b/mailpoet/tests/unit/Newsletter/Renderer/PreprocessorTest.php @@ -4,6 +4,7 @@ namespace MailPoet\Test\Newsletter; use Codeception\Stub; use MailPoet\Entities\NewsletterEntity; +use MailPoet\Features\FeaturesController; use MailPoet\Newsletter\Renderer\Blocks\AbandonedCartContent; use MailPoet\Newsletter\Renderer\Blocks\AutomatedLatestContentBlock; use MailPoet\Newsletter\Renderer\Preprocessor; @@ -22,7 +23,8 @@ class PreprocessorTest extends \MailPoetUnitTest { ], ]); $wooPreprocessor = new TransactionalEmails\ContentPreprocessor($transactionalEmails); - $preprocessor = new Preprocessor($acc, $alc, $wooPreprocessor, $couponPreProcessor); + $featuresController = Stub::make(FeaturesController::class); + $preprocessor = new Preprocessor($acc, $alc, $wooPreprocessor, $couponPreProcessor, $featuresController); expect($preprocessor->processBlock(new NewsletterEntity(), ['type' => 'woocommerceHeading']))->equals([[ 'type' => 'container', 'orientation' => 'horizontal', @@ -50,7 +52,8 @@ class PreprocessorTest extends \MailPoetUnitTest { $alc = Stub::make(AutomatedLatestContentBlock::class); $couponPreProcessor = Stub::make(CouponPreProcessor::class); $wooPreprocessor = new TransactionalEmails\ContentPreprocessor(Stub::make(TransactionalEmails::class)); - $preprocessor = new Preprocessor($acc, $alc, $wooPreprocessor, $couponPreProcessor); + $featuresController = Stub::make(FeaturesController::class); + $preprocessor = new Preprocessor($acc, $alc, $wooPreprocessor, $couponPreProcessor, $featuresController); expect($preprocessor->processBlock(new NewsletterEntity(), ['type' => 'woocommerceContent']))->equals([[ 'type' => 'container', 'orientation' => 'horizontal',