diff --git a/assets/js/src/newsletters/listings/notification.jsx b/assets/js/src/newsletters/listings/notification.jsx index a7fef6194b..5a277c0627 100644 --- a/assets/js/src/newsletters/listings/notification.jsx +++ b/assets/js/src/newsletters/listings/notification.jsx @@ -189,7 +189,7 @@ class NewsletterListNotification extends React.Component { // force refresh of listing so that groups are updated this.forceUpdate(); }).fail((response) => { - MailPoet.Notice.error(MailPoet.I18n.t('postNotificationActivationFailed')); + MailPoet.Notice.showApiErrorNotice(response); // reset value to actual newsletter's status e.target.value = response.status; diff --git a/assets/js/src/newsletters/listings/welcome.jsx b/assets/js/src/newsletters/listings/welcome.jsx index 50bc3f26b0..89a0145cf3 100644 --- a/assets/js/src/newsletters/listings/welcome.jsx +++ b/assets/js/src/newsletters/listings/welcome.jsx @@ -184,7 +184,7 @@ class NewsletterListWelcome extends React.Component { // force refresh of listing so that groups are updated this.forceUpdate(); }).fail((response) => { - MailPoet.Notice.error(MailPoet.I18n.t('welcomeEmailActivationFailed')); + MailPoet.Notice.showApiErrorNotice(response); // reset value to actual newsletter's status e.target.value = response.status; diff --git a/lib/Models/Newsletter.php b/lib/Models/Newsletter.php index a3f052bbb1..9a87b184ce 100644 --- a/lib/Models/Newsletter.php +++ b/lib/Models/Newsletter.php @@ -344,6 +344,17 @@ class Newsletter extends Model { } function setStatus($status = null) { + if ($status === self::STATUS_ACTIVE) { + if (!$this->body || empty(json_decode($this->body))) { + $this->setError( + Helpers::replaceLinkTags( + __('This is an empty email without any content and it cannot be sent. Please update [link]the email[/link].'), + 'admin.php?page=mailpoet-newsletter-editor&id=' . $this->id + ) + ); + return $this; + } + } if (in_array($status, [ self::STATUS_DRAFT, self::STATUS_SCHEDULED, diff --git a/tests/integration/Models/NewsletterTest.php b/tests/integration/Models/NewsletterTest.php index a1258cf243..dd606d2c26 100644 --- a/tests/integration/Models/NewsletterTest.php +++ b/tests/integration/Models/NewsletterTest.php @@ -899,6 +899,7 @@ class NewsletterTest extends \MailPoetTest { foreach ($newsletters_with_activation as $type) { $newsletter = Newsletter::createOrUpdate([ 'type' => $type, + 'body' => '["x", "y"]', ]); $task = ScheduledTask::createOrUpdate([ 'status' => ScheduledTask::STATUS_PAUSED, @@ -914,6 +915,17 @@ class NewsletterTest extends \MailPoetTest { } } + function testBlocksActivationOfEmptyNewsletter() { + $newsletter = Newsletter::createOrUpdate([ + 'type' => Newsletter::TYPE_NOTIFICATION, + 'body' => '[]', + 'status' => Newsletter::STATUS_DRAFT, + ]); + $newsletter = $newsletter->setStatus(Newsletter::STATUS_ACTIVE); + expect($newsletter->status)->equals(Newsletter::STATUS_DRAFT); + expect($newsletter->getErrors())->notEmpty(); + } + function _after() { \ORM::raw_execute('TRUNCATE ' . NewsletterOption::$_table); \ORM::raw_execute('TRUNCATE ' . Newsletter::$_table);