- Prevents welcome emails to be sent to unconfirmed subscribers

- Closes #384
This commit is contained in:
Vlad
2016-03-30 20:57:18 -04:00
parent 7c9029b227
commit d16eb87782
3 changed files with 30 additions and 13 deletions

View File

@ -47,16 +47,16 @@ class Scheduler {
function processWelcomeNewsletter($newsletter, $queue) { function processWelcomeNewsletter($newsletter, $queue) {
$subscriber = unserialize($queue->subscribers); $subscriber = unserialize($queue->subscribers);
$subscriber_id = $subscriber['to_process'][0]; $subscriber_id = $subscriber['to_process'][0];
$result = false;
if($newsletter->event === 'segment') { if($newsletter->event === 'segment') {
$result = $this->verifyMailPoetSubscriber($subscriber_id, $newsletter); if ($this->verifyMailPoetSubscriber($subscriber_id, $newsletter, $queue) === false) {
return;
}
} }
else if($newsletter->event === 'user') { else if($newsletter->event === 'user') {
$result = $this->verifyWPSubscriber($subscriber_id, $newsletter); if ($this->verifyWPSubscriber($subscriber_id, $newsletter) === false) {
} $queue->delete();
if(!$result) { return;
$queue->delete(); }
return;
} }
$queue->status = null; $queue->status = null;
$queue->save(); $queue->save();
@ -95,14 +95,27 @@ class Scheduler {
$new_queue->save(); $new_queue->save();
} }
private function verifyMailPoetSubscriber($subscriber_id, $newsletter) { private function verifyMailPoetSubscriber($subscriber_id, $newsletter, $queue) {
// check if subscriber is in proper segment // check if subscriber is in proper segment
$subscriber_in_segment = $subscriber_in_segment =
SubscriberSegment::where('subscriber_id', $subscriber_id) SubscriberSegment::where('subscriber_id', $subscriber_id)
->where('segment_id', $newsletter->segment) ->where('segment_id', $newsletter->segment)
->where('status', 'subscribed') ->where('status', 'subscribed')
->findOne(); ->findOne();
return ($subscriber_in_segment) ? true : false; if (!$subscriber_in_segment) {
$queue->delete();
return false;
}
// check if subscriber is confirmed (subscribed)
$subscriber = $subscriber_in_segment->subscriber()->findOne();
if ($subscriber->status !== 'subscribed') {
// reschedule delivery in 5 minutes
$scheduled_at = Carbon::createFromTimestamp(current_time('timestamp'));
$queue->scheduled_at = $scheduled_at->addMinutes(5);
$queue->save();
return false;
}
return true;
} }
private function verifyWPSubscriber($subscriber_id, $newsletter) { private function verifyWPSubscriber($subscriber_id, $newsletter) {

View File

@ -12,6 +12,10 @@ class SubscriberSegment extends Model {
parent::__construct(); parent::__construct();
} }
function subscriber() {
return $this->has_one(__NAMESPACE__.'\Subscriber', 'id');
}
static function setSubscriptions($subscriber, $segment_ids = array()) { static function setSubscriptions($subscriber, $segment_ids = array()) {
if($subscriber->id > 0) { if($subscriber->id > 0) {
// unsubscribe from current subscriptions // unsubscribe from current subscriptions

View File

@ -120,11 +120,11 @@ class Scheduler {
case 'weeks': case 'weeks':
$scheduled_at = $current_time->addWeeks($after_time_number); $scheduled_at = $current_time->addWeeks($after_time_number);
break; break;
default:
$scheduled_at = $current_time;
} }
if($scheduled_at) { $queue->status = 'scheduled';
$queue->status = 'scheduled'; $queue->scheduled_at = $scheduled_at;
$queue->scheduled_at = $scheduled_at;
}
$queue->save(); $queue->save();
} }
} }