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\Subscriber;
|
||||||
use MailPoet\Models\SubscriberSegment;
|
use MailPoet\Models\SubscriberSegment;
|
||||||
use MailPoet\Newsletter\Scheduler\WelcomeScheduler;
|
use MailPoet\Newsletter\Scheduler\WelcomeScheduler;
|
||||||
|
use MailPoet\Settings\SettingsController;
|
||||||
use MailPoet\Subscribers\ConfirmationEmailMailer;
|
use MailPoet\Subscribers\ConfirmationEmailMailer;
|
||||||
use MailPoet\Subscribers\NewSubscriberNotificationMailer;
|
use MailPoet\Subscribers\NewSubscriberNotificationMailer;
|
||||||
use MailPoet\Subscribers\RequiredCustomFieldValidator;
|
use MailPoet\Subscribers\RequiredCustomFieldValidator;
|
||||||
@ -33,18 +34,23 @@ class API {
|
|||||||
/** @var WelcomeScheduler */
|
/** @var WelcomeScheduler */
|
||||||
private $welcomeScheduler;
|
private $welcomeScheduler;
|
||||||
|
|
||||||
|
/** @var SettingsController */
|
||||||
|
private $settings;
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
NewSubscriberNotificationMailer $newSubscriberNotificationMailer,
|
NewSubscriberNotificationMailer $newSubscriberNotificationMailer,
|
||||||
ConfirmationEmailMailer $confirmationEmailMailer,
|
ConfirmationEmailMailer $confirmationEmailMailer,
|
||||||
RequiredCustomFieldValidator $requiredCustomFieldValidator,
|
RequiredCustomFieldValidator $requiredCustomFieldValidator,
|
||||||
ApiDataSanitizer $customFieldsDataSanitizer,
|
ApiDataSanitizer $customFieldsDataSanitizer,
|
||||||
WelcomeScheduler $welcomeScheduler
|
WelcomeScheduler $welcomeScheduler,
|
||||||
|
SettingsController $settings
|
||||||
) {
|
) {
|
||||||
$this->newSubscriberNotificationMailer = $newSubscriberNotificationMailer;
|
$this->newSubscriberNotificationMailer = $newSubscriberNotificationMailer;
|
||||||
$this->confirmationEmailMailer = $confirmationEmailMailer;
|
$this->confirmationEmailMailer = $confirmationEmailMailer;
|
||||||
$this->requiredCustomFieldValidator = $requiredCustomFieldValidator;
|
$this->requiredCustomFieldValidator = $requiredCustomFieldValidator;
|
||||||
$this->customFieldsDataSanitizer = $customFieldsDataSanitizer;
|
$this->customFieldsDataSanitizer = $customFieldsDataSanitizer;
|
||||||
$this->welcomeScheduler = $welcomeScheduler;
|
$this->welcomeScheduler = $welcomeScheduler;
|
||||||
|
$this->settings = $settings;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getSubscriberFields() {
|
public function getSubscriberFields() {
|
||||||
@ -118,6 +124,7 @@ class API {
|
|||||||
$scheduleWelcomeEmail = (isset($options['schedule_welcome_email']) && $options['schedule_welcome_email'] === false) ? false : true;
|
$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;
|
$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;
|
$skipSubscriberNotification = (isset($options['skip_subscriber_notification']) && $options['skip_subscriber_notification'] === true) ? true : false;
|
||||||
|
$signupConfirmationEnabled = (bool)$this->settings->get('signup_confirmation.enabled');
|
||||||
|
|
||||||
if (empty($listIds)) {
|
if (empty($listIds)) {
|
||||||
throw new APIException(__('At least one segment ID is required.', 'mailpoet'), APIException::SEGMENT_REQUIRED);
|
throw new APIException(__('At least one segment ID is required.', 'mailpoet'), APIException::SEGMENT_REQUIRED);
|
||||||
@ -163,17 +170,30 @@ class API {
|
|||||||
|
|
||||||
SubscriberSegment::subscribeToSegments($subscriber, $foundSegmentsIds);
|
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
|
// schedule welcome email
|
||||||
if ($scheduleWelcomeEmail && $subscriber->status === Subscriber::STATUS_SUBSCRIBED) {
|
if ($scheduleWelcomeEmail && $subscriber->status === Subscriber::STATUS_SUBSCRIBED) {
|
||||||
$this->_scheduleWelcomeNotification($subscriber, $foundSegmentsIds);
|
$this->_scheduleWelcomeNotification($subscriber, $foundSegmentsIds);
|
||||||
}
|
}
|
||||||
|
|
||||||
// send confirmation email
|
// send confirmation email
|
||||||
if (
|
if ($sendConfirmationEmail) {
|
||||||
$sendConfirmationEmail
|
|
||||||
&& $subscriber->status === Subscriber::STATUS_UNCONFIRMED
|
|
||||||
&& (int)$subscriber->countConfirmations === 0
|
|
||||||
) {
|
|
||||||
$result = $this->_sendConfirmationEmail($subscriber);
|
$result = $this->_sendConfirmationEmail($subscriber);
|
||||||
if (!$result && $subscriber->getErrors()) {
|
if (!$result && $subscriber->getErrors()) {
|
||||||
throw new APIException(
|
throw new APIException(
|
||||||
@ -357,7 +377,7 @@ class API {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected function _sendConfirmationEmail(Subscriber $subscriber) {
|
protected function _sendConfirmationEmail(Subscriber $subscriber) {
|
||||||
return $this->confirmationEmailMailer->sendConfirmationEmail($subscriber);
|
return $this->confirmationEmailMailer->sendConfirmationEmailOnce($subscriber);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function _scheduleWelcomeNotification(Subscriber $subscriber, array $segments) {
|
protected function _scheduleWelcomeNotification(Subscriber $subscriber, array $segments) {
|
||||||
|
Reference in New Issue
Block a user