From 25d33da7020dc8aa719b3b30e4b90af76478aabd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Jakes=CC=8C?= Date: Fri, 8 May 2020 14:50:04 +0200 Subject: [PATCH] Use exceptions instead of error responses [MAILPOET-2900] --- lib/Newsletter/NewsletterSaveController.php | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/lib/Newsletter/NewsletterSaveController.php b/lib/Newsletter/NewsletterSaveController.php index 19b16ab44f..8749065246 100644 --- a/lib/Newsletter/NewsletterSaveController.php +++ b/lib/Newsletter/NewsletterSaveController.php @@ -4,6 +4,7 @@ namespace MailPoet\Newsletter; use MailPoet\Cron\Workers\SendingQueue\Tasks\Newsletter as NewsletterQueueTask; use MailPoet\DI\ContainerWrapper; +use MailPoet\InvalidStateException; use MailPoet\Models\Newsletter; use MailPoet\Models\NewsletterOption; use MailPoet\Models\NewsletterOptionField; @@ -15,6 +16,7 @@ use MailPoet\Newsletter\Url as NewsletterUrl; use MailPoet\NewsletterTemplates\NewsletterTemplatesRepository; use MailPoet\Services\AuthorizedEmailsController; use MailPoet\Settings\SettingsController; +use MailPoet\UnexpectedValueException; use MailPoet\WP\Emoji; use MailPoet\WP\Functions as WPFunctions; @@ -82,12 +84,16 @@ class NewsletterSaveController { } $newsletter = Newsletter::createOrUpdate($data); $errors = $newsletter->getErrors(); + if (!empty($errors)) { + throw UnexpectedValueException::create()->withErrors($errors); + } - if (!empty($errors)) return $this->badRequest($errors); // Re-fetch newsletter to sync changes made by DB // updated_at column use CURRENT_TIMESTAMP for update and this change is not updated automatically by ORM $newsletter = Newsletter::findOne($newsletter->id); - if(!$newsletter instanceof Newsletter) return $this->errorResponse(); + if (!$newsletter) { + throw new InvalidStateException(); + } if (!empty($segments)) { NewsletterSegment::where('newsletter_id', $newsletter->id) @@ -128,7 +134,9 @@ class NewsletterSaveController { } // reload newsletter with updated options $newsletter = Newsletter::filter('filterWithOptions', $newsletter->type)->findOne($newsletter->id); - if(!$newsletter instanceof Newsletter) return $this->errorResponse(); + if (!$newsletter) { + throw new InvalidStateException(); + } // if this is a post notification, process newsletter options and update its schedule if ($newsletter->type === Newsletter::TYPE_NOTIFICATION) { // generate the new schedule from options and get the new "next run" date