Prevents repeat subscription confirmation
Prevents scheduling of duplicate welcome notifications
This commit is contained in:
@ -73,6 +73,10 @@ class Scheduler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static function createWelcomeNotificationQueue($newsletter, $subscriber_id) {
|
static function createWelcomeNotificationQueue($newsletter, $subscriber_id) {
|
||||||
|
$previously_scheduled_notification = SendingQueue::where('newsletter_id', $newsletter->id)
|
||||||
|
->whereLike('subscribers', '%' . serialize(array($subscriber_id)) . '%')
|
||||||
|
->findOne();
|
||||||
|
if(!empty($previously_scheduled_notification)) return;
|
||||||
$queue = SendingQueue::create();
|
$queue = SendingQueue::create();
|
||||||
$queue->newsletter_id = $newsletter->id;
|
$queue->newsletter_id = $newsletter->id;
|
||||||
$queue->subscribers = serialize(
|
$queue->subscribers = serialize(
|
||||||
|
@ -57,7 +57,7 @@ class Pages {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function confirm() {
|
function confirm() {
|
||||||
if($this->subscriber === false) {
|
if($this->subscriber === false || $this->subscriber->status === Subscriber::STATUS_SUBSCRIBED) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -205,7 +205,6 @@ class Pages {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private function getConfirmContent() {
|
private function getConfirmContent() {
|
||||||
if($this->isPreview() || $this->subscriber !== false) {
|
if($this->isPreview() || $this->subscriber !== false) {
|
||||||
return __("Yup, we've added you to our email list. You'll hear from us shortly.", 'mailpoet');
|
return __("Yup, we've added you to our email list. You'll hear from us shortly.", 'mailpoet');
|
||||||
|
@ -63,6 +63,27 @@ class NewsletterSchedulerTest extends MailPoetTest {
|
|||||||
expect(SendingQueue::findMany())->count(1);
|
expect(SendingQueue::findMany())->count(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function testItDoesNotCreateDuplicateWelcomeNotificationQueueRecords() {
|
||||||
|
$newsletter = (object)array(
|
||||||
|
'id' => 1,
|
||||||
|
'afterTimeNumber' => 2,
|
||||||
|
'afterTimeType' => 'hours'
|
||||||
|
);
|
||||||
|
$existing_subscriber = 678;
|
||||||
|
$existing_queue = SendingQueue::create();
|
||||||
|
$existing_queue->newsletter_id = $newsletter->id;
|
||||||
|
$existing_queue->subscribers = array('to_process' => array($existing_subscriber));
|
||||||
|
$existing_queue->save();
|
||||||
|
|
||||||
|
// queue is not scheduled
|
||||||
|
Scheduler::createWelcomeNotificationQueue($newsletter, $existing_subscriber);
|
||||||
|
expect(SendingQueue::findMany())->count(1);
|
||||||
|
|
||||||
|
// queue is not scheduled
|
||||||
|
Scheduler::createWelcomeNotificationQueue($newsletter, 1);
|
||||||
|
expect(SendingQueue::findMany())->count(2);
|
||||||
|
}
|
||||||
|
|
||||||
function testItCreatesWelcomeNotificationQueueRecord() {
|
function testItCreatesWelcomeNotificationQueueRecord() {
|
||||||
$newsletter = (object)array(
|
$newsletter = (object)array(
|
||||||
'id' => 1,
|
'id' => 1,
|
||||||
|
@ -27,6 +27,14 @@ class PagesTest extends MailPoetTest {
|
|||||||
expect($confirmed_subscriber->status)->equals(Subscriber::STATUS_SUBSCRIBED);
|
expect($confirmed_subscriber->status)->equals(Subscriber::STATUS_SUBSCRIBED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function testItDoesNotConfirmSubscriptionOnDuplicateAttempt() {
|
||||||
|
$subscriber = $this->subscriber;
|
||||||
|
$subscriber->status = Subscriber::STATUS_SUBSCRIBED;
|
||||||
|
$subscriber->save();
|
||||||
|
$subscription = new Pages($action = false, $this->data);
|
||||||
|
expect($subscription->confirm())->false();
|
||||||
|
}
|
||||||
|
|
||||||
function testItSendsWelcomeNotificationUponConfirmingSubscription() {
|
function testItSendsWelcomeNotificationUponConfirmingSubscription() {
|
||||||
// create segment
|
// create segment
|
||||||
$segment = Segment::create();
|
$segment = Segment::create();
|
||||||
|
Reference in New Issue
Block a user