From c3686d9973ca8cd66585786df6871bee1e4b99ff Mon Sep 17 00:00:00 2001 From: Pavel Dohnal Date: Tue, 26 May 2020 10:36:20 +0200 Subject: [PATCH] Move data from constructor [MAILPOET-2899] --- lib/Models/Newsletter.php | 4 +-- .../Preview/SendPreviewController.php | 4 +-- lib/Newsletter/Renderer/Renderer.php | 27 +++++++------- .../ViewInBrowser/ViewInBrowserRenderer.php | 4 +-- .../TransactionalEmails/Renderer.php | 4 +-- tests/integration/Newsletter/RendererTest.php | 35 ++++++++----------- .../TransactionalEmails/RendererTest.php | 4 +-- 7 files changed, 37 insertions(+), 45 deletions(-) diff --git a/lib/Models/Newsletter.php b/lib/Models/Newsletter.php index 433fba7caf..f9c4ac81b8 100644 --- a/lib/Models/Newsletter.php +++ b/lib/Models/Newsletter.php @@ -570,8 +570,8 @@ class Newsletter extends Model { } public function render() { - $renderer = new Renderer($this); - return $renderer->render(); + $renderer = new Renderer(); + return $renderer->render($this); } public function wasScheduledForSubscriber($subscriberId) { diff --git a/lib/Newsletter/Preview/SendPreviewController.php b/lib/Newsletter/Preview/SendPreviewController.php index 137fbfb8bc..446b426603 100644 --- a/lib/Newsletter/Preview/SendPreviewController.php +++ b/lib/Newsletter/Preview/SendPreviewController.php @@ -38,8 +38,8 @@ class SendPreviewController { throw new SendPreviewException("Newsletter with ID '{$newsletter->getId()}' not found"); } - $renderer = new Renderer($newsletterModel, $preview = true); - $renderedNewsletter = $renderer->render(); + $renderer = new Renderer(); + $renderedNewsletter = $renderer->render($newsletterModel, $preview = true); $divider = '***MailPoet***'; $dataForShortcodes = array_merge( [$newsletter->getSubject()], diff --git a/lib/Newsletter/Renderer/Renderer.php b/lib/Newsletter/Renderer/Renderer.php index 664a17a008..6245135323 100644 --- a/lib/Newsletter/Renderer/Renderer.php +++ b/lib/Newsletter/Renderer/Renderer.php @@ -17,20 +17,13 @@ class Renderer { public $columnsRenderer; public $preprocessor; public $cSSInliner; - public $newsletter; - public $preview; public $premiumActivated; public $mssActivated; private $template; const NEWSLETTER_TEMPLATE = 'Template.html'; const FILTER_POST_PROCESS = 'mailpoet_rendering_post_process'; - /** - * @param \MailPoet\Models\Newsletter|array $newsletter - */ - public function __construct($newsletter, $preview = false) { - $this->newsletter = ($newsletter instanceof Newsletter) ? $newsletter->asArray() : $newsletter; - $this->preview = $preview; + public function __construct() { $this->blocksRenderer = ContainerWrapper::getInstance()->get(Blocks\Renderer::class); $this->columnsRenderer = new Columns\Renderer(); $this->preprocessor = new Preprocessor( @@ -44,8 +37,11 @@ class Renderer { $this->mssActivated = $bridge->isMPSendingServiceEnabled(); } - public function render($type = false) { - $newsletter = $this->newsletter; + /** + * @param \MailPoet\Models\Newsletter|array $newsletter + */ + public function render($newsletter, $preview = false, $type = false) { + $newsletter = ($newsletter instanceof Newsletter) ? $newsletter->asArray() : $newsletter; $body = (is_array($newsletter['body'])) ? $newsletter['body'] : []; @@ -56,12 +52,12 @@ class Renderer { ? $body['globalStyles'] : []; - if (!$this->premiumActivated && !$this->mssActivated && !$this->preview) { + if (!$this->premiumActivated && !$this->mssActivated && !$preview) { $content = $this->addMailpoetLogoContentBlock($content, $styles); } $content = $this->preprocessor->process($newsletter, $content); - $renderedBody = $this->renderBody($content); + $renderedBody = $this->renderBody($newsletter, $content); $renderedStyles = $this->renderStyles($styles); $customFontsLinks = StylesHelper::getCustomFontsLinks($styles); @@ -89,18 +85,19 @@ class Renderer { } /** + * @param array $newsletter * @param array $content * @return string */ - private function renderBody($content) { + private function renderBody($newsletter, $content) { $blocks = (array_key_exists('blocks', $content)) ? $content['blocks'] : []; $_this = $this; - $renderedContent = array_map(function($contentBlock) use($_this) { + $renderedContent = array_map(function($contentBlock) use($_this, $newsletter) { - $columnsData = $_this->blocksRenderer->render($_this->newsletter, $contentBlock); + $columnsData = $_this->blocksRenderer->render($newsletter, $contentBlock); return $_this->columnsRenderer->render( $contentBlock, diff --git a/lib/Newsletter/ViewInBrowser/ViewInBrowserRenderer.php b/lib/Newsletter/ViewInBrowser/ViewInBrowserRenderer.php index 52579e7964..59795899f8 100644 --- a/lib/Newsletter/ViewInBrowser/ViewInBrowserRenderer.php +++ b/lib/Newsletter/ViewInBrowser/ViewInBrowserRenderer.php @@ -47,8 +47,8 @@ class ViewInBrowserRenderer { $newsletterBody = str_replace(Links::DATA_TAG_OPEN, '', $newsletterBody); } } else { - $renderer = new Renderer($newsletter, $wpUserPreview); - $newsletterBody = $renderer->render('html'); + $renderer = new Renderer(); + $newsletterBody = $renderer->render($newsletter, $wpUserPreview, 'html'); } $shortcodes = new Shortcodes( $newsletter, diff --git a/lib/WooCommerce/TransactionalEmails/Renderer.php b/lib/WooCommerce/TransactionalEmails/Renderer.php index 640f9a3beb..ab19cba663 100644 --- a/lib/WooCommerce/TransactionalEmails/Renderer.php +++ b/lib/WooCommerce/TransactionalEmails/Renderer.php @@ -27,8 +27,8 @@ class Renderer { } public function render(Newsletter $newsletter, NewsletterRenderer $renderer = null) { - $renderer = $renderer ?: new NewsletterRenderer($newsletter, true); - $html = explode(Preprocessor::WC_CONTENT_PLACEHOLDER, $renderer->render('html')); + $renderer = $renderer ?: new NewsletterRenderer(); + $html = explode(Preprocessor::WC_CONTENT_PLACEHOLDER, $renderer->render($newsletter, true, 'html')); $this->htmlBeforeContent = $html[0]; $this->htmlAfterContent = $html[1]; } diff --git a/tests/integration/Newsletter/RendererTest.php b/tests/integration/Newsletter/RendererTest.php index 5b940eac3a..59b6a9c3ae 100644 --- a/tests/integration/Newsletter/RendererTest.php +++ b/tests/integration/Newsletter/RendererTest.php @@ -33,14 +33,13 @@ class RendererTest extends \MailPoetTest { 'type' => 'standard', 'status' => 'active', ]; - $this->renderer = new Renderer($this->newsletter); + $this->renderer = new Renderer(); $this->columnRenderer = new ColumnRenderer(); $this->dOMParser = new \pQuery(); } public function testItRendersCompleteNewsletter() { - $this->renderer->preview = true; // do not render logo - $template = $this->renderer->render(); + $template = $this->renderer->render($this->newsletter, true);// do not render logo expect(isset($template['html']))->true(); expect(isset($template['text']))->true(); $DOM = $this->dOMParser->parseStr($template['html']); @@ -549,48 +548,45 @@ class RendererTest extends \MailPoetTest { } public function testItSetsSubject() { - $this->renderer->newsletter['body'] = json_decode(Fixtures::get('newsletter_body_template'), true); - $template = $this->renderer->render(); + $this->newsletter['body'] = json_decode(Fixtures::get('newsletter_body_template'), true); + $template = $this->renderer->render($this->newsletter); $DOM = $this->dOMParser->parseStr($template['html']); $subject = trim($DOM('title')->text()); expect($subject)->equals($this->newsletter['subject']); } public function testItSetsPreheader() { - $this->renderer->newsletter['body'] = json_decode(Fixtures::get('newsletter_body_template'), true); - $template = $this->renderer->render(); + $this->newsletter['body'] = json_decode(Fixtures::get('newsletter_body_template'), true); + $template = $this->renderer->render($this->newsletter); $DOM = $this->dOMParser->parseStr($template['html']); $preheader = trim($DOM('td.mailpoet_preheader')->text()); expect($preheader)->equals($this->newsletter['preheader']); } public function testItDoesNotAddMailpoetLogoWhenPremiumIsActive() { - $this->renderer->preview = false; $this->renderer->mssActivated = false; $this->renderer->premiumActivated = true; - $this->renderer->newsletter['body'] = json_decode(Fixtures::get('newsletter_body_template'), true); - $template = $this->renderer->render(); + $this->newsletter['body'] = json_decode(Fixtures::get('newsletter_body_template'), true); + $template = $this->renderer->render($this->newsletter, false); expect($template['html'])->notContains('mailpoet_logo_newsletter.png'); } public function testItDoesNotAddMailpoetLogoWhenMSSIsActive() { - $this->renderer->preview = false; $this->renderer->premiumActivated = false; $this->renderer->mssActivated = true; - $this->renderer->newsletter['body'] = json_decode(Fixtures::get('newsletter_body_template'), true); - $template = $this->renderer->render(); + $this->newsletter['body'] = json_decode(Fixtures::get('newsletter_body_template'), true); + $template = $this->renderer->render($this->newsletter, false); expect($template['html'])->notContains('mailpoet_logo_newsletter.png'); } public function testItDoesNotAddMailpoetLogoWhenPreviewIsEnabled() { $this->renderer->mssActivated = false; $this->renderer->premiumActivated = false; - $this->renderer->preview = true; - $this->renderer->newsletter['body'] = json_decode(Fixtures::get('newsletter_body_template'), true); - $template = $this->renderer->render(); + $this->newsletter['body'] = json_decode(Fixtures::get('newsletter_body_template'), true); + $template = $this->renderer->render($this->newsletter, true); expect($template['html'])->notContains('mailpoet_logo_newsletter.png'); } @@ -598,15 +594,14 @@ class RendererTest extends \MailPoetTest { $this->renderer->newsletter['body'] = json_decode(Fixtures::get('newsletter_body_template'), true); $this->renderer->mssActivated = false; $this->renderer->premiumActivated = false; - $this->renderer->preview = false; - $template = $this->renderer->render(); + $template = $this->renderer->render($this->newsletter, false); expect($template['html'])->contains('mailpoet_logo_newsletter.png'); } public function testItPostProcessesTemplate() { - $this->renderer->newsletter['body'] = json_decode(Fixtures::get('newsletter_body_template'), true); - $template = $this->renderer->render(); + $this->newsletter['body'] = json_decode(Fixtures::get('newsletter_body_template'), true); + $template = $this->renderer->render($this->newsletter); // !important should be stripped from everywhere except from with the