Allow re-subscribe functionality in third party API

[MAILPOET-3307]
This commit is contained in:
Jan Lysý
2021-02-02 11:33:35 +01:00
committed by Veljko V
parent b37e5a36ab
commit 349918e45d

View File

@ -8,6 +8,7 @@ use MailPoet\Models\Segment;
use MailPoet\Models\Subscriber;
use MailPoet\Models\SubscriberSegment;
use MailPoet\Newsletter\Scheduler\WelcomeScheduler;
use MailPoet\Settings\SettingsController;
use MailPoet\Subscribers\ConfirmationEmailMailer;
use MailPoet\Subscribers\NewSubscriberNotificationMailer;
use MailPoet\Subscribers\RequiredCustomFieldValidator;
@ -33,18 +34,23 @@ class API {
/** @var WelcomeScheduler */
private $welcomeScheduler;
/** @var SettingsController */
private $settings;
public function __construct(
NewSubscriberNotificationMailer $newSubscriberNotificationMailer,
ConfirmationEmailMailer $confirmationEmailMailer,
RequiredCustomFieldValidator $requiredCustomFieldValidator,
ApiDataSanitizer $customFieldsDataSanitizer,
WelcomeScheduler $welcomeScheduler
WelcomeScheduler $welcomeScheduler,
SettingsController $settings
) {
$this->newSubscriberNotificationMailer = $newSubscriberNotificationMailer;
$this->confirmationEmailMailer = $confirmationEmailMailer;
$this->requiredCustomFieldValidator = $requiredCustomFieldValidator;
$this->customFieldsDataSanitizer = $customFieldsDataSanitizer;
$this->welcomeScheduler = $welcomeScheduler;
$this->settings = $settings;
}
public function getSubscriberFields() {
@ -118,6 +124,7 @@ class API {
$scheduleWelcomeEmail = (isset($options['schedule_welcome_email']) && $options['schedule_welcome_email'] === false) ? false : true;
$sendConfirmationEmail = (isset($options['send_confirmation_email']) && $options['send_confirmation_email'] === false) ? false : true;
$skipSubscriberNotification = (isset($options['skip_subscriber_notification']) && $options['skip_subscriber_notification'] === true) ? true : false;
$signupConfirmationEnabled = (bool)$this->settings->get('signup_confirmation.enabled');
if (empty($listIds)) {
throw new APIException(__('At least one segment ID is required.', 'mailpoet'), APIException::SEGMENT_REQUIRED);
@ -163,17 +170,30 @@ class API {
SubscriberSegment::subscribeToSegments($subscriber, $foundSegmentsIds);
// set status depending on signup confirmation setting
if ($subscriber->status !== Subscriber::STATUS_SUBSCRIBED) {
if ($signupConfirmationEnabled === true) {
$subscriber->set('status', Subscriber::STATUS_UNCONFIRMED);
} else {
$subscriber->set('status', Subscriber::STATUS_SUBSCRIBED);
}
$subscriber->save();
if ($subscriber->getErrors() !== false) {
throw new APIException(
WPFunctions::get()->__(sprintf('Failed to save a status of a subscriber : %s', strtolower(implode(', ', $subscriber->getErrors()))), 'mailpoet'),
APIException::FAILED_TO_SAVE_SUBSCRIBER
);
}
}
// schedule welcome email
if ($scheduleWelcomeEmail && $subscriber->status === Subscriber::STATUS_SUBSCRIBED) {
$this->_scheduleWelcomeNotification($subscriber, $foundSegmentsIds);
}
// send confirmation email
if (
$sendConfirmationEmail
&& $subscriber->status === Subscriber::STATUS_UNCONFIRMED
&& (int)$subscriber->countConfirmations === 0
) {
if ($sendConfirmationEmail) {
$result = $this->_sendConfirmationEmail($subscriber);
if (!$result && $subscriber->getErrors()) {
throw new APIException(
@ -357,7 +377,7 @@ class API {
}
protected function _sendConfirmationEmail(Subscriber $subscriber) {
return $this->confirmationEmailMailer->sendConfirmationEmail($subscriber);
return $this->confirmationEmailMailer->sendConfirmationEmailOnce($subscriber);
}
protected function _scheduleWelcomeNotification(Subscriber $subscriber, array $segments) {