diff --git a/assets/js/src/newsletters/listings/mixins.jsx b/assets/js/src/newsletters/listings/mixins.jsx index 0b6204a6b9..f3ecfde41a 100644 --- a/assets/js/src/newsletters/listings/mixins.jsx +++ b/assets/js/src/newsletters/listings/mixins.jsx @@ -8,7 +8,9 @@ const _QueueMixin = { MailPoet.Ajax.post({ endpoint: 'sendingQueue', action: 'pause', - data: newsletter.id + data: { + id: newsletter.id + } }).done(function() { jQuery('#resume_'+newsletter.id).show(); jQuery('#pause_'+newsletter.id).hide(); @@ -18,7 +20,9 @@ const _QueueMixin = { MailPoet.Ajax.post({ endpoint: 'sendingQueue', action: 'resume', - data: newsletter.id + data: { + id: newsletter.id + } }).done(function() { jQuery('#pause_'+newsletter.id).show(); jQuery('#resume_'+newsletter.id).hide(); diff --git a/assets/js/src/newsletters/send.jsx b/assets/js/src/newsletters/send.jsx index 9b3dbafeeb..c7a55fab3d 100644 --- a/assets/js/src/newsletters/send.jsx +++ b/assets/js/src/newsletters/send.jsx @@ -101,27 +101,31 @@ define( return MailPoet.Ajax.post({ endpoint: 'sendingQueue', action: 'add', - data: _.extend({}, this.state.item, { - newsletter_id: this.props.params.id, - }), + data: { + id: this.props.params.id + } }); } else { return response; } }).done((response) => { this.setState({ loading: false }); - - if(response.result === true) { - this.context.router.push(`/${ this.state.item.type || '' }`); - MailPoet.Notice.success(response.data.message); + // redirect to listing based on newsletter type + this.context.router.push(`/${ this.state.item.type || '' }`); + // display success message depending on newsletter type + if (this.state.item.type === 'welcome') { + MailPoet.Notice.success(MailPoet.I18n.t('welcomeEmailActivated')); + } else if (this.state.item.type === 'notification') { + MailPoet.Notice.success(MailPoet.I18n.t('postNotificationActivated')); } else { - if(response.errors) { - MailPoet.Notice.error(response.errors); - } else { - MailPoet.Notice.error( - MailPoet.I18n.t('newsletterSendingError').replace("%$1s", '?page=mailpoet-settings') - ); - } + MailPoet.Notice.success(MailPoet.I18n.t('newsletterBeingSent')); + } + }).fail((response) => { + if (response.errors.length > 0) { + MailPoet.Notice.error( + response.errors.map(function(error) { return error.message; }), + { scroll: true } + ); } }); } diff --git a/lib/API/Endpoints/SendingQueue.php b/lib/API/Endpoints/SendingQueue.php index 7d30e838a3..8632b46378 100644 --- a/lib/API/Endpoints/SendingQueue.php +++ b/lib/API/Endpoints/SendingQueue.php @@ -1,5 +1,7 @@ findOne($data['id']); + + if($newsletter === false) { + return $this->errorResponse(array( + APIError::NOT_FOUND => __('This newsletter does not exist.') + )); + } + // check that the sending method has been configured properly try { new Mailer(false); } catch(\Exception $e) { - return array( - 'result' => false, - 'errors' => array($e->getMessage()) - ); - } - - // check that the newsletter exists - $newsletter = Newsletter::filter('filterWithOptions') - ->findOne($data['newsletter_id']); - - if($newsletter === false) { - return array( - 'result' => false, - 'errors' => array(__('This newsletter does not exist')) - ); + return $this->errorResponse(array( + $e->getCode() => $e->getMessage() + )); } + // Automated newsletters (welcome & post notification) if($newsletter->type === Newsletter::TYPE_WELCOME || $newsletter->type === Newsletter::TYPE_NOTIFICATION ) { @@ -45,133 +48,127 @@ class SendingQueue { $errors = $result->getErrors(); if(!empty($errors)) { - return array( - 'result' => false, - 'errors' => $errors - ); + return $this->errorResponse($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' => $message - ) + return $this->successResponse( + Newsletter::findOne($newsletter->id)->asArray() ); } - } - - $queue = SendingQueueModel::whereNull('status') + } else { + // Standard newsletters + $queue = SendingQueueModel::whereNull('status') ->where('newsletter_id', $newsletter->id) ->findOne(); - if(!empty($queue)) { - return array( - 'result' => false, - 'errors' => array(__('This newsletter is already being sent')) - ); - } + if(!empty($queue)) { + return $this->errorResponse(array( + APIError::NOT_FOUND => __('This newsletter is already being sent.') + )); + } - $queue = SendingQueueModel::where('newsletter_id', $newsletter->id) - ->where('status', SendingQueueModel::STATUS_SCHEDULED) - ->findOne(); - if(!$queue) { - $queue = SendingQueueModel::create(); - $queue->newsletter_id = $newsletter->id; - } + $queue = SendingQueueModel::where('newsletter_id', $newsletter->id) + ->where('status', SendingQueueModel::STATUS_SCHEDULED) + ->findOne(); + if(!$queue) { + $queue = SendingQueueModel::create(); + $queue->newsletter_id = $newsletter->id; + } - if((bool)$newsletter->isScheduled) { - // set newsletter status - $newsletter->setStatus(Newsletter::STATUS_SCHEDULED); + if((bool)$newsletter->isScheduled) { + // set newsletter status + $newsletter->setStatus(Newsletter::STATUS_SCHEDULED); - // set queue status - $queue->status = SendingQueueModel::STATUS_SCHEDULED; - $queue->scheduled_at = Scheduler::scheduleFromTimestamp( - $newsletter->scheduledAt - ); - $queue->subscribers = null; - $queue->count_total = $queue->count_to_process = 0; + // set queue status + $queue->status = SendingQueueModel::STATUS_SCHEDULED; + $queue->scheduled_at = Scheduler::scheduleFromTimestamp( + $newsletter->scheduledAt + ); + $queue->subscribers = null; + $queue->count_total = $queue->count_to_process = 0; + } else { + $segments = $newsletter->segments()->findArray(); + $segment_ids = array_map(function($segment) { + return $segment['id']; + }, $segments); + $subscribers = Subscriber::getSubscribedInSegments($segment_ids) + ->findArray(); + $subscribers = Helpers::arrayColumn($subscribers, 'subscriber_id'); + $subscribers = array_unique($subscribers); + if(!count($subscribers)) { + return $this->errorResponse(array( + APIError::UNKNOWN => __('There are no subscribers in that list!') + )); + } + $queue->status = null; + $queue->scheduled_at = null; + $queue->subscribers = serialize( + array( + 'to_process' => $subscribers + ) + ); + $queue->count_total = $queue->count_to_process = count($subscribers); - $message = __('The newsletter has been scheduled'); - } else { - $segments = $newsletter->segments()->findArray(); - $segment_ids = array_map(function($segment) { - return $segment['id']; - }, $segments); - $subscribers = Subscriber::getSubscribedInSegments($segment_ids) - ->findArray(); - $subscribers = Helpers::arrayColumn($subscribers, 'subscriber_id'); - $subscribers = array_unique($subscribers); - if(!count($subscribers)) { - return array( - 'result' => false, - 'errors' => array(__('There are no subscribers in that list!')) + // set newsletter status + $newsletter->setStatus(Newsletter::STATUS_SENDING); + } + $queue->save(); + + $errors = $queue->getErrors(); + if(!empty($errors)) { + return $this->errorResponse($errors); + } else { + return $this->successResponse( + Newsletter::findOne($newsletter->id)->asArray() ); } - $queue->status = null; - $queue->scheduled_at = null; - $queue->subscribers = serialize( - array( - 'to_process' => $subscribers - ) - ); - $queue->count_total = $queue->count_to_process = count($subscribers); - - // set newsletter status - $newsletter->setStatus(Newsletter::STATUS_SENDING); - - $message = __('The newsletter is being sent...'); } - $queue->save(); + } - $errors = $queue->getErrors(); - if(!empty($errors)) { - return array( - 'result' => false, - 'errors' => $errors - ); + function pause($data = array()) { + $id = (isset($data['id']) ? (int)$data['id'] : null); + $newsletter = Newsletter::findOne($id); + + if($newsletter === false) { + return $this->errorResponse(array( + APIError::NOT_FOUND => __('This newsletter does not exist.') + )); } else { - return array( - 'result' => true, - 'data' => array( - 'message' => $message - ) - ); + $queue = $newsletter->getQueue(); + + if($queue === false) { + return $this->errorResponse(array( + APIError::UNKNOWN => __('This newsletter has not been sent yet.') + )); + } else { + $queue->pause(); + return $this->successResponse( + Newsletter::findOne($newsletter->id)->asArray() + ); + } } } - function pause($newsletter_id) { - $newsletter = Newsletter::findOne($newsletter_id); - $result = false; + function resume($data = array()) { + $id = (isset($data['id']) ? (int)$data['id'] : null); + $newsletter = Newsletter::findOne($id); - if($newsletter !== false) { + if($newsletter === false) { + return $this->errorResponse(array( + APIError::NOT_FOUND => __('This newsletter does not exist.') + )); + } else { $queue = $newsletter->getQueue(); - if($queue !== false) { - $result = $queue->pause(); + if($queue === false) { + return $this->errorResponse(array( + APIError::UNKNOWN => __('This newsletter has not been sent yet.') + )); + } else { + $queue->resume(); + return $this->successResponse( + Newsletter::findOne($newsletter->id)->asArray() + ); } } - - return array( - 'result' => $result - ); - } - - function resume($newsletter_id) { - $newsletter = Newsletter::findOne($newsletter_id); - $result = false; - - if($newsletter !== false) { - $queue = $newsletter->getQueue(); - - if($queue !== false) { - $result = $queue->resume(); - } - } - - return array( - 'result' => $result - ); } } diff --git a/views/newsletters.html b/views/newsletters.html index 624c40ea4a..d6af882c3f 100644 --- a/views/newsletters.html +++ b/views/newsletters.html @@ -210,19 +210,17 @@ 'saturdayMin': __('S'), 'next': __('Next'), 'previous': __('Previous'), - + 'newsletterBeingSent': __('The newsletter is being sent...'), 'welcomeEmailActivated': __('Your Welcome Email is now activated!'), 'welcomeEmailActivationFailed': __('Your Welcome Email could not be activated, please check the settings'), 'postNotificationActivated': __('Your post notification is now active!'), 'postNotificationActivationFailed': __('Your post notification could not be activated, check the settings'), - 'welcomeEventSegment': __('This newsletter is sent when someone subscribes to the list: "%$1s"'), 'welcomeEventWPUserAnyRole': __('This newsletter is sent when a new WordPress user is added to your site'), 'welcomeEventWPUserWithRole': __('This newsletter is sent when a new WordPress user with the role "%$1s" is added to your site'), 'sendingDelayHours': __('%$1d hour(s) later'), 'sendingDelayDays': __('%$1d day(s) later'), 'sendingDelayWeeks': __('%$1d week(s) later'), - 'sendDaily': __('Send daily at %$1s'), 'sendWeekly': __('Send weekly on %$1s at %$2s'), 'sendMonthly': __('Send monthly on the %$1s at %$2s'),