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:
Pavel Dohnal
2019-03-28 09:18:36 +01:00
committed by M. Shull
parent 47cc90f058
commit acbf363412
2 changed files with 41 additions and 2 deletions

View File

@ -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);

View File

@ -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;