Convert 'display_revenues' setting to feature flag

[MAILPOET-2008]
This commit is contained in:
Jan Jakeš
2019-05-08 11:21:09 +02:00
committed by M. Shull
parent fe51e5e38c
commit 4b0beecdfb
8 changed files with 45 additions and 16 deletions

View File

@@ -8,6 +8,7 @@ use MailPoet\API\JSON\Error as APIError;
use MailPoet\Config\AccessControl; use MailPoet\Config\AccessControl;
use MailPoet\Cron\CronHelper; use MailPoet\Cron\CronHelper;
use MailPoet\Cron\Workers\SendingQueue\Tasks\Newsletter as NewsletterQueueTask; use MailPoet\Cron\Workers\SendingQueue\Tasks\Newsletter as NewsletterQueueTask;
use MailPoet\Features\FeaturesController;
use MailPoet\Listing; use MailPoet\Listing;
use MailPoet\Models\Newsletter; use MailPoet\Models\Newsletter;
use MailPoet\Models\NewsletterOption; use MailPoet\Models\NewsletterOption;
@@ -43,6 +44,9 @@ class Newsletters extends APIEndpoint {
/** @var SettingsController */ /** @var SettingsController */
private $settings; private $settings;
/** @var FeaturesController */
private $features_controller;
public $permissions = array( public $permissions = array(
'global' => AccessControl::PERMISSION_MANAGE_EMAILS 'global' => AccessControl::PERMISSION_MANAGE_EMAILS
); );
@@ -52,13 +56,15 @@ class Newsletters extends APIEndpoint {
Listing\Handler $listing_handler, Listing\Handler $listing_handler,
WPFunctions $wp, WPFunctions $wp,
WCHelper $woocommerce_helper, WCHelper $woocommerce_helper,
SettingsController $settings SettingsController $settings,
FeaturesController $features_controller
) { ) {
$this->bulk_action = $bulk_action; $this->bulk_action = $bulk_action;
$this->listing_handler = $listing_handler; $this->listing_handler = $listing_handler;
$this->wp = $wp; $this->wp = $wp;
$this->woocommerce_helper = $woocommerce_helper; $this->woocommerce_helper = $woocommerce_helper;
$this->settings = $settings; $this->settings = $settings;
$this->features_controller = $features_controller;
} }
function get($data = array()) { function get($data = array()) {
@@ -443,13 +449,13 @@ class Newsletters extends APIEndpoint {
$newsletter $newsletter
->withSegments(true) ->withSegments(true)
->withSendingQueue() ->withSendingQueue()
->withStatistics($this->woocommerce_helper); ->withStatistics($this->woocommerce_helper, $this->features_controller);
} else if ($newsletter->type === Newsletter::TYPE_WELCOME || $newsletter->type === Newsletter::TYPE_AUTOMATIC) { } else if ($newsletter->type === Newsletter::TYPE_WELCOME || $newsletter->type === Newsletter::TYPE_AUTOMATIC) {
$newsletter $newsletter
->withOptions() ->withOptions()
->withTotalSent() ->withTotalSent()
->withScheduledToBeSent() ->withScheduledToBeSent()
->withStatistics($this->woocommerce_helper); ->withStatistics($this->woocommerce_helper, $this->features_controller);
} else if ($newsletter->type === Newsletter::TYPE_NOTIFICATION) { } else if ($newsletter->type === Newsletter::TYPE_NOTIFICATION) {
$newsletter $newsletter
->withOptions() ->withOptions()
@@ -459,7 +465,7 @@ class Newsletters extends APIEndpoint {
$newsletter $newsletter
->withSegments(true) ->withSegments(true)
->withSendingQueue() ->withSendingQueue()
->withStatistics($this->woocommerce_helper); ->withStatistics($this->woocommerce_helper, $this->features_controller);
} }
if ($newsletter->status === Newsletter::STATUS_SENT || if ($newsletter->status === Newsletter::STATUS_SENT ||

View File

@@ -5,6 +5,7 @@ namespace MailPoet\Cron\Workers\StatsNotifications;
use Carbon\Carbon; use Carbon\Carbon;
use MailPoet\Config\Renderer; use MailPoet\Config\Renderer;
use MailPoet\Cron\CronHelper; use MailPoet\Cron\CronHelper;
use MailPoet\Features\FeaturesController;
use MailPoet\Mailer\Mailer; use MailPoet\Mailer\Mailer;
use MailPoet\Models\Newsletter; use MailPoet\Models\Newsletter;
use MailPoet\Models\NewsletterLink; use MailPoet\Models\NewsletterLink;
@@ -32,6 +33,9 @@ class Worker {
/** @var SettingsController */ /** @var SettingsController */
private $settings; private $settings;
/** @var FeaturesController */
private $features_controller;
/** @var WCHelper */ /** @var WCHelper */
private $woocommerce_helper; private $woocommerce_helper;
@@ -39,6 +43,7 @@ class Worker {
Mailer $mailer, Mailer $mailer,
Renderer $renderer, Renderer $renderer,
SettingsController $settings, SettingsController $settings,
FeaturesController $features_controller,
WCHelper $woocommerce_helper, WCHelper $woocommerce_helper,
$timer = false $timer = false
) { ) {
@@ -46,6 +51,7 @@ class Worker {
$this->renderer = $renderer; $this->renderer = $renderer;
$this->mailer = $mailer; $this->mailer = $mailer;
$this->settings = $settings; $this->settings = $settings;
$this->features_controller = $features_controller;
$this->woocommerce_helper = $woocommerce_helper; $this->woocommerce_helper = $woocommerce_helper;
} }
@@ -103,7 +109,7 @@ class Worker {
return $newsletter return $newsletter
->withSendingQueue() ->withSendingQueue()
->withTotalSent() ->withTotalSent()
->withStatistics($this->woocommerce_helper); ->withStatistics($this->woocommerce_helper, $this->features_controller);
} }
/** /**

View File

@@ -13,6 +13,7 @@ use MailPoet\Cron\Workers\KeyCheck\PremiumKeyCheck as PremiumKeyCheckWorker;
use MailPoet\Cron\Workers\KeyCheck\SendingServiceKeyCheck as SendingServiceKeyCheckWorker; use MailPoet\Cron\Workers\KeyCheck\SendingServiceKeyCheck as SendingServiceKeyCheckWorker;
use MailPoet\Cron\Workers\WooCommerceSync as WooCommerceSyncWorker; use MailPoet\Cron\Workers\WooCommerceSync as WooCommerceSyncWorker;
use MailPoet\Cron\Workers\SendingQueue\SendingErrorHandler; use MailPoet\Cron\Workers\SendingQueue\SendingErrorHandler;
use MailPoet\Features\FeaturesController;
use MailPoet\Segments\WooCommerce as WooCommerceSegment; use MailPoet\Segments\WooCommerce as WooCommerceSegment;
use MailPoet\WooCommerce\Helper as WooCommerceHelper; use MailPoet\WooCommerce\Helper as WooCommerceHelper;
use MailPoet\Mailer\Mailer; use MailPoet\Mailer\Mailer;
@@ -33,6 +34,9 @@ class WorkersFactory {
/** @var SettingsController */ /** @var SettingsController */
private $settings; private $settings;
/** @var FeaturesController */
private $features_controller;
/** @var WooCommerceSegment */ /** @var WooCommerceSegment */
private $woocommerce_segment; private $woocommerce_segment;
@@ -53,6 +57,7 @@ class WorkersFactory {
Mailer $mailer, Mailer $mailer,
Renderer $renderer, Renderer $renderer,
SettingsController $settings, SettingsController $settings,
FeaturesController $features_controller,
WooCommerceSegment $woocommerce_segment, WooCommerceSegment $woocommerce_segment,
InactiveSubscribersController $inactive_subscribers_controller, InactiveSubscribersController $inactive_subscribers_controller,
WooCommerceHelper $woocommerce_helper WooCommerceHelper $woocommerce_helper
@@ -62,6 +67,7 @@ class WorkersFactory {
$this->mailer = $mailer; $this->mailer = $mailer;
$this->renderer = $renderer; $this->renderer = $renderer;
$this->settings = $settings; $this->settings = $settings;
$this->features_controller = $features_controller;
$this->woocommerce_segment = $woocommerce_segment; $this->woocommerce_segment = $woocommerce_segment;
$this->inactive_subscribers_controller = $inactive_subscribers_controller; $this->inactive_subscribers_controller = $inactive_subscribers_controller;
$this->woocommerce_helper = $woocommerce_helper; $this->woocommerce_helper = $woocommerce_helper;
@@ -78,7 +84,7 @@ class WorkersFactory {
} }
function createStatsNotificationsWorker($timer) { function createStatsNotificationsWorker($timer) {
return new StatsNotificationsWorker($this->mailer, $this->renderer, $this->settings, $this->woocommerce_helper, $timer); return new StatsNotificationsWorker($this->mailer, $this->renderer, $this->settings, $this->features_controller, $this->woocommerce_helper, $timer);
} }
/** @return SendingServiceKeyCheckWorker */ /** @return SendingServiceKeyCheckWorker */

View File

@@ -8,10 +8,12 @@ class FeaturesController {
// Define features below in the following form: // Define features below in the following form:
// const FEATURE_NAME_OF_FEATURE = 'name-of-feature'; // const FEATURE_NAME_OF_FEATURE = 'name-of-feature';
const FEATURE_DISPLAY_WOOCOMMERCE_REVENUES = 'display-woocommerce-revenues'; // may also have 'display_revenues' setting
// 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,
public static $defaults = [ public static $defaults = [
self::FEATURE_DISPLAY_WOOCOMMERCE_REVENUES => true,
]; ];
/** @var array */ /** @var array */

View File

@@ -1,6 +1,7 @@
<?php <?php
namespace MailPoet\Models; namespace MailPoet\Models;
use Carbon\Carbon; use Carbon\Carbon;
use MailPoet\Features\FeaturesController;
use MailPoet\Newsletter\Renderer\Renderer; use MailPoet\Newsletter\Renderer\Renderer;
use MailPoet\Settings\SettingsController; use MailPoet\Settings\SettingsController;
use MailPoet\Tasks\Sending as SendingTask; use MailPoet\Tasks\Sending as SendingTask;
@@ -549,8 +550,8 @@ class Newsletter extends Model {
return $this; return $this;
} }
function withStatistics(WCHelper $woocommerce_helper) { function withStatistics(WCHelper $woocommerce_helper, FeaturesController $features_controller) {
$statistics = $this->getStatistics($woocommerce_helper); $statistics = $this->getStatistics($woocommerce_helper, $features_controller);
$this->statistics = $statistics; $this->statistics = $statistics;
return $this; return $this;
} }
@@ -560,7 +561,7 @@ class Newsletter extends Model {
return $renderer->render(); return $renderer->render();
} }
function getStatistics(WCHelper $woocommerce_helper) { function getStatistics(WCHelper $woocommerce_helper, FeaturesController $features_controller) {
if (($this->type !== self::TYPE_WELCOME) && ($this->queue === false)) { if (($this->type !== self::TYPE_WELCOME) && ($this->queue === false)) {
return false; return false;
} }
@@ -589,8 +590,10 @@ class Newsletter extends Model {
} }
// WooCommerce revenues // WooCommerce revenues
$settings = new SettingsController(); if (
if ($woocommerce_helper->isWooCommerceActive() && $settings->get('display_revenues')) { $features_controller->isSupported(FeaturesController::FEATURE_DISPLAY_WOOCOMMERCE_REVENUES)
&& $woocommerce_helper->isWooCommerceActive()
) {
$currency = $woocommerce_helper->getWoocommerceCurrency(); $currency = $woocommerce_helper->getWoocommerceCurrency();
$row = StatisticsWooCommercePurchases::selectExpr('SUM(order_price_total) AS total') $row = StatisticsWooCommercePurchases::selectExpr('SUM(order_price_total) AS total')
->where([ ->where([

View File

@@ -7,6 +7,7 @@ use Codeception\Util\Fixtures;
use Codeception\Util\Stub; use Codeception\Util\Stub;
use Helper\WordPressHooks as WPHooksHelper; use Helper\WordPressHooks as WPHooksHelper;
use MailPoet\API\JSON\Response as APIResponse; use MailPoet\API\JSON\Response as APIResponse;
use MailPoet\Features\FeaturesController;
use MailPoet\Listing\BulkActionController; use MailPoet\Listing\BulkActionController;
use MailPoet\Listing\Handler; use MailPoet\Listing\Handler;
use MailPoet\API\JSON\v1\Newsletters; use MailPoet\API\JSON\v1\Newsletters;
@@ -112,7 +113,8 @@ class NewslettersTest extends \MailPoetTest {
ContainerWrapper::getInstance()->get(Handler::class), ContainerWrapper::getInstance()->get(Handler::class),
$wp, $wp,
$this->makeEmpty(WCHelper::class), $this->makeEmpty(WCHelper::class),
new SettingsController() new SettingsController(),
new FeaturesController()
); );
$response = $this->endpoint->get(array('id' => $this->newsletter->id)); $response = $this->endpoint->get(array('id' => $this->newsletter->id));
expect($response->status)->equals(APIResponse::STATUS_OK); expect($response->status)->equals(APIResponse::STATUS_OK);
@@ -151,7 +153,8 @@ class NewslettersTest extends \MailPoetTest {
ContainerWrapper::getInstance()->get(Handler::class), ContainerWrapper::getInstance()->get(Handler::class),
$wp, $wp,
$this->makeEmpty(WCHelper::class), $this->makeEmpty(WCHelper::class),
new SettingsController() new SettingsController(),
new FeaturesController()
); );
$response = $this->endpoint->save($valid_data); $response = $this->endpoint->save($valid_data);
@@ -517,7 +520,8 @@ class NewslettersTest extends \MailPoetTest {
ContainerWrapper::getInstance()->get(Handler::class), ContainerWrapper::getInstance()->get(Handler::class),
$wp, $wp,
$this->makeEmpty(WCHelper::class), $this->makeEmpty(WCHelper::class),
new SettingsController() new SettingsController(),
new FeaturesController()
); );
$response = $this->endpoint->duplicate(array('id' => $this->newsletter->id)); $response = $this->endpoint->duplicate(array('id' => $this->newsletter->id));

View File

@@ -3,6 +3,7 @@
namespace MailPoet\Cron\Workers\StatsNotifications; namespace MailPoet\Cron\Workers\StatsNotifications;
use MailPoet\Config\Renderer; use MailPoet\Config\Renderer;
use MailPoet\Features\FeaturesController;
use MailPoet\Mailer\Mailer; use MailPoet\Mailer\Mailer;
use MailPoet\Models\Newsletter; use MailPoet\Models\Newsletter;
use MailPoet\Models\NewsletterLink; use MailPoet\Models\NewsletterLink;
@@ -39,7 +40,7 @@ class WorkerTest extends \MailPoetTest {
$this->mailer = $this->createMock(Mailer::class); $this->mailer = $this->createMock(Mailer::class);
$this->renderer = $this->createMock(Renderer::class); $this->renderer = $this->createMock(Renderer::class);
$this->settings = new SettingsController(); $this->settings = new SettingsController();
$this->stats_notifications = new Worker($this->mailer, $this->renderer, $this->settings, $this->makeEmpty(WCHelper::class)); $this->stats_notifications = new Worker($this->mailer, $this->renderer, $this->settings, new FeaturesController(), $this->makeEmpty(WCHelper::class));
$this->settings->set(Worker::SETTINGS_KEY, [ $this->settings->set(Worker::SETTINGS_KEY, [
'enabled' => true, 'enabled' => true,
'address' => 'email@example.com' 'address' => 'email@example.com'

View File

@@ -2,6 +2,7 @@
namespace MailPoet\Test\Models; namespace MailPoet\Test\Models;
use Carbon\Carbon; use Carbon\Carbon;
use MailPoet\Features\FeaturesController;
use MailPoet\Models\Newsletter; use MailPoet\Models\Newsletter;
use MailPoet\Models\Segment; use MailPoet\Models\Segment;
use MailPoet\Models\Subscriber; use MailPoet\Models\Subscriber;
@@ -170,7 +171,7 @@ class NewsletterTest extends \MailPoetTest {
$unsubscribes->save(); $unsubscribes->save();
$newsletter->queue = $newsletter->getQueue()->asArray(); $newsletter->queue = $newsletter->getQueue()->asArray();
$statistics = $newsletter->getStatistics($this->makeEmpty(WCHelper::class)); $statistics = $newsletter->getStatistics($this->makeEmpty(WCHelper::class), new FeaturesController());
expect($statistics['opened'])->equals(1); expect($statistics['opened'])->equals(1);
expect($statistics['clicked'])->equals(1); expect($statistics['clicked'])->equals(1);
expect($statistics['unsubscribed'])->equals(1); expect($statistics['unsubscribed'])->equals(1);