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\StatisticsForms;
|
||||
use MailPoet\Models\Subscriber;
|
||||
use MailPoet\Models\SubscriberSegment;
|
||||
use MailPoet\Newsletter\Scheduler\Scheduler;
|
||||
use MailPoet\Segments\BulkAction;
|
||||
use MailPoet\Segments\SubscribersListings;
|
||||
@ -229,6 +230,7 @@ class Subscribers extends APIEndpoint {
|
||||
if (empty($data['segments'])) {
|
||||
$data['segments'] = array();
|
||||
}
|
||||
$new_segments = $this->findNewSegments($data);
|
||||
$subscriber = Subscriber::createOrUpdate($data);
|
||||
$errors = $subscriber->getErrors();
|
||||
|
||||
@ -241,8 +243,8 @@ class Subscribers extends APIEndpoint {
|
||||
$subscriber->save();
|
||||
}
|
||||
|
||||
if (!empty($data['segments'])) {
|
||||
Scheduler::scheduleSubscriberWelcomeNotification($subscriber->id, $data['segments']);
|
||||
if (!empty($new_segments)) {
|
||||
Scheduler::scheduleSubscriberWelcomeNotification($subscriber->id, $new_segments);
|
||||
}
|
||||
|
||||
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()) {
|
||||
$id = (isset($data['id']) ? (int)$data['id'] : false);
|
||||
$subscriber = Subscriber::findOne($id);
|
||||
|
@ -601,6 +601,32 @@ class SubscribersTest extends \MailPoetTest {
|
||||
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() {
|
||||
$welcome_newsletter = Newsletter::create();
|
||||
$welcome_newsletter->type = Newsletter::TYPE_WELCOME;
|
||||
|
Reference in New Issue
Block a user