- Prevents welcome emails to be sent to unconfirmed subscribers
- Closes #384
This commit is contained in:
@ -47,16 +47,16 @@ class Scheduler {
|
||||
function processWelcomeNewsletter($newsletter, $queue) {
|
||||
$subscriber = unserialize($queue->subscribers);
|
||||
$subscriber_id = $subscriber['to_process'][0];
|
||||
$result = false;
|
||||
if($newsletter->event === 'segment') {
|
||||
$result = $this->verifyMailPoetSubscriber($subscriber_id, $newsletter);
|
||||
if ($this->verifyMailPoetSubscriber($subscriber_id, $newsletter, $queue) === false) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if($newsletter->event === 'user') {
|
||||
$result = $this->verifyWPSubscriber($subscriber_id, $newsletter);
|
||||
}
|
||||
if(!$result) {
|
||||
$queue->delete();
|
||||
return;
|
||||
if ($this->verifyWPSubscriber($subscriber_id, $newsletter) === false) {
|
||||
$queue->delete();
|
||||
return;
|
||||
}
|
||||
}
|
||||
$queue->status = null;
|
||||
$queue->save();
|
||||
@ -95,14 +95,27 @@ class Scheduler {
|
||||
$new_queue->save();
|
||||
}
|
||||
|
||||
private function verifyMailPoetSubscriber($subscriber_id, $newsletter) {
|
||||
private function verifyMailPoetSubscriber($subscriber_id, $newsletter, $queue) {
|
||||
// check if subscriber is in proper segment
|
||||
$subscriber_in_segment =
|
||||
SubscriberSegment::where('subscriber_id', $subscriber_id)
|
||||
->where('segment_id', $newsletter->segment)
|
||||
->where('status', 'subscribed')
|
||||
->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) {
|
||||
|
@ -12,6 +12,10 @@ class SubscriberSegment extends Model {
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
function subscriber() {
|
||||
return $this->has_one(__NAMESPACE__.'\Subscriber', 'id');
|
||||
}
|
||||
|
||||
static function setSubscriptions($subscriber, $segment_ids = array()) {
|
||||
if($subscriber->id > 0) {
|
||||
// unsubscribe from current subscriptions
|
||||
|
@ -120,11 +120,11 @@ class Scheduler {
|
||||
case 'weeks':
|
||||
$scheduled_at = $current_time->addWeeks($after_time_number);
|
||||
break;
|
||||
default:
|
||||
$scheduled_at = $current_time;
|
||||
}
|
||||
if($scheduled_at) {
|
||||
$queue->status = 'scheduled';
|
||||
$queue->scheduled_at = $scheduled_at;
|
||||
}
|
||||
$queue->status = 'scheduled';
|
||||
$queue->scheduled_at = $scheduled_at;
|
||||
$queue->save();
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user