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() {
$renderer = new Renderer($this);
return $renderer->render();
$renderer = new Renderer();
return $renderer->render($this);
}
public function wasScheduledForSubscriber($subscriberId) {

View File

@ -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()],

View File

@ -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,

View File

@ -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,

View File

@ -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];
}

View File

@ -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 <style> tag
expect(preg_match('/<style.*?important/s', $template['html']))->equals(1);
expect(preg_match('/mailpoet_template.*?important/s', $template['html']))->equals(0);

View File

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