Prevent scheduling welcome emails
If subscriber is imported we don't want to send them welcome emails if their data are updated [MAILPOET-1908]
This commit is contained in:
@ -10,6 +10,7 @@ use MailPoet\Listing;
|
|||||||
use MailPoet\Models\Form;
|
use MailPoet\Models\Form;
|
||||||
use MailPoet\Models\StatisticsForms;
|
use MailPoet\Models\StatisticsForms;
|
||||||
use MailPoet\Models\Subscriber;
|
use MailPoet\Models\Subscriber;
|
||||||
|
use MailPoet\Models\SubscriberSegment;
|
||||||
use MailPoet\Newsletter\Scheduler\Scheduler;
|
use MailPoet\Newsletter\Scheduler\Scheduler;
|
||||||
use MailPoet\Segments\BulkAction;
|
use MailPoet\Segments\BulkAction;
|
||||||
use MailPoet\Segments\SubscribersListings;
|
use MailPoet\Segments\SubscribersListings;
|
||||||
@ -229,6 +230,7 @@ class Subscribers extends APIEndpoint {
|
|||||||
if (empty($data['segments'])) {
|
if (empty($data['segments'])) {
|
||||||
$data['segments'] = array();
|
$data['segments'] = array();
|
||||||
}
|
}
|
||||||
|
$new_segments = $this->findNewSegments($data);
|
||||||
$subscriber = Subscriber::createOrUpdate($data);
|
$subscriber = Subscriber::createOrUpdate($data);
|
||||||
$errors = $subscriber->getErrors();
|
$errors = $subscriber->getErrors();
|
||||||
|
|
||||||
@ -241,8 +243,8 @@ class Subscribers extends APIEndpoint {
|
|||||||
$subscriber->save();
|
$subscriber->save();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($data['segments'])) {
|
if (!empty($new_segments)) {
|
||||||
Scheduler::scheduleSubscriberWelcomeNotification($subscriber->id, $data['segments']);
|
Scheduler::scheduleSubscriberWelcomeNotification($subscriber->id, $new_segments);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->successResponse(
|
return $this->successResponse(
|
||||||
@ -250,6 +252,17 @@ class Subscribers extends APIEndpoint {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function findNewSegments(array $data) {
|
||||||
|
$old_segment_ids = [];
|
||||||
|
if (isset($data['id']) && (int)$data['id'] > 0) {
|
||||||
|
$old_segments = SubscriberSegment::where('subscriber_id', $data['id'])->findMany();
|
||||||
|
foreach ($old_segments as $old_segment) {
|
||||||
|
$old_segment_ids[] = $old_segment->segment_id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return array_diff($data['segments'], $old_segment_ids);
|
||||||
|
}
|
||||||
|
|
||||||
function restore($data = array()) {
|
function restore($data = array()) {
|
||||||
$id = (isset($data['id']) ? (int)$data['id'] : false);
|
$id = (isset($data['id']) ? (int)$data['id'] : false);
|
||||||
$subscriber = Subscriber::findOne($id);
|
$subscriber = Subscriber::findOne($id);
|
||||||
|
@ -601,6 +601,32 @@ class SubscribersTest extends \MailPoetTest {
|
|||||||
expect(SendingQueue::findMany())->count(1);
|
expect(SendingQueue::findMany())->count(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function testItDoesNotSchedulesWelcomeEmailNotificationWhenNoNewSegmentIsAdded() {
|
||||||
|
$this->_createWelcomeNewsletter();
|
||||||
|
$subscriber = Subscriber::createOrUpdate(array(
|
||||||
|
'email' => 'raul.doe@mailpoet.com',
|
||||||
|
'first_name' => 'Jane',
|
||||||
|
'last_name' => 'Doe',
|
||||||
|
'status' => Subscriber::STATUS_SUBSCRIBED,
|
||||||
|
'segments' => [
|
||||||
|
$this->segment_1->id
|
||||||
|
],
|
||||||
|
'source' => Source::IMPORTED,
|
||||||
|
));
|
||||||
|
$subscriber_data = array(
|
||||||
|
'id' => $subscriber->id(),
|
||||||
|
'email' => 'raul.doe@mailpoet.com',
|
||||||
|
'first_name' => 'Raul',
|
||||||
|
'last_name' => 'Doe',
|
||||||
|
'segments' => array(
|
||||||
|
$this->segment_1->id
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->endpoint->save($subscriber_data);
|
||||||
|
expect(SendingQueue::findMany())->count(0);
|
||||||
|
}
|
||||||
|
|
||||||
private function _createWelcomeNewsletter() {
|
private function _createWelcomeNewsletter() {
|
||||||
$welcome_newsletter = Newsletter::create();
|
$welcome_newsletter = Newsletter::create();
|
||||||
$welcome_newsletter->type = Newsletter::TYPE_WELCOME;
|
$welcome_newsletter->type = Newsletter::TYPE_WELCOME;
|
||||||
|
Reference in New Issue
Block a user