Add unsubscribe API method
It can be used by calling: ``` $mailpoet_api = \MailPoet\API\API::MP('v1'); $mailpoet_api->unsubscribe($subscriberId); ``` [MAILPOET-5152]
This commit is contained in:
committed by
Aschepikov
parent
d37b961c2b
commit
c507229dd2
@@ -4,11 +4,13 @@ namespace MailPoet\API\MP\v1;
|
||||
|
||||
use MailPoet\API\JSON\ResponseBuilders\SubscribersResponseBuilder;
|
||||
use MailPoet\Entities\SegmentEntity;
|
||||
use MailPoet\Entities\StatisticsUnsubscribeEntity;
|
||||
use MailPoet\Entities\SubscriberEntity;
|
||||
use MailPoet\Listing\ListingDefinition;
|
||||
use MailPoet\Newsletter\Scheduler\WelcomeScheduler;
|
||||
use MailPoet\Segments\SegmentsRepository;
|
||||
use MailPoet\Settings\SettingsController;
|
||||
use MailPoet\Statistics\Track\Unsubscribes;
|
||||
use MailPoet\Subscribers\ConfirmationEmailMailer;
|
||||
use MailPoet\Subscribers\NewSubscriberNotificationMailer;
|
||||
use MailPoet\Subscribers\RequiredCustomFieldValidator;
|
||||
@@ -62,6 +64,9 @@ class Subscribers {
|
||||
/** @var SubscriberListingRepository */
|
||||
private $subscriberListingRepository;
|
||||
|
||||
/** @var Unsubscribes */
|
||||
private $unsubscribesTracker;
|
||||
|
||||
public function __construct (
|
||||
ConfirmationEmailMailer $confirmationEmailMailer,
|
||||
NewSubscriberNotificationMailer $newSubscriberNotificationMailer,
|
||||
@@ -74,7 +79,8 @@ class Subscribers {
|
||||
WelcomeScheduler $welcomeScheduler,
|
||||
RequiredCustomFieldValidator $requiredCustomFieldsValidator,
|
||||
SubscriberListingRepository $subscriberListingRepository,
|
||||
WPFunctions $wp
|
||||
WPFunctions $wp,
|
||||
Unsubscribes $unsubscribesTracker
|
||||
) {
|
||||
$this->confirmationEmailMailer = $confirmationEmailMailer;
|
||||
$this->newSubscriberNotificationMailer = $newSubscriberNotificationMailer;
|
||||
@@ -88,6 +94,7 @@ class Subscribers {
|
||||
$this->requiredCustomFieldsValidator = $requiredCustomFieldsValidator;
|
||||
$this->wp = $wp;
|
||||
$this->subscriberListingRepository = $subscriberListingRepository;
|
||||
$this->unsubscribesTracker = $unsubscribesTracker;
|
||||
}
|
||||
|
||||
public function getSubscriber($subscriberIdOrEmail): array {
|
||||
@@ -229,6 +236,28 @@ class Subscribers {
|
||||
return $this->subscribersResponseBuilder->build($subscriber);
|
||||
}
|
||||
|
||||
public function unsubscribe($subscriberIdOrEmail): array {
|
||||
$this->checkSubscriberParam($subscriberIdOrEmail);
|
||||
$subscriber = $this->findSubscriber($subscriberIdOrEmail);
|
||||
|
||||
if ($subscriber->getStatus() === SubscriberEntity::STATUS_UNSUBSCRIBED) {
|
||||
throw new APIException(__('This subscriber is already unsubscribed.', 'mailpoet'), APIException::SUBSCRIBER_ALREADY_UNSUBSCRIBED);
|
||||
}
|
||||
|
||||
$this->unsubscribesTracker->track(
|
||||
(int)$subscriber->getId(),
|
||||
StatisticsUnsubscribeEntity::SOURCE_MP_API
|
||||
);
|
||||
|
||||
$subscriber->setStatus(SubscriberEntity::STATUS_UNSUBSCRIBED);
|
||||
$this->subscribersRepository->persist($subscriber);
|
||||
$this->subscribersRepository->flush();
|
||||
|
||||
$this->subscribersSegmentRepository->unsubscribeFromSegments($subscriber);
|
||||
|
||||
return $this->subscribersResponseBuilder->build($subscriber);
|
||||
}
|
||||
|
||||
public function unsubscribeFromLists($subscriberIdOrEmail, array $listIds): array {
|
||||
$this->checkSubscriberAndListParams($subscriberIdOrEmail, $listIds);
|
||||
$subscriber = $this->findSubscriber($subscriberIdOrEmail);
|
||||
@@ -321,6 +350,13 @@ class Subscribers {
|
||||
if (empty($listIds)) {
|
||||
throw new APIException(__('At least one segment ID is required.', 'mailpoet'), APIException::SEGMENT_REQUIRED);
|
||||
}
|
||||
$this->checkSubscriberParam($subscriberIdOrEmail);
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws APIException
|
||||
*/
|
||||
private function checkSubscriberParam($subscriberIdOrEmail): void {
|
||||
if (empty($subscriberIdOrEmail)) {
|
||||
throw new APIException(__('A subscriber is required.', 'mailpoet'), APIException::SUBSCRIBER_NOT_EXISTS);
|
||||
}
|
||||
|
Reference in New Issue
Block a user