diff --git a/lib/Router/Endpoints/ViewInBrowser.php b/lib/Router/Endpoints/ViewInBrowser.php index 470a8297c4..1229d1a68a 100644 --- a/lib/Router/Endpoints/ViewInBrowser.php +++ b/lib/Router/Endpoints/ViewInBrowser.php @@ -52,17 +52,22 @@ class ViewInBrowser { ) return false; } else if(!$data->subscriber && !empty($data->preview)) { // if this is a preview and subscriber does not exist, - // attemp to set subscriber to the current logged-in WP user + // attempt to set subscriber to the current logged-in WP user $data->subscriber = Subscriber::getCurrentWPUser(); } // if newsletter hash is not provided but newsletter ID is defined then subscriber must exist if(empty($data->newsletter_hash) && $data->newsletter_id && !$data->subscriber) return false; - // queue is optional; if defined, get it - $data->queue = (!empty($data->queue_id)) ? - SendingQueue::findOne($data->queue_id) : - SendingQueue::where('newsletter_id', $data->newsletter->id)->findOne(); + // queue is optional; try to find it if it's not defined and this is not a welcome email + if($data->newsletter->type !== Newsletter::TYPE_WELCOME) { + $data->queue = (!empty($data->queue_id)) ? + SendingQueue::findOne($data->queue_id) : + SendingQueue::where('newsletter_id', $data->newsletter->id) + ->findOne(); + } else { + $data->queue = false; + } // allow users with 'manage_options' permission to preview any newsletter if(!empty($data->preview) && current_user_can(Env::$required_permission) diff --git a/tests/unit/Router/Endpoints/ViewInBrowserTest.php b/tests/unit/Router/Endpoints/ViewInBrowserTest.php index 1484887cc2..83bb379db8 100644 --- a/tests/unit/Router/Endpoints/ViewInBrowserTest.php +++ b/tests/unit/Router/Endpoints/ViewInBrowserTest.php @@ -158,7 +158,26 @@ class ViewInBrowserRouterTest extends MailPoetTest { expect($result->subscriber->id)->equals(1); } - function testItProcessesBrowserPreviewData() { + function testItGetsOrFindsQueueWhenItIsNotAWelcomeEmail() { + $data = (object)$this->browser_preview_data; + // queue will be found when not defined + $data->queue_id = null; + $result = $this->view_in_browser->_validateBrowserPreviewData($data); + expect($result->queue->id)->equals($this->queue->id); + // queue will be found when defined + $data->queue_id = $this->queue->id; + $result = $this->view_in_browser->_validateBrowserPreviewData($data); + expect($result->queue->id)->equals($this->queue->id); + // queue will not be found when it is a welcome email + $newsletter = $this->newsletter; + $newsletter->type = Newsletter::TYPE_WELCOME; + $newsletter->save(); + $data->queue_id = null; + $result = $this->view_in_browser->_validateBrowserPreviewData($data); + expect($result->queue)->false(); + } + + function testItProcessesBrowserPreviewData() { $processed_data = $this->view_in_browser->_processBrowserPreviewData($this->browser_preview_data); expect($processed_data->queue->id)->equals($this->queue->id); expect($processed_data->subscriber->id)->equals($this->subscriber->id);