diff --git a/lib/Cron/Workers/SendingQueue/SendingQueue.php b/lib/Cron/Workers/SendingQueue/SendingQueue.php index 076a897f51..6648655230 100644 --- a/lib/Cron/Workers/SendingQueue/SendingQueue.php +++ b/lib/Cron/Workers/SendingQueue/SendingQueue.php @@ -35,10 +35,6 @@ class SendingQueue { $queue->delete(); continue; } - if(is_null($queue->newsletter_rendered_body)) { - $queue->newsletter_rendered_body = json_encode($newsletter->_transient->rendered_body); - $queue->save(); - } // configure mailer $this->mailer_task->configureMailer($newsletter); // get subscribers diff --git a/lib/Cron/Workers/SendingQueue/Tasks/Links.php b/lib/Cron/Workers/SendingQueue/Tasks/Links.php index 7cd66ca334..40e59bc795 100644 --- a/lib/Cron/Workers/SendingQueue/Tasks/Links.php +++ b/lib/Cron/Workers/SendingQueue/Tasks/Links.php @@ -7,23 +7,22 @@ use MailPoet\Util\Helpers; if(!defined('ABSPATH')) exit; class Links { - static function process($newsletter, $queue) { - list($rendered_body, $links) = - self::hashAndReplaceLinks($newsletter->_transient->rendered_body); + static function process($rendered_newsletter, $newsletter, $queue) { + list($rendered_newsletter, $links) = + self::hashAndReplaceLinks($rendered_newsletter); self::saveLinks($links, $newsletter, $queue); - $newsletter->_transient->rendered_body = $rendered_body; - return $newsletter; + return $rendered_newsletter; } - static function hashAndReplaceLinks($newsletter_rendered_body) { + static function hashAndReplaceLinks($rendered_newsletter) { // join HTML and TEXT rendered body into a text string - $content = Helpers::joinObject($newsletter_rendered_body); + $content = Helpers::joinObject($rendered_newsletter); list($content, $links) = NewsletterLinks::process($content); // split the processed body with hashed links back to HTML and TEXT - list($newsletter_rendered_body['html'], $newsletter_rendered_body['text']) + list($rendered_newsletter['html'], $rendered_newsletter['text']) = Helpers::splitObject($content); return array( - $newsletter_rendered_body, + $rendered_newsletter, $links ); } diff --git a/lib/Cron/Workers/SendingQueue/Tasks/Newsletter.php b/lib/Cron/Workers/SendingQueue/Tasks/Newsletter.php index 7fa17dd919..7afedd070e 100644 --- a/lib/Cron/Workers/SendingQueue/Tasks/Newsletter.php +++ b/lib/Cron/Workers/SendingQueue/Tasks/Newsletter.php @@ -29,39 +29,42 @@ class Newsletter { // if the newsletter was previously rendered, return it // otherwise, process/render it if(!is_null($queue->newsletter_rendered_body)) { - $newsletter->_transient->rendered_body = $queue->getRenderedNewsletterBody(); return $newsletter; } // if tracking is enabled, do additional processing if($this->tracking_enabled) { // hook to the newsletter post-processing filter and add tracking image $this->tracking_image_inserted = OpenTracking::addTrackingImage(); - // render newsletter - $newsletter->_transient->rendered_body = $newsletter->render(); + // render newsletter and save its + $rendered_newsletter = $newsletter->render(); // hash and save all links - $newsletter = LinksTask::process($newsletter, $queue); + $rendered_newsletter = LinksTask::process($rendered_newsletter, $newsletter, $queue); } else { // render newsletter - $newsletter->_transient->rendered_body = $newsletter->render(); + $rendered_newsletter = $newsletter->render(); } // check if this is a post notification and if it contains posts - $newsletter_contains_posts = strpos($newsletter->_transient->rendered_body['html'], 'data-post-id'); + $newsletter_contains_posts = strpos($rendered_newsletter['html'], 'data-post-id'); if($newsletter->type === 'notification' && !$newsletter_contains_posts) { return false; } // extract and save newsletter posts - PostsTask::extractAndSave($newsletter); + PostsTask::extractAndSave($rendered_newsletter, $newsletter); + // update queue with the rendered and pre-processed newsletter + $queue->newsletter_rendered_body = $rendered_newsletter; + $queue->save(); return $newsletter; } function prepareNewsletterForSending($newsletter, $subscriber, $queue) { // shortcodes and links will be replaced in the subject, html and text body // to speed the processing, join content into a continuous string + $rendered_newsletter = $queue->getNewsletterRenderedBody(); $prepared_newsletter = Helpers::joinObject( array( $newsletter->subject, - $newsletter->_transient->rendered_body['html'], - $newsletter->_transient->rendered_body['text'] + $rendered_newsletter['html'], + $rendered_newsletter['text'] ) ); $prepared_newsletter = ShortcodesTask::process( diff --git a/lib/Cron/Workers/SendingQueue/Tasks/Posts.php b/lib/Cron/Workers/SendingQueue/Tasks/Posts.php index 9f8c6419fc..6f66d9e352 100644 --- a/lib/Cron/Workers/SendingQueue/Tasks/Posts.php +++ b/lib/Cron/Workers/SendingQueue/Tasks/Posts.php @@ -7,13 +7,10 @@ use MailPoet\Models\NewsletterPost; if(!defined('ABSPATH')) exit; class Posts { - static function extractAndSave($newsletter) { - if(empty($newsletter->_transient->rendered_body['html']) || empty($newsletter->id)) { - return false; - } + static function extractAndSave($rendered_newsletter, $newsletter) { preg_match_all( '/data-post-id="(\d+)"/ism', - $newsletter->_transient->rendered_body['html'], + $rendered_newsletter['html'], $matched_posts_ids); $matched_posts_ids = $matched_posts_ids[1]; if(!count($matched_posts_ids)) { diff --git a/tests/unit/Cron/Workers/SendingQueue/Tasks/LinksTest.php b/tests/unit/Cron/Workers/SendingQueue/Tasks/LinksTest.php index 1ccc23b28b..4c058cb4d5 100644 --- a/tests/unit/Cron/Workers/SendingQueue/Tasks/LinksTest.php +++ b/tests/unit/Cron/Workers/SendingQueue/Tasks/LinksTest.php @@ -24,11 +24,11 @@ class LinkTaskTest extends MailPoetTest { } function testItCanHashAndReplaceLinks() { - $rendered_newsletter_body = array( + $rendered_newsletter = array( 'html' => 'Example Link', 'text' => 'Example Link' ); - $result = Links::hashAndReplaceLinks($rendered_newsletter_body); + $result = Links::hashAndReplaceLinks($rendered_newsletter); $processed_rendered_newsletter_body = $result[0]; $processed_and_hashed_links = $result[1]; expect($processed_rendered_newsletter_body['html']) @@ -42,15 +42,15 @@ class LinkTaskTest extends MailPoetTest { $newsletter = Newsletter::create(); $newsletter->type = Newsletter::TYPE_STANDARD; $newsletter->save(); - $newsletter->_transient->rendered_body = array( + $rendered_newsletter = array( 'html' => 'Example Link', 'text' => 'Example Link' ); $queue = (object)array('id' => 2); - $result = Links::process($newsletter, $queue); + $result = Links::process($rendered_newsletter, $newsletter, $queue); $newsletter_link = NewsletterLink::where('newsletter_id', $newsletter->id) ->findOne(); - expect($result->_transient->rendered_body['html'])->contains($newsletter_link->hash); + expect($result['html'])->contains($newsletter_link->hash); } function _after() { diff --git a/tests/unit/Cron/Workers/SendingQueue/Tasks/NewsletterTest.php b/tests/unit/Cron/Workers/SendingQueue/Tasks/NewsletterTest.php index 15f170ab46..9fc05c95f7 100644 --- a/tests/unit/Cron/Workers/SendingQueue/Tasks/NewsletterTest.php +++ b/tests/unit/Cron/Workers/SendingQueue/Tasks/NewsletterTest.php @@ -64,35 +64,39 @@ class NewsletterTaskTest extends MailPoetTest { expect($this->newsletter_task->getAndPreProcess($queue))->false(); } - function testItReturnsRenderedNewsletterBodyWhenItExists() { + function testItReturnsNewsletterObjectWhenRenderedNewssletterBodyExistsInTheQueue() { $queue = $this->queue; - $queue->newsletter_rendered_body = json_encode('Sample newsletter'); + $queue->newsletter_rendered_body = true; $result = $this->newsletter_task->getAndPreProcess($queue); - expect($result->_transient->rendered_body)->equals(json_decode($queue->newsletter_rendered_body)); + expect($result instanceof \MailPoet\Models\Newsletter)->true(); } function testItHashesLinksAndInsertsTrackingImageWhenTrackingIsEnabled() { $newsletter_task = $this->newsletter_task; $newsletter_task->tracking_enabled = true; - $result = $newsletter_task->getAndPreProcess($this->queue); + $newsletter_task->getAndPreProcess($this->queue); $link = NewsletterLink::where('newsletter_id', $this->newsletter->id) ->findOne(); - expect($result->_transient->rendered_body['html']) + $updated_queue = SendingQueue::findOne($this->queue->id); + $rendered_newsletter = $updated_queue->getNewsletterRenderedBody(); + expect($rendered_newsletter['html']) ->contains('[mailpoet_click_data]-' . $link->hash); - expect($result->_transient->rendered_body['html']) + expect($rendered_newsletter['html']) ->contains('[mailpoet_open_data]'); } function testItDoesNotHashLinksAndInsertTrackingCodeWhenTrackingIsDisabled() { $newsletter_task = $this->newsletter_task; $newsletter_task->tracking_enabled = false; - $result = $newsletter_task->getAndPreProcess($this->queue); + $newsletter_task->getAndPreProcess($this->queue); $link = NewsletterLink::where('newsletter_id', $this->newsletter->id) ->findOne(); expect($link)->false(); - expect($result->_transient->rendered_body['html']) + $updated_queue = SendingQueue::findOne($this->queue->id); + $rendered_newsletter = $updated_queue->getNewsletterRenderedBody(); + expect($rendered_newsletter['html']) ->notContains('[mailpoet_click_data]'); - expect($result->_transient->rendered_body['html']) + expect($rendered_newsletter['html']) ->notContains('[mailpoet_open_data]'); } diff --git a/tests/unit/Cron/Workers/SendingQueue/Tasks/PostsTest.php b/tests/unit/Cron/Workers/SendingQueue/Tasks/PostsTest.php index 2fb4bee7b4..f478f00fb9 100644 --- a/tests/unit/Cron/Workers/SendingQueue/Tasks/PostsTest.php +++ b/tests/unit/Cron/Workers/SendingQueue/Tasks/PostsTest.php @@ -7,34 +7,26 @@ use MailPoet\Models\NewsletterPost; if(!defined('ABSPATH')) exit; class PostsTaskTest extends MailPoetTest { - function testItFailsWhenNewsletterDoesNotExist() { - expect(PostsTask::extractAndSave($newsletter = false))->equals(false); - } - function testItFailsWhenNoPostsArePresent() { $newsletter = (object)array( 'id' => 1, - '_transient' => (object)array( - 'rendered_body' => array( - 'html' => 'Sample newsletter' - ) - ) ); - expect(PostsTask::extractAndSave($newsletter))->equals(false); + $rendered_newsletter = array( + 'html' => 'Sample newsletter' + ); + expect(PostsTask::extractAndSave($rendered_newsletter, $newsletter))->equals(false); } function testItCanExtractAndSavePosts() { $post_id = 10; $newsletter = (object)array( 'id' => 1, - 'type' => Newsletter::TYPE_STANDARD, - '_transient' => (object)array( - 'rendered_body' => array( - 'html' => 'sample post' - ) - ) + 'type' => Newsletter::TYPE_STANDARD ); - expect(PostsTask::extractAndSave($newsletter))->equals(true); + $rendered_newsletter = array( + 'html' => 'sample post' + ); + expect(PostsTask::extractAndSave($rendered_newsletter, $newsletter))->equals(true); $newsletter_post = NewsletterPost::where('newsletter_id', $newsletter->id) ->findOne(); expect($newsletter_post->post_id)->equals($post_id); @@ -45,14 +37,12 @@ class PostsTaskTest extends MailPoetTest { $newsletter = (object)array( 'id' => 2, 'parent_id' => 1, - 'type' => Newsletter::TYPE_NOTIFICATION_HISTORY, - '_transient' => (object)array( - 'rendered_body' => array( - 'html' => 'sample post' - ) - ) + 'type' => Newsletter::TYPE_NOTIFICATION_HISTORY ); - expect(PostsTask::extractAndSave($newsletter))->equals(true); + $rendered_newsletter = array( + 'html' => 'sample post' + ); + expect(PostsTask::extractAndSave($rendered_newsletter, $newsletter))->equals(true); $newsletter_post = NewsletterPost::where('newsletter_id', $newsletter->parent_id) ->findOne(); expect($newsletter_post->post_id)->equals($post_id);