Schedules welcome notification when adding/editing subscriber

This commit is contained in:
Vlad
2017-12-18 19:44:09 -05:00
parent f616ef4d6c
commit 5d5b61b76f
4 changed files with 91 additions and 7 deletions

View File

@ -60,6 +60,7 @@ define(
label: MailPoet.I18n.t('lists'),
type: 'selection',
placeholder: MailPoet.I18n.t('selectList'),
tip: MailPoet.I18n.t('welcomeEmailTip'),
api_version: window.mailpoet_api_version,
endpoint: 'segments',
multiple: true,

View File

@ -10,6 +10,7 @@ use MailPoet\Form\Util\FieldNameObfuscator;
use MailPoet\Models\Form;
use MailPoet\Models\StatisticsForms;
use MailPoet\Models\Subscriber;
use MailPoet\Newsletter\Scheduler\Scheduler;
use MailPoet\Segments\SubscribersListings;
use MailPoet\Subscription\Throttling as SubscriptionThrottling;
use MailPoet\WP\Hooks;
@ -158,11 +159,15 @@ class Subscribers extends APIEndpoint {
if(!empty($errors)) {
return $this->badRequest($errors);
} else {
return $this->successResponse(
Subscriber::findOne($subscriber->id)->asArray()
);
}
if(!empty($data['segments'])) {
Scheduler::scheduleSubscriberWelcomeNotification($subscriber->id, $data['segments']);
}
return $this->successResponse(
Subscriber::findOne($subscriber->id)->asArray()
);
}
function restore($data = array()) {

View File

@ -7,10 +7,15 @@ use MailPoet\API\JSON\v1\Subscribers;
use MailPoet\API\JSON\Response as APIResponse;
use MailPoet\Form\Util\FieldNameObfuscator;
use MailPoet\Models\Form;
use MailPoet\Models\Newsletter;
use MailPoet\Models\NewsletterOption;
use MailPoet\Models\NewsletterOptionField;
use MailPoet\Models\SendingQueue;
use MailPoet\Models\Subscriber;
use MailPoet\Models\SubscriberIP;
use MailPoet\Models\Segment;
use MailPoet\Models\Setting;
use MailPoet\Models\SubscriberSegment;
class SubscribersTest extends \MailPoetTest {
function _before() {
@ -137,6 +142,7 @@ class SubscribersTest extends \MailPoetTest {
expect($response->data['first_name'])->equals('Super Jane');
}
function testItCanRemoveListsFromAnExistingSubscriber() {
$router = new Subscribers();
$subscriber_data = $this->subscriber_2->asArray();
@ -563,9 +569,80 @@ class SubscribersTest extends \MailPoetTest {
}
}
function testItSchedulesWelcomeEmailNotificationWhenSubscriberIsAdded() {
$this->_createWelcomeNewsletter();
$subscriber_data = array(
'email' => 'raul.doe@mailpoet.com',
'first_name' => 'Raul',
'last_name' => 'Doe',
'segments' => array(
$this->segment_1->id
)
);
$router = new Subscribers();
$router->save($subscriber_data);
expect(SendingQueue::findMany())->count(1);
}
function testItSchedulesWelcomeEmailNotificationWhenExistedSubscriberIsUpdated() {
$this->_createWelcomeNewsletter();
$subscriber_data = array(
'email' => 'raul.doe@mailpoet.com',
'first_name' => 'Raul',
'last_name' => 'Doe',
'segments' => array(
$this->segment_2->id
)
);
// welcome notification is created only for segment #1
$router = new Subscribers();
$router->save($subscriber_data);
expect(SendingQueue::findMany())->isEmpty();
$subscriber_data['segments'] = array($this->segment_1->id);
$router->save($subscriber_data);
expect(SendingQueue::findMany())->count(1);
}
private function _createWelcomeNewsletter() {
$welcome_newsletter = Newsletter::create();
$welcome_newsletter->type = Newsletter::TYPE_WELCOME;
$welcome_newsletter->status = Newsletter::STATUS_ACTIVE;
$welcome_newsletter->save();
expect($welcome_newsletter->getErrors())->false();
$welcome_newsletter_options = array(
'event' => 'segment',
'segment' => $this->segment_1->id,
'schedule' => '* * * * *'
);
foreach($welcome_newsletter_options as $option => $value) {
$newsletter_option_field = NewsletterOptionField::create();
$newsletter_option_field->name = $option;
$newsletter_option_field->newsletter_type = Newsletter::TYPE_WELCOME;
$newsletter_option_field->save();
expect($newsletter_option_field->getErrors())->false();
$newsletter_option = NewsletterOption::create();
$newsletter_option->option_field_id = $newsletter_option_field->id;
$newsletter_option->newsletter_id = $welcome_newsletter->id;
$newsletter_option->value = $value;
$newsletter_option->save();
expect($newsletter_option->getErrors())->false();
}
}
function _after() {
Segment::deleteMany();
Subscriber::deleteMany();
SubscriberIP::deleteMany();
\ORM::raw_execute('TRUNCATE ' . Newsletter::$_table);
\ORM::raw_execute('TRUNCATE ' . NewsletterOption::$_table);
\ORM::raw_execute('TRUNCATE ' . NewsletterOptionField::$_table);
\ORM::raw_execute('TRUNCATE ' . Segment::$_table);
\ORM::raw_execute('TRUNCATE ' . SendingQueue::$_table);
\ORM::raw_execute('TRUNCATE ' . Subscriber::$_table);
\ORM::raw_execute('TRUNCATE ' . SubscriberSegment::$_table);
\ORM::raw_execute('TRUNCATE ' . SubscriberIP::$_table);
}
}

View File

@ -60,6 +60,7 @@
'unsubscribedOn': __('Unsubscribed on %$1s'),
'subscriberUpdated': __('Subscriber was updated successfully!'),
'subscriberAdded': __('Subscriber was added successfully!'),
'welcomeEmailTip': __('This subscriber will receive Welcome Emails if any are active for your lists.'),
'subscriber': __('Subscriber'),
'status': __('Status'),