diff --git a/mailpoet/lib/API/JSON/v1/Newsletters.php b/mailpoet/lib/API/JSON/v1/Newsletters.php index 6eb2c804d1..c24a1c11cc 100644 --- a/mailpoet/lib/API/JSON/v1/Newsletters.php +++ b/mailpoet/lib/API/JSON/v1/Newsletters.php @@ -25,6 +25,7 @@ use MailPoet\Newsletter\Scheduler\Scheduler; use MailPoet\Newsletter\Url as NewsletterUrl; use MailPoet\Settings\SettingsController; use MailPoet\UnexpectedValueException; +use MailPoet\Util\License\Features\Subscribers as SubscribersFeature; use MailPoet\Util\Security; use MailPoet\WP\Emoji; use MailPoet\WP\Functions as WPFunctions; @@ -63,6 +64,9 @@ class Newsletters extends APIEndpoint { /** @var Emoji */ private $emoji; + /** @var SubscribersFeature */ + private $subscribersFeature; + /** @var SendPreviewController */ private $sendPreviewController; @@ -87,6 +91,7 @@ class Newsletters extends APIEndpoint { NewsletterListingRepository $newsletterListingRepository, NewslettersResponseBuilder $newslettersResponseBuilder, PostNotificationScheduler $postNotificationScheduler, + SubscribersFeature $subscribersFeature, Emoji $emoji, SendPreviewController $sendPreviewController, NewsletterSaveController $newsletterSaveController, @@ -102,6 +107,7 @@ class Newsletters extends APIEndpoint { $this->newsletterListingRepository = $newsletterListingRepository; $this->newslettersResponseBuilder = $newslettersResponseBuilder; $this->postNotificationScheduler = $postNotificationScheduler; + $this->subscribersFeature = $subscribersFeature; $this->emoji = $emoji; $this->sendPreviewController = $sendPreviewController; $this->newsletterSaveController = $newsletterSaveController; @@ -165,6 +171,12 @@ class Newsletters extends APIEndpoint { ]); } + if ($status === NewsletterEntity::STATUS_ACTIVE && $this->subscribersFeature->check()) { + return $this->errorResponse([ + APIError::FORBIDDEN => __('Subscribers limit reached.', 'mailpoet'), + ], [], Response::STATUS_FORBIDDEN); + } + $newsletter = $this->getNewsletter($data); if ($newsletter === null) { return $this->errorResponse([ diff --git a/mailpoet/lib/Newsletter/NewsletterValidator.php b/mailpoet/lib/Newsletter/NewsletterValidator.php index 0ee4dd21df..8441c30391 100644 --- a/mailpoet/lib/Newsletter/NewsletterValidator.php +++ b/mailpoet/lib/Newsletter/NewsletterValidator.php @@ -5,7 +5,6 @@ namespace MailPoet\Newsletter; use MailPoet\Entities\NewsletterEntity; use MailPoet\Services\Bridge; use MailPoet\Settings\TrackingConfig; -use MailPoet\Util\License\Features\Subscribers as SubscribersFeature; use MailPoet\Validator\ValidationException; class NewsletterValidator { @@ -16,22 +15,16 @@ class NewsletterValidator { /** @var TrackingConfig */ private $trackingConfig; - /** @var SubscribersFeature */ - private $subscribersFeature; - public function __construct( Bridge $bridge, - TrackingConfig $trackingConfig, - SubscribersFeature $subscribersFeature + TrackingConfig $trackingConfig ) { $this->bridge = $bridge; $this->trackingConfig = $trackingConfig; - $this->subscribersFeature = $subscribersFeature; } public function validate(NewsletterEntity $newsletterEntity): ?string { try { - $this->validateSubscriberLimit(); $this->validateBody($newsletterEntity); $this->validateUnsubscribeRequirements($newsletterEntity); $this->validateReEngagementRequirements($newsletterEntity); @@ -95,10 +88,4 @@ class NewsletterValidator { throw new ValidationException(__('Please add an “Automatic Latest Content” widget to the email from the right sidebar.', 'mailpoet')); } } - - private function validateSubscriberLimit(): void { - if ($this->subscribersFeature->check()) { - throw new ValidationException(__('Subscribers limit reached.', 'mailpoet')); - } - } } diff --git a/mailpoet/tests/integration/API/JSON/v1/NewslettersTest.php b/mailpoet/tests/integration/API/JSON/v1/NewslettersTest.php index b860da17be..aab93398c7 100644 --- a/mailpoet/tests/integration/API/JSON/v1/NewslettersTest.php +++ b/mailpoet/tests/integration/API/JSON/v1/NewslettersTest.php @@ -22,7 +22,6 @@ use MailPoet\Entities\SubscriberSegmentEntity; use MailPoet\Models\ScheduledTask; use MailPoet\Models\SendingQueue; use MailPoet\Newsletter\NewslettersRepository; -use MailPoet\Newsletter\NewsletterValidator; use MailPoet\Newsletter\Options\NewsletterOptionFieldsRepository; use MailPoet\Newsletter\Options\NewsletterOptionsRepository; use MailPoet\Newsletter\Preview\SendPreviewController; @@ -228,9 +227,7 @@ class NewslettersTest extends \MailPoetTest { public function testItReturnsErrorIfSubscribersLimitReached() { $endpoint = $this->createNewslettersEndpointWithMocks([ 'cronHelper' => $this->cronHelper, - 'newsletterValidator' => $this->getServiceWithOverrides(NewsletterValidator::class, [ - 'subscribersFeature' => Stub::make(Subscribers::class, ['check' => true]) - ]) + 'subscribersFeature' => Stub::make(Subscribers::class, ['check' => true]) ]); $res = $endpoint->setStatus([ 'id' => $this->newsletter->getId(), diff --git a/mailpoet/tests/integration/Newsletter/NewsletterValidatorTest.php b/mailpoet/tests/integration/Newsletter/NewsletterValidatorTest.php index ab70596a8b..342fb39902 100644 --- a/mailpoet/tests/integration/Newsletter/NewsletterValidatorTest.php +++ b/mailpoet/tests/integration/Newsletter/NewsletterValidatorTest.php @@ -7,7 +7,6 @@ use MailPoet\Newsletter\NewsletterValidator; use MailPoet\Services\Bridge; use MailPoet\Settings\TrackingConfig; use MailPoet\Test\DataFactories\Newsletter; -use MailPoet\Util\License\Features\Subscribers; class NewsletterValidatorTest extends \MailPoetTest { /** @var NewsletterValidator */ @@ -106,14 +105,4 @@ class NewsletterValidatorTest extends \MailPoetTest { $validationError = $this->newsletterValidator->validate($newsletter); expect($validationError)->null(); } - - public function testItIsNotValidIfSubscriberLimitReached() { - $newsletter = (new Newsletter())->withDefaultBody()->create(); - $validator = $this->getServiceWithOverrides(NewsletterValidator::class, [ - 'subscribersFeature' => Stub::make(Subscribers::class, ['check' => true]) - ]); - $validationError = $validator->validate($newsletter); - expect($validationError)->equals('Subscribers limit reached.'); - } - }