Move data from constructor

[MAILPOET-2899]
This commit is contained in:
Pavel Dohnal
2020-05-26 10:36:20 +02:00
committed by Veljko V
parent be631bd549
commit c3686d9973
7 changed files with 37 additions and 45 deletions

View File

@ -570,8 +570,8 @@ class Newsletter extends Model {
} }
public function render() { public function render() {
$renderer = new Renderer($this); $renderer = new Renderer();
return $renderer->render(); return $renderer->render($this);
} }
public function wasScheduledForSubscriber($subscriberId) { public function wasScheduledForSubscriber($subscriberId) {

View File

@ -38,8 +38,8 @@ class SendPreviewController {
throw new SendPreviewException("Newsletter with ID '{$newsletter->getId()}' not found"); throw new SendPreviewException("Newsletter with ID '{$newsletter->getId()}' not found");
} }
$renderer = new Renderer($newsletterModel, $preview = true); $renderer = new Renderer();
$renderedNewsletter = $renderer->render(); $renderedNewsletter = $renderer->render($newsletterModel, $preview = true);
$divider = '***MailPoet***'; $divider = '***MailPoet***';
$dataForShortcodes = array_merge( $dataForShortcodes = array_merge(
[$newsletter->getSubject()], [$newsletter->getSubject()],

View File

@ -17,20 +17,13 @@ class Renderer {
public $columnsRenderer; public $columnsRenderer;
public $preprocessor; public $preprocessor;
public $cSSInliner; public $cSSInliner;
public $newsletter;
public $preview;
public $premiumActivated; public $premiumActivated;
public $mssActivated; public $mssActivated;
private $template; private $template;
const NEWSLETTER_TEMPLATE = 'Template.html'; const NEWSLETTER_TEMPLATE = 'Template.html';
const FILTER_POST_PROCESS = 'mailpoet_rendering_post_process'; const FILTER_POST_PROCESS = 'mailpoet_rendering_post_process';
/** public function __construct() {
* @param \MailPoet\Models\Newsletter|array $newsletter
*/
public function __construct($newsletter, $preview = false) {
$this->newsletter = ($newsletter instanceof Newsletter) ? $newsletter->asArray() : $newsletter;
$this->preview = $preview;
$this->blocksRenderer = ContainerWrapper::getInstance()->get(Blocks\Renderer::class); $this->blocksRenderer = ContainerWrapper::getInstance()->get(Blocks\Renderer::class);
$this->columnsRenderer = new Columns\Renderer(); $this->columnsRenderer = new Columns\Renderer();
$this->preprocessor = new Preprocessor( $this->preprocessor = new Preprocessor(
@ -44,8 +37,11 @@ class Renderer {
$this->mssActivated = $bridge->isMPSendingServiceEnabled(); $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'])) $body = (is_array($newsletter['body']))
? $newsletter['body'] ? $newsletter['body']
: []; : [];
@ -56,12 +52,12 @@ class Renderer {
? $body['globalStyles'] ? $body['globalStyles']
: []; : [];
if (!$this->premiumActivated && !$this->mssActivated && !$this->preview) { if (!$this->premiumActivated && !$this->mssActivated && !$preview) {
$content = $this->addMailpoetLogoContentBlock($content, $styles); $content = $this->addMailpoetLogoContentBlock($content, $styles);
} }
$content = $this->preprocessor->process($newsletter, $content); $content = $this->preprocessor->process($newsletter, $content);
$renderedBody = $this->renderBody($content); $renderedBody = $this->renderBody($newsletter, $content);
$renderedStyles = $this->renderStyles($styles); $renderedStyles = $this->renderStyles($styles);
$customFontsLinks = StylesHelper::getCustomFontsLinks($styles); $customFontsLinks = StylesHelper::getCustomFontsLinks($styles);
@ -89,18 +85,19 @@ class Renderer {
} }
/** /**
* @param array $newsletter
* @param array $content * @param array $content
* @return string * @return string
*/ */
private function renderBody($content) { private function renderBody($newsletter, $content) {
$blocks = (array_key_exists('blocks', $content)) $blocks = (array_key_exists('blocks', $content))
? $content['blocks'] ? $content['blocks']
: []; : [];
$_this = $this; $_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( return $_this->columnsRenderer->render(
$contentBlock, $contentBlock,

View File

@ -47,8 +47,8 @@ class ViewInBrowserRenderer {
$newsletterBody = str_replace(Links::DATA_TAG_OPEN, '', $newsletterBody); $newsletterBody = str_replace(Links::DATA_TAG_OPEN, '', $newsletterBody);
} }
} else { } else {
$renderer = new Renderer($newsletter, $wpUserPreview); $renderer = new Renderer();
$newsletterBody = $renderer->render('html'); $newsletterBody = $renderer->render($newsletter, $wpUserPreview, 'html');
} }
$shortcodes = new Shortcodes( $shortcodes = new Shortcodes(
$newsletter, $newsletter,

View File

@ -27,8 +27,8 @@ class Renderer {
} }
public function render(Newsletter $newsletter, NewsletterRenderer $renderer = null) { public function render(Newsletter $newsletter, NewsletterRenderer $renderer = null) {
$renderer = $renderer ?: new NewsletterRenderer($newsletter, true); $renderer = $renderer ?: new NewsletterRenderer();
$html = explode(Preprocessor::WC_CONTENT_PLACEHOLDER, $renderer->render('html')); $html = explode(Preprocessor::WC_CONTENT_PLACEHOLDER, $renderer->render($newsletter, true, 'html'));
$this->htmlBeforeContent = $html[0]; $this->htmlBeforeContent = $html[0];
$this->htmlAfterContent = $html[1]; $this->htmlAfterContent = $html[1];
} }

View File

@ -33,14 +33,13 @@ class RendererTest extends \MailPoetTest {
'type' => 'standard', 'type' => 'standard',
'status' => 'active', 'status' => 'active',
]; ];
$this->renderer = new Renderer($this->newsletter); $this->renderer = new Renderer();
$this->columnRenderer = new ColumnRenderer(); $this->columnRenderer = new ColumnRenderer();
$this->dOMParser = new \pQuery(); $this->dOMParser = new \pQuery();
} }
public function testItRendersCompleteNewsletter() { public function testItRendersCompleteNewsletter() {
$this->renderer->preview = true; // do not render logo $template = $this->renderer->render($this->newsletter, true);// do not render logo
$template = $this->renderer->render();
expect(isset($template['html']))->true(); expect(isset($template['html']))->true();
expect(isset($template['text']))->true(); expect(isset($template['text']))->true();
$DOM = $this->dOMParser->parseStr($template['html']); $DOM = $this->dOMParser->parseStr($template['html']);
@ -549,48 +548,45 @@ class RendererTest extends \MailPoetTest {
} }
public function testItSetsSubject() { public function testItSetsSubject() {
$this->renderer->newsletter['body'] = json_decode(Fixtures::get('newsletter_body_template'), true); $this->newsletter['body'] = json_decode(Fixtures::get('newsletter_body_template'), true);
$template = $this->renderer->render(); $template = $this->renderer->render($this->newsletter);
$DOM = $this->dOMParser->parseStr($template['html']); $DOM = $this->dOMParser->parseStr($template['html']);
$subject = trim($DOM('title')->text()); $subject = trim($DOM('title')->text());
expect($subject)->equals($this->newsletter['subject']); expect($subject)->equals($this->newsletter['subject']);
} }
public function testItSetsPreheader() { public function testItSetsPreheader() {
$this->renderer->newsletter['body'] = json_decode(Fixtures::get('newsletter_body_template'), true); $this->newsletter['body'] = json_decode(Fixtures::get('newsletter_body_template'), true);
$template = $this->renderer->render(); $template = $this->renderer->render($this->newsletter);
$DOM = $this->dOMParser->parseStr($template['html']); $DOM = $this->dOMParser->parseStr($template['html']);
$preheader = trim($DOM('td.mailpoet_preheader')->text()); $preheader = trim($DOM('td.mailpoet_preheader')->text());
expect($preheader)->equals($this->newsletter['preheader']); expect($preheader)->equals($this->newsletter['preheader']);
} }
public function testItDoesNotAddMailpoetLogoWhenPremiumIsActive() { public function testItDoesNotAddMailpoetLogoWhenPremiumIsActive() {
$this->renderer->preview = false;
$this->renderer->mssActivated = false; $this->renderer->mssActivated = false;
$this->renderer->premiumActivated = true; $this->renderer->premiumActivated = true;
$this->renderer->newsletter['body'] = json_decode(Fixtures::get('newsletter_body_template'), true); $this->newsletter['body'] = json_decode(Fixtures::get('newsletter_body_template'), true);
$template = $this->renderer->render(); $template = $this->renderer->render($this->newsletter, false);
expect($template['html'])->notContains('mailpoet_logo_newsletter.png'); expect($template['html'])->notContains('mailpoet_logo_newsletter.png');
} }
public function testItDoesNotAddMailpoetLogoWhenMSSIsActive() { public function testItDoesNotAddMailpoetLogoWhenMSSIsActive() {
$this->renderer->preview = false;
$this->renderer->premiumActivated = false; $this->renderer->premiumActivated = false;
$this->renderer->mssActivated = true; $this->renderer->mssActivated = true;
$this->renderer->newsletter['body'] = json_decode(Fixtures::get('newsletter_body_template'), true); $this->newsletter['body'] = json_decode(Fixtures::get('newsletter_body_template'), true);
$template = $this->renderer->render(); $template = $this->renderer->render($this->newsletter, false);
expect($template['html'])->notContains('mailpoet_logo_newsletter.png'); expect($template['html'])->notContains('mailpoet_logo_newsletter.png');
} }
public function testItDoesNotAddMailpoetLogoWhenPreviewIsEnabled() { public function testItDoesNotAddMailpoetLogoWhenPreviewIsEnabled() {
$this->renderer->mssActivated = false; $this->renderer->mssActivated = false;
$this->renderer->premiumActivated = false; $this->renderer->premiumActivated = false;
$this->renderer->preview = true;
$this->renderer->newsletter['body'] = json_decode(Fixtures::get('newsletter_body_template'), true); $this->newsletter['body'] = json_decode(Fixtures::get('newsletter_body_template'), true);
$template = $this->renderer->render(); $template = $this->renderer->render($this->newsletter, true);
expect($template['html'])->notContains('mailpoet_logo_newsletter.png'); 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->newsletter['body'] = json_decode(Fixtures::get('newsletter_body_template'), true);
$this->renderer->mssActivated = false; $this->renderer->mssActivated = false;
$this->renderer->premiumActivated = 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'); expect($template['html'])->contains('mailpoet_logo_newsletter.png');
} }
public function testItPostProcessesTemplate() { public function testItPostProcessesTemplate() {
$this->renderer->newsletter['body'] = json_decode(Fixtures::get('newsletter_body_template'), true); $this->newsletter['body'] = json_decode(Fixtures::get('newsletter_body_template'), true);
$template = $this->renderer->render(); $template = $this->renderer->render($this->newsletter);
// !important should be stripped from everywhere except from with the <style> tag // !important should be stripped from everywhere except from with the <style> tag
expect(preg_match('/<style.*?important/s', $template['html']))->equals(1); expect(preg_match('/<style.*?important/s', $template['html']))->equals(1);
expect(preg_match('/mailpoet_template.*?important/s', $template['html']))->equals(0); expect(preg_match('/mailpoet_template.*?important/s', $template['html']))->equals(0);

View File

@ -37,7 +37,7 @@ class RendererTest extends \MailPoetTest {
public function testGetHTMLBeforeContent() { public function testGetHTMLBeforeContent() {
$renderer = new Renderer(new csstidy); $renderer = new Renderer(new csstidy);
$newsletterRenderer = new NewsletterRenderer($this->newsletter, true); $newsletterRenderer = new NewsletterRenderer();
$newsletterRenderer->preprocessor = new Preprocessor( $newsletterRenderer->preprocessor = new Preprocessor(
$newsletterRenderer->blocksRenderer, $newsletterRenderer->blocksRenderer,
Stub::make( Stub::make(
@ -60,7 +60,7 @@ class RendererTest extends \MailPoetTest {
public function testGetHTMLAfterContent() { public function testGetHTMLAfterContent() {
$renderer = new Renderer(new csstidy); $renderer = new Renderer(new csstidy);
$newsletterRenderer = new NewsletterRenderer($this->newsletter, true); $newsletterRenderer = new NewsletterRenderer();
$newsletterRenderer->preprocessor = new Preprocessor( $newsletterRenderer->preprocessor = new Preprocessor(
$newsletterRenderer->blocksRenderer, $newsletterRenderer->blocksRenderer,
Stub::make( Stub::make(