- Changes newsletter object to array in SendingQueue router

- Schedules post notification right after its creation
This commit is contained in:
Vlad
2016-05-17 15:27:42 -04:00
parent d2a6b6bd4e
commit 8540c51679
3 changed files with 22 additions and 16 deletions

View File

@ -44,7 +44,8 @@ class SendingQueue {
$newsletter = $newsletter->asArray(); $newsletter = $newsletter->asArray();
$newsletter['body'] = $this->getOrRenderNewsletterBody($queue, $newsletter); $newsletter['body'] = $this->getOrRenderNewsletterBody($queue, $newsletter);
if ($newsletter['type'] === 'notification' && if ($newsletter['type'] === 'notification' &&
strpos($newsletter['body']['html'], 'data-post-id') === false) { strpos($newsletter['body']['html'], 'data-post-id') === false
){
$queue->delete(); $queue->delete();
continue; continue;
} }

View File

@ -56,6 +56,8 @@ class Scheduler {
} }
$relation->value = $schedule; $relation->value = $schedule;
$relation->save(); $relation->save();
return Newsletter::filter('filterWithOptions')
->findOne($newsletter_id)->asArray();
} }
static function schedulePostNotification($post_id) { static function schedulePostNotification($post_id) {

View File

@ -32,6 +32,8 @@ class SendingQueue {
'result' => false, 'result' => false,
'errors' => array(__('Newsletter does not exist.')) 'errors' => array(__('Newsletter does not exist.'))
); );
} else {
$newsletter = $newsletter->asArray();
} }
// create or update newsletter options, including schedule time // create or update newsletter options, including schedule time
@ -42,32 +44,33 @@ class SendingQueue {
unset($data['options']); unset($data['options']);
} }
if ($options && if ($options &&
($newsletter->type === 'notification' || $newsletter->type === 'welcome') ($newsletter['type'] === 'notification' || $newsletter['type'] === 'welcome')
) { ) {
$option_fields = NewsletterOptionField::where( $option_fields = NewsletterOptionField::where(
'newsletter_type', $newsletter->type 'newsletter_type', $newsletter['type']
)->findArray(); )->findArray();
foreach($option_fields as $option_field) { foreach($option_fields as $option_field) {
if(isset($options[$option_field['name']])) { if(isset($options[$option_field['name']])) {
$relation = NewsletterOption::where('option_field_id', $option_field['id']) $relation = NewsletterOption::where('option_field_id', $option_field['id'])
->where('newsletter_id', $newsletter->id) ->where('newsletter_id', $newsletter['id'])
->findOne(); ->findOne();
if (!$relation) { if (!$relation) {
$relation = NewsletterOption::create(); $relation = NewsletterOption::create();
$relation->newsletter_id = $newsletter->id; $relation->newsletter_id = $newsletter['id'];
$relation->option_field_id = $option_field['id']; $relation->option_field_id = $option_field['id'];
} }
$relation->value = $options[$option_field['name']]; $relation->value = $options[$option_field['name']];
$relation->save(); $relation->save();
} }
} }
if ($newsletter->type === 'notification') { if ($newsletter['type'] === 'notification') {
Scheduler::processPostNotificationSchedule($newsletter->id); // convert scheduling options into cron format and add to queue
$newsletter = Scheduler::processPostNotificationSchedule($newsletter['id']);
Scheduler::createPostNotificationQueue($newsletter);
} }
$newsletter = Newsletter::filter('filterWithOptions')
->findOne($data['newsletter_id']);
} }
if($newsletter->type === 'welcome') {
if($newsletter['type'] === 'welcome') {
return array( return array(
'result' => true, 'result' => true,
'data' => array( 'data' => array(
@ -77,7 +80,7 @@ class SendingQueue {
} }
$queue = \MailPoet\Models\SendingQueue::whereNull('status') $queue = \MailPoet\Models\SendingQueue::whereNull('status')
->where('newsletter_id', $newsletter->id) ->where('newsletter_id', $newsletter['id'])
->findOne(); ->findOne();
if(!empty($queue)) { if(!empty($queue)) {
return array( return array(
@ -86,15 +89,15 @@ class SendingQueue {
); );
} }
if($newsletter->type === 'notification') { if($newsletter['type'] === 'notification') {
$queue = \MailPoet\Models\SendingQueue::where('status', 'scheduled') $queue = \MailPoet\Models\SendingQueue::where('status', 'scheduled')
->where('newsletter_id', $newsletter->id) ->where('newsletter_id', $newsletter['id'])
->findOne(); ->findOne();
if(!$queue) { if(!$queue) {
$queue = \MailPoet\Models\SendingQueue::create(); $queue = \MailPoet\Models\SendingQueue::create();
$queue->newsletter_id = $newsletter->id; $queue->newsletter_id = $newsletter['id'];
} }
$schedule = Cron::factory($newsletter->schedule); $schedule = Cron::factory($newsletter['schedule']);
$queue->scheduled_at = $queue->scheduled_at =
$schedule->getNextRunDate(current_time('mysql'))->format('Y-m-d H:i:s'); $schedule->getNextRunDate(current_time('mysql'))->format('Y-m-d H:i:s');
$queue->status = 'scheduled'; $queue->status = 'scheduled';
@ -108,7 +111,7 @@ class SendingQueue {
} }
$queue = \MailPoet\Models\SendingQueue::create(); $queue = \MailPoet\Models\SendingQueue::create();
$queue->newsletter_id = $newsletter->id; $queue->newsletter_id = $newsletter['id'];
$subscribers = Subscriber::getSubscribedInSegments($data['segments']) $subscribers = Subscriber::getSubscribedInSegments($data['segments'])
->findArray(); ->findArray();