- Adds "scheduled for" status for notifications

- Adds post notification/welcome activation message
- Implements schedule update when editing newsletter
Implements #405 (3 & 7)
This commit is contained in:
Vlad
2016-04-27 18:58:08 -04:00
parent 1b7ac62b5c
commit 06d56fe19d
5 changed files with 53 additions and 22 deletions

View File

@ -141,11 +141,17 @@ define(
}); });
}, },
renderStatus: function(item) { renderStatus: function(item) {
console.log(item);
if(!item.queue) { if(!item.queue) {
return ( return (
<span>{MailPoet.I18n.t('notSentYet')}</span> <span>{MailPoet.I18n.t('notSentYet')}</span>
); );
} else { } else {
if (item.queue.status === 'scheduled') {
return (
<span>{MailPoet.I18n.t('scheduledFor')} { item.queue.scheduled_at } </span>
)
}
var progressClasses = classNames( var progressClasses = classNames(
'mailpoet_progress', 'mailpoet_progress',
{ 'mailpoet_progress_complete': item.queue.status === 'completed'} { 'mailpoet_progress_complete': item.queue.status === 'completed'}

View File

@ -107,9 +107,7 @@ define(
this.setState({ loading: false }); this.setState({ loading: false });
if(response.result === true) { if(response.result === true) {
this.history.pushState(null, '/'); this.history.pushState(null, '/');
MailPoet.Notice.success( MailPoet.Notice.success(response.data.message);
MailPoet.I18n.t('newsletterIsBeingSent')
);
} else { } else {
if(response.errors) { if(response.errors) {
MailPoet.Notice.error(response.errors); MailPoet.Notice.error(response.errors);

View File

@ -68,7 +68,6 @@ class Newsletter extends Model {
function getQueue() { function getQueue() {
return SendingQueue::where('newsletter_id', $this->id) return SendingQueue::where('newsletter_id', $this->id)
->whereRaw(('`status` IS NULL OR `status` != "scheduled"'))
->orderByDesc('updated_at') ->orderByDesc('updated_at')
->findOne(); ->findOne();
} }

View File

@ -8,6 +8,7 @@ use MailPoet\Models\NewsletterOptionField;
use MailPoet\Models\Setting; use MailPoet\Models\Setting;
use MailPoet\Models\Subscriber; use MailPoet\Models\Subscriber;
use MailPoet\Models\SubscriberSegment; use MailPoet\Models\SubscriberSegment;
use MailPoet\Newsletter\Scheduler\Scheduler;
use MailPoet\Util\Helpers; use MailPoet\Util\Helpers;
use Cron\CronExpression as Cron; use Cron\CronExpression as Cron;
@ -33,9 +34,46 @@ class SendingQueue {
); );
} }
// create or update newsletter options, including schedule time
$options = array();
if(isset($data['options'])) {
$options = $data['options'];
unset($data['options']);
}
if ($options &&
($newsletter->type === 'notification' || $newsletter->type === 'welcome')
) {
$option_fields = NewsletterOptionField::where(
'newsletter_type', $newsletter->type
)->findArray();
foreach($option_fields as $option_field) {
if(isset($options[$option_field['name']])) {
$relation = NewsletterOption::where('option_field_id', $option_field['id'])
->where('newsletter_id', $newsletter->id)
->findOne();
if (!$relation) {
$relation = NewsletterOption::create();
$relation->newsletter_id = $newsletter->id;
$relation->option_field_id = $option_field['id'];
}
$relation->value = ($option_field['name'] === 'segments') ?
serialize($data['segments']) :
$options[$option_field['name']];
$relation->save();
}
}
if ($newsletter->type === 'notification') {
Scheduler::postNotification($newsletter->id);
}
$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(
'message' => __('Your welcome notification is activated.')
)
); );
} }
@ -50,20 +88,6 @@ class SendingQueue {
} }
if($newsletter->type === 'notification') { if($newsletter->type === 'notification') {
$option_field = NewsletterOptionField::where('name', 'segments')
->where('newsletter_type', 'notification')
->findOne();
$relation = NewsletterOption::where('option_field_id', $option_field->id)
->where('newsletter_id', $newsletter->id)
->findOne();
if(!$relation) {
$relation = NewsletterOption::create();
$relation->newsletter_id = $newsletter->id;
$relation->option_field_id = $option_field->id;
}
$relation->value = serialize($data['segments']);
$relation->save();
$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();
@ -78,7 +102,9 @@ class SendingQueue {
$queue->save(); $queue->save();
return array( return array(
'result' => true, 'result' => true,
'data' => array(__('Newsletter was scheduled for sending.')) 'data' => array(
'message' => __('Your post notifications is activated.')
)
); );
} }
@ -111,7 +137,9 @@ class SendingQueue {
} else { } else {
return array( return array(
'result' => true, 'result' => true,
'data' => array($queue->id) 'data' => array(
'message' => __('The newsletter is being sent...')
)
); );
} }
} }

View File

@ -59,6 +59,7 @@
'trash': __('Trash'), 'trash': __('Trash'),
'edit': __('Edit'), 'edit': __('Edit'),
'notSentYet': __('Not sent yet.'), 'notSentYet': __('Not sent yet.'),
'scheduledFor': __('Scheduled for'),
'newsletterQueueCompleted': __('Sent to %$1d of %$2d.'), 'newsletterQueueCompleted': __('Sent to %$1d of %$2d.'),
'resume': __('Resume'), 'resume': __('Resume'),
'pause': __('Pause'), 'pause': __('Pause'),
@ -137,7 +138,6 @@
'replyToAddressPlaceholder': __('john.doe@email.com'), 'replyToAddressPlaceholder': __('john.doe@email.com'),
'newsletterUpdated': __('Newsletter successfully updated!'), 'newsletterUpdated': __('Newsletter successfully updated!'),
'newsletterAdded': __('Newsletter successfully added!'), 'newsletterAdded': __('Newsletter successfully added!'),
'newsletterIsBeingSent': __('The newsletter is being sent...'),
'newsletterSendingError': __('An error occurred while trying to send. <a href="%$1s">Check your settings.</a>'), 'newsletterSendingError': __('An error occurred while trying to send. <a href="%$1s">Check your settings.</a>'),
'finalNewsletterStep': __('Final step: last details'), 'finalNewsletterStep': __('Final step: last details'),
'saveDraftAndClose': __('Save as draft and close'), 'saveDraftAndClose': __('Save as draft and close'),