Allow re-subscribe functionality in third party API
[MAILPOET-3307]
This commit is contained in:
@ -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) {
|
||||
|
Reference in New Issue
Block a user