Send confirmation email also within subscribeToLists
[MAILPOET-1992]
This commit is contained in:
committed by
M. Shull
parent
bd78c2b7f4
commit
e479aecdc0
@ -69,6 +69,7 @@ class API {
|
|||||||
|
|
||||||
function subscribeToLists($subscriber_id, array $segments_ids, $options = array()) {
|
function subscribeToLists($subscriber_id, array $segments_ids, $options = array()) {
|
||||||
$schedule_welcome_email = (isset($options['schedule_welcome_email']) && $options['schedule_welcome_email'] === false) ? false : true;
|
$schedule_welcome_email = (isset($options['schedule_welcome_email']) && $options['schedule_welcome_email'] === false) ? false : true;
|
||||||
|
$send_confirmation_email = (isset($options['send_confirmation_email']) && $options['send_confirmation_email'] === false) ? false : true;
|
||||||
|
|
||||||
if (empty($segments_ids)) {
|
if (empty($segments_ids)) {
|
||||||
throw new \Exception(__('At least one segment ID is required.', 'mailpoet'));
|
throw new \Exception(__('At least one segment ID is required.', 'mailpoet'));
|
||||||
@ -116,6 +117,20 @@ class API {
|
|||||||
$this->_scheduleWelcomeNotification($subscriber, $found_segments_ids);
|
$this->_scheduleWelcomeNotification($subscriber, $found_segments_ids);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// send confirmation email
|
||||||
|
if (
|
||||||
|
$send_confirmation_email
|
||||||
|
&& $subscriber->status === Subscriber::STATUS_UNCONFIRMED
|
||||||
|
&& (int)$subscriber->count_confirmations === 0
|
||||||
|
) {
|
||||||
|
$result = $this->_sendConfirmationEmail($subscriber);
|
||||||
|
if (!$result && $subscriber->getErrors()) {
|
||||||
|
throw new \Exception(
|
||||||
|
WPFunctions::get()->__(sprintf('Subscriber added to lists, but confirmation email failed to send: %s', strtolower(implode(', ', $subscriber->getErrors()))), 'mailpoet')
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return $subscriber->withCustomFields()->withSubscriptions()->asArray();
|
return $subscriber->withCustomFields()->withSubscriptions()->asArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -217,17 +232,9 @@ class API {
|
|||||||
|
|
||||||
// subscribe to segments and optionally: 1) send confirmation email, 2) schedule welcome email(s)
|
// subscribe to segments and optionally: 1) send confirmation email, 2) schedule welcome email(s)
|
||||||
if (!empty($segments)) {
|
if (!empty($segments)) {
|
||||||
$this->subscribeToLists($new_subscriber->id, $segments);
|
$this->subscribeToLists($new_subscriber->id, $segments, [
|
||||||
|
'send_confirmation_email' => $send_confirmation_email,
|
||||||
// send confirmation email
|
]);
|
||||||
if ($send_confirmation_email && $new_subscriber->status === Subscriber::STATUS_UNCONFIRMED) {
|
|
||||||
$result = $this->_sendConfirmationEmail($new_subscriber);
|
|
||||||
if (!$result && $new_subscriber->getErrors()) {
|
|
||||||
throw new \Exception(
|
|
||||||
WPFunctions::get()->__(sprintf('Subscriber added, but confirmation email failed to send: %s', strtolower(implode(', ', $new_subscriber->getErrors()))), 'mailpoet')
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// schedule welcome email(s)
|
// schedule welcome email(s)
|
||||||
if ($schedule_welcome_email && $new_subscriber->status === Subscriber::STATUS_SUBSCRIBED) {
|
if ($schedule_welcome_email && $new_subscriber->status === Subscriber::STATUS_SUBSCRIBED) {
|
||||||
|
@ -191,6 +191,42 @@ class APITest extends \MailPoetTest {
|
|||||||
expect($result['subscriptions'][0]['segment_id'])->equals($segment->id);
|
expect($result['subscriptions'][0]['segment_id'])->equals($segment->id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function testItSendsConfirmationEmailToASubscriberWhenBeingAddedToList() {
|
||||||
|
$subscriber = Subscriber::create();
|
||||||
|
$subscriber->hydrate(Fixtures::get('subscriber_template'));
|
||||||
|
$subscriber->status = Subscriber::STATUS_UNCONFIRMED;
|
||||||
|
$subscriber->save();
|
||||||
|
$segment = Segment::createOrUpdate([
|
||||||
|
'name' => 'Default',
|
||||||
|
'type' => Segment::TYPE_DEFAULT,
|
||||||
|
]);
|
||||||
|
$segment->save();
|
||||||
|
|
||||||
|
$sent = false;
|
||||||
|
$API = $this->makeEmptyExcept(\MailPoet\API\MP\v1\API::class, 'subscribeToLists', [
|
||||||
|
'_sendConfirmationEmail' => function () use (&$sent) {
|
||||||
|
$sent = true;
|
||||||
|
},
|
||||||
|
]);
|
||||||
|
|
||||||
|
$segments = [$segment->id];
|
||||||
|
|
||||||
|
// should not send
|
||||||
|
$API->subscribeToLists($subscriber->email, $segments, ['send_confirmation_email' => false]);
|
||||||
|
expect($sent)->equals(false);
|
||||||
|
|
||||||
|
// should send
|
||||||
|
$API->subscribeToLists($subscriber->email, $segments);
|
||||||
|
expect($sent)->equals(true);
|
||||||
|
|
||||||
|
// should not send
|
||||||
|
$sent = false;
|
||||||
|
$subscriber->count_confirmations = 1;
|
||||||
|
$subscriber->save();
|
||||||
|
$API->subscribeToLists($subscriber->email, $segments);
|
||||||
|
expect($sent)->equals(false);
|
||||||
|
}
|
||||||
|
|
||||||
function testItSubscribesSubscriberWithEmailIdentifier() {
|
function testItSubscribesSubscriberWithEmailIdentifier() {
|
||||||
$subscriber = Subscriber::create();
|
$subscriber = Subscriber::create();
|
||||||
$subscriber->hydrate(Fixtures::get('subscriber_template'));
|
$subscriber->hydrate(Fixtures::get('subscriber_template'));
|
||||||
@ -464,14 +500,18 @@ class APITest extends \MailPoetTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function testByDefaultItSendsConfirmationEmailAfterAddingSubscriber() {
|
function testByDefaultItSendsConfirmationEmailAfterAddingSubscriber() {
|
||||||
$API = Stub::makeEmptyExcept(
|
$API = $this->makeEmptyExcept(
|
||||||
\MailPoet\API\MP\v1\API::class,
|
\MailPoet\API\MP\v1\API::class,
|
||||||
'addSubscriber',
|
'addSubscriber',
|
||||||
array(
|
[
|
||||||
'_sendConfirmationEmail' => Expected::once(),
|
'subscribeToLists' => Expected::once(function ($subscriber_id, $segments_ids, $options) {
|
||||||
|
expect($options)->contains('send_confirmation_email');
|
||||||
|
expect($options['send_confirmation_email'])->equals(true);
|
||||||
|
}),
|
||||||
'required_custom_field_validator' => Stub::makeEmpty(RequiredCustomFieldValidator::class, ['validate']),
|
'required_custom_field_validator' => Stub::makeEmpty(RequiredCustomFieldValidator::class, ['validate']),
|
||||||
'new_subscriber_notification_mailer'=> Stub::makeEmpty(NewSubscriberNotificationMailer::class, ['send'])
|
'new_subscriber_notification_mailer'=> Stub::makeEmpty(NewSubscriberNotificationMailer::class, ['send'])
|
||||||
), $this);
|
]
|
||||||
|
);
|
||||||
$subscriber = array(
|
$subscriber = array(
|
||||||
'email' => 'test@example.com'
|
'email' => 'test@example.com'
|
||||||
);
|
);
|
||||||
@ -500,7 +540,7 @@ class APITest extends \MailPoetTest {
|
|||||||
$subscriber = array(
|
$subscriber = array(
|
||||||
'email' => 'test@example.com'
|
'email' => 'test@example.com'
|
||||||
);
|
);
|
||||||
$this->setExpectedException('\Exception', 'Subscriber added, but confirmation email failed to send: big error');
|
$this->setExpectedException('\Exception', 'Subscriber added to lists, but confirmation email failed to send: big error');
|
||||||
$API->addSubscriber($subscriber, array($segment->id), array('send_confirmation_email' => true));
|
$API->addSubscriber($subscriber, array($segment->id), array('send_confirmation_email' => true));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user