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

View File

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