Schedules welcome notification when adding/editing subscriber
This commit is contained in:
@ -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,
|
||||
|
@ -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()) {
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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'),
|
||||
|
Reference in New Issue
Block a user