merged post_notification_update
This commit is contained in:
@ -67,6 +67,7 @@ class Scheduler {
|
||||
}
|
||||
|
||||
function processPostNotificationNewsletter($newsletter, $queue) {
|
||||
// ensure that segments exist
|
||||
$segments = $newsletter->segments()->findArray();
|
||||
if(empty($segments)) {
|
||||
$this->deleteQueueOrUpdateNextRunDate($queue, $newsletter);
|
||||
@ -76,6 +77,7 @@ class Scheduler {
|
||||
return (int)$segment['id'];
|
||||
}, $segments);
|
||||
|
||||
// ensure that subscribers are in segments
|
||||
$subscribers = Subscriber::getSubscribedInSegments($segment_ids)
|
||||
->findArray();
|
||||
$subscribers = Helpers::arrayColumn($subscribers, 'subscriber_id');
|
||||
@ -85,13 +87,13 @@ class Scheduler {
|
||||
$this->deleteQueueOrUpdateNextRunDate($queue, $newsletter);
|
||||
return;
|
||||
}
|
||||
// schedule new queue if the post notification is not destined for immediate delivery
|
||||
if($newsletter->intervalType !== NewsletterScheduler::INTERVAL_IMMEDIATELY) {
|
||||
$new_queue = SendingQueue::create();
|
||||
$new_queue->newsletter_id = $newsletter->id;
|
||||
$new_queue->status = SendingQueue::STATUS_SCHEDULED;
|
||||
self::deleteQueueOrUpdateNextRunDate($new_queue, $newsletter);
|
||||
}
|
||||
|
||||
// create a duplicate newsletter that acts as a history record
|
||||
$notification_history = $this->createNotificationHistory($newsletter->id);
|
||||
if(!$notification_history) return;
|
||||
|
||||
// queue newsletter for delivery
|
||||
$queue->newsletter_id = $notification_history->id;
|
||||
$queue->subscribers = serialize(
|
||||
array(
|
||||
'to_process' => $subscribers
|
||||
@ -166,7 +168,7 @@ class Scheduler {
|
||||
return true;
|
||||
}
|
||||
|
||||
private function deleteQueueOrUpdateNextRunDate($queue, $newsletter) {
|
||||
function deleteQueueOrUpdateNextRunDate($queue, $newsletter) {
|
||||
if($newsletter->intervalType === NewsletterScheduler::INTERVAL_IMMEDIATELY) {
|
||||
$queue->delete();
|
||||
} else {
|
||||
@ -175,4 +177,12 @@ class Scheduler {
|
||||
$queue->save();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function createNotificationHistory($newsletter_id) {
|
||||
$newsletter = Newsletter::findOne($newsletter_id);
|
||||
$notification_history = $newsletter->createNotificationHistory();
|
||||
return ($notification_history->getErrors() === false) ?
|
||||
$notification_history :
|
||||
false;
|
||||
}
|
||||
}
|
@ -178,13 +178,14 @@ class SendingQueue {
|
||||
if(!$queue->count_to_process) {
|
||||
$queue->processed_at = current_time('mysql');
|
||||
$queue->status = SendingQueueModel::STATUS_COMPLETED;
|
||||
// set newsletter status to sent
|
||||
// if it's a standard or post notificaiton newsletter, update its status to sent
|
||||
$newsletter = NewsletterModel::findOne($queue->newsletter_id);
|
||||
// if it's a standard newsletter, update its status
|
||||
if($newsletter->type === NewsletterModel::TYPE_STANDARD) {
|
||||
if($newsletter->type === NewsletterModel::TYPE_STANDARD ||
|
||||
$newsletter->type === NewsletterModel::TYPE_NOTIFICATION_HISTORY
|
||||
) {
|
||||
$newsletter->setStatus(NewsletterModel::STATUS_SENT);
|
||||
}
|
||||
}
|
||||
return $queue->save();
|
||||
}
|
||||
}
|
||||
}
|
@ -109,6 +109,44 @@ class Newsletter extends Model {
|
||||
return $duplicate;
|
||||
}
|
||||
|
||||
function createNotificationHistory() {
|
||||
// get current newsletter's data as an array
|
||||
$newsletter_data = $this->asArray();
|
||||
|
||||
// remove id so that it creates a new record
|
||||
unset($newsletter_data['id']);
|
||||
|
||||
// update newsletter columns
|
||||
$data = array_merge(
|
||||
$newsletter_data,
|
||||
array(
|
||||
'parent_id' => $this->id,
|
||||
'type' => self::TYPE_NOTIFICATION_HISTORY,
|
||||
'status' => self::STATUS_SENDING
|
||||
));
|
||||
|
||||
$notification_history = self::create();
|
||||
$notification_history->hydrate($data);
|
||||
|
||||
$notification_history->save();
|
||||
|
||||
if($notification_history->getErrors() === false) {
|
||||
// create relationships between notification history and segments
|
||||
$segments = $this->segments()->findArray();
|
||||
|
||||
if(!empty($segments)) {
|
||||
foreach($segments as $segment) {
|
||||
$relation = NewsletterSegment::create();
|
||||
$relation->segment_id = $segment['id'];
|
||||
$relation->newsletter_id = $notification_history->id;
|
||||
$relation->save();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $notification_history;
|
||||
}
|
||||
|
||||
function asArray() {
|
||||
$model = parent::asArray();
|
||||
|
||||
@ -580,4 +618,4 @@ class Newsletter extends Model {
|
||||
->whereIn('options.value', $segments)
|
||||
->findMany();
|
||||
}
|
||||
}
|
||||
}
|
@ -37,8 +37,10 @@ class SendingQueue {
|
||||
);
|
||||
}
|
||||
|
||||
if($newsletter->type === Newsletter::TYPE_WELCOME) {
|
||||
// set welcome email active
|
||||
if($newsletter->type === Newsletter::TYPE_WELCOME ||
|
||||
$newsletter->type === Newsletter::TYPE_NOTIFICATION
|
||||
) {
|
||||
// set newsletter status to active
|
||||
$result = $newsletter->setStatus(Newsletter::STATUS_ACTIVE);
|
||||
$errors = $result->getErrors();
|
||||
|
||||
@ -48,20 +50,16 @@ class SendingQueue {
|
||||
'errors' => $errors
|
||||
);
|
||||
} else {
|
||||
$message = ($newsletter->type === Newsletter::TYPE_WELCOME) ?
|
||||
__('Your welcome email has been activated') :
|
||||
__('Your post notification has been activated');
|
||||
return array(
|
||||
'result' => true,
|
||||
'data' => array(
|
||||
'message' => __('Your welcome email has been activated')
|
||||
'message' => $message
|
||||
)
|
||||
);
|
||||
}
|
||||
} else if($newsletter->type === Newsletter::TYPE_NOTIFICATION) {
|
||||
// Post Notifications
|
||||
$newsletter = Scheduler::processPostNotificationSchedule($newsletter->id);
|
||||
Scheduler::createPostNotificationQueue($newsletter);
|
||||
|
||||
// set post notification active
|
||||
$newsletter->setStatus(Newsletter::STATUS_ACTIVE);
|
||||
}
|
||||
|
||||
$queue = SendingQueueModel::whereNull('status')
|
||||
@ -83,18 +81,6 @@ class SendingQueue {
|
||||
$queue->newsletter_id = $newsletter->id;
|
||||
}
|
||||
|
||||
if($newsletter->type === Newsletter::TYPE_NOTIFICATION) {
|
||||
$queue->scheduled_at = Scheduler::getNextRunDate($newsletter->schedule);
|
||||
$queue->status = SendingQueueModel::STATUS_SCHEDULED;
|
||||
$queue->save();
|
||||
return array(
|
||||
'result' => true,
|
||||
'data' => array(
|
||||
'message' => __('Your post notification has been activated')
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
if((bool)$newsletter->isScheduled) {
|
||||
// set newsletter status
|
||||
$newsletter->setStatus(Newsletter::STATUS_SCHEDULED);
|
||||
@ -188,4 +174,4 @@ class SendingQueue {
|
||||
'result' => $result
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user