Fix colors in rendering [MAILPOET-2569]

This commit is contained in:
wxa
2019-12-18 13:06:56 +03:00
committed by wxa
parent e864311faf
commit d84c45e5f1
5 changed files with 58 additions and 28 deletions

View File

@ -4,7 +4,7 @@ namespace MailPoet\Newsletter\Renderer;
use MailPoet\Newsletter\Editor\LayoutHelper; use MailPoet\Newsletter\Editor\LayoutHelper;
use MailPoet\Newsletter\Renderer\Blocks\Renderer as BlocksRenderer; use MailPoet\Newsletter\Renderer\Blocks\Renderer as BlocksRenderer;
use MailPoet\WP\Functions as WPFunctions; use MailPoet\WooCommerce\TransactionalEmails;
class Preprocessor { class Preprocessor {
const WC_HEADING_PLACEHOLDER = '[mailpet_woocommerce_heading_placeholder]'; const WC_HEADING_PLACEHOLDER = '[mailpet_woocommerce_heading_placeholder]';
@ -13,12 +13,12 @@ class Preprocessor {
/** @var BlocksRenderer */ /** @var BlocksRenderer */
private $blocks_renderer; private $blocks_renderer;
/** @var WPFunctions */ /** @var TransactionalEmails */
private $wp; private $transactional_emails;
public function __construct(BlocksRenderer $blocks_renderer, WPFunctions $wp) { public function __construct(BlocksRenderer $blocks_renderer, TransactionalEmails $transactional_emails) {
$this->blocks_renderer = $blocks_renderer; $this->blocks_renderer = $blocks_renderer;
$this->wp = $wp; $this->transactional_emails = $transactional_emails;
} }
/** /**
@ -46,10 +46,9 @@ class Preprocessor {
case 'automatedLatestContentLayout': case 'automatedLatestContentLayout':
return $this->blocks_renderer->automatedLatestContentTransformedPosts($block); return $this->blocks_renderer->automatedLatestContentTransformedPosts($block);
case 'woocommerceHeading': case 'woocommerceHeading':
$base_color = $this->wp->getOption('woocommerce_email_base_color'); $wc_email_settings = $this->transactional_emails->getWCEmailSettings();
$text_color = $this->wp->getOption('woocommerce_email_text_color'); $content = '<h1 style="color:' . $wc_email_settings['base_text_color'] . ';">' . self::WC_HEADING_PLACEHOLDER . '</h1>';
$content = '<h1 style="color:' . $text_color . ';">' . self::WC_HEADING_PLACEHOLDER . '</h1>'; return $this->placeholder($content, ['backgroundColor' => $wc_email_settings['base_color']]);
return $this->placeholder($content, ['backgroundColor' => $base_color]);
case 'woocommerceContent': case 'woocommerceContent':
return $this->placeholder(self::WC_CONTENT_PLACEHOLDER); return $this->placeholder(self::WC_CONTENT_PLACEHOLDER);
} }

View File

@ -3,17 +3,19 @@
namespace MailPoet\Newsletter\Renderer; namespace MailPoet\Newsletter\Renderer;
use MailPoet\Config\Env; use MailPoet\Config\Env;
use MailPoet\DI\ContainerWrapper;
use MailPoet\Models\Newsletter; use MailPoet\Models\Newsletter;
use MailPoet\Newsletter\Renderer\EscapeHelper as EHelper; use MailPoet\Newsletter\Renderer\EscapeHelper as EHelper;
use MailPoet\Services\Bridge; use MailPoet\Services\Bridge;
use MailPoet\Util\License\License; use MailPoet\Util\License\License;
use MailPoet\Util\pQuery\DomNode; use MailPoet\Util\pQuery\DomNode;
use MailPoet\WooCommerce\TransactionalEmails;
use MailPoet\WP\Functions as WPFunctions; use MailPoet\WP\Functions as WPFunctions;
class Renderer { class Renderer {
public $blocks_renderer; public $blocks_renderer;
public $columns_renderer; public $columns_renderer;
private $preprocessor; public $preprocessor;
public $CSS_inliner; public $CSS_inliner;
public $newsletter; public $newsletter;
public $preview; public $preview;
@ -31,7 +33,10 @@ class Renderer {
$this->preview = $preview; $this->preview = $preview;
$this->blocks_renderer = new Blocks\Renderer($this->newsletter); $this->blocks_renderer = new Blocks\Renderer($this->newsletter);
$this->columns_renderer = new Columns\Renderer(); $this->columns_renderer = new Columns\Renderer();
$this->preprocessor = new Preprocessor($this->blocks_renderer, WPFunctions::get()); $this->preprocessor = new Preprocessor(
$this->blocks_renderer,
ContainerWrapper::getInstance()->get(TransactionalEmails::class)
);
$this->CSS_inliner = new \MailPoetVendor\CSS(); $this->CSS_inliner = new \MailPoetVendor\CSS();
$this->template = file_get_contents(dirname(__FILE__) . '/' . self::NEWSLETTER_TEMPLATE); $this->template = file_get_contents(dirname(__FILE__) . '/' . self::NEWSLETTER_TEMPLATE);
$this->premium_activated = License::getLicense(); $this->premium_activated = License::getLicense();

View File

@ -26,8 +26,8 @@ class Renderer {
$this->html_after_content = ''; $this->html_after_content = '';
} }
public function render(Newsletter $newsletter) { public function render(Newsletter $newsletter, NewsletterRenderer $renderer = null) {
$renderer = new NewsletterRenderer($newsletter, true); $renderer = $renderer ?: new NewsletterRenderer($newsletter, true);
$html = explode(Preprocessor::WC_CONTENT_PLACEHOLDER, $renderer->render('html')); $html = explode(Preprocessor::WC_CONTENT_PLACEHOLDER, $renderer->render('html'));
$this->html_before_content = $html[0]; $this->html_before_content = $html[0];
$this->html_after_content = $html[1]; $this->html_after_content = $html[1];
@ -38,14 +38,14 @@ class Renderer {
throw new \Exception("You should call 'render' before 'getHTMLBeforeContent'"); throw new \Exception("You should call 'render' before 'getHTMLBeforeContent'");
} }
$html = str_replace(Preprocessor::WC_HEADING_PLACEHOLDER, $heading_text, $this->html_before_content); $html = str_replace(Preprocessor::WC_HEADING_PLACEHOLDER, $heading_text, $this->html_before_content);
return $html . '<div id="' . self::CONTENT_CONTAINER_ID . '">'; return $html . '<div id="' . self::CONTENT_CONTAINER_ID . '"><div id="body_content_inner">';
} }
public function getHTMLAfterContent() { public function getHTMLAfterContent() {
if (empty($this->html_after_content)) { if (empty($this->html_after_content)) {
throw new \Exception("You should call 'render' before 'getHTMLAfterContent'"); throw new \Exception("You should call 'render' before 'getHTMLAfterContent'");
} }
return '</div>' . $this->html_after_content; return '</div></div>' . $this->html_after_content;
} }
public function prefixCss($css) { public function prefixCss($css) {

View File

@ -5,6 +5,8 @@ namespace MailPoet\WooCommerce\TransactionalEmails;
use Codeception\Stub; use Codeception\Stub;
use MailPoet\Models\Newsletter; use MailPoet\Models\Newsletter;
use MailPoet\Newsletter\Editor\LayoutHelper as L; use MailPoet\Newsletter\Editor\LayoutHelper as L;
use MailPoet\Newsletter\Renderer\Preprocessor;
use MailPoet\Newsletter\Renderer\Renderer as NewsletterRenderer;
use MailPoetVendor\csstidy; use MailPoetVendor\csstidy;
class RendererTest extends \MailPoetTest { class RendererTest extends \MailPoetTest {
@ -35,7 +37,20 @@ class RendererTest extends \MailPoetTest {
function testGetHTMLBeforeContent() { function testGetHTMLBeforeContent() {
$renderer = new Renderer(new csstidy); $renderer = new Renderer(new csstidy);
$renderer->render($this->newsletter); $newsletter_renderer = new NewsletterRenderer($this->newsletter, true);
$newsletter_renderer->preprocessor = new Preprocessor(
$newsletter_renderer->blocks_renderer,
Stub::make(
\MailPoet\WooCommerce\TransactionalEmails::class,
[
'getWCEmailSettings' => [
'base_text_color' => '',
'base_color' => '',
],
]
)
);
$renderer->render($this->newsletter, $newsletter_renderer);
$html = $renderer->getHTMLBeforeContent('Heading Text'); $html = $renderer->getHTMLBeforeContent('Heading Text');
expect($html)->contains('Some text before heading'); expect($html)->contains('Some text before heading');
expect($html)->contains('Heading Text'); expect($html)->contains('Heading Text');
@ -45,7 +60,20 @@ class RendererTest extends \MailPoetTest {
function testGetHTMLAfterContent() { function testGetHTMLAfterContent() {
$renderer = new Renderer(new csstidy); $renderer = new Renderer(new csstidy);
$renderer->render($this->newsletter); $newsletter_renderer = new NewsletterRenderer($this->newsletter, true);
$newsletter_renderer->preprocessor = new Preprocessor(
$newsletter_renderer->blocks_renderer,
Stub::make(
\MailPoet\WooCommerce\TransactionalEmails::class,
[
'getWCEmailSettings' => [
'base_text_color' => '',
'base_color' => '',
],
]
)
);
$renderer->render($this->newsletter, $newsletter_renderer);
$html = $renderer->getHTMLAfterContent('Heading Text'); $html = $renderer->getHTMLAfterContent('Heading Text');
expect($html)->notContains('Some text before heading'); expect($html)->notContains('Some text before heading');
expect($html)->notContains('Heading Text'); expect($html)->notContains('Heading Text');

View File

@ -5,21 +5,19 @@ namespace MailPoet\Test\Newsletter;
use Codeception\Stub; use Codeception\Stub;
use MailPoet\Newsletter\Renderer\Blocks\Renderer; use MailPoet\Newsletter\Renderer\Blocks\Renderer;
use MailPoet\Newsletter\Renderer\Preprocessor; use MailPoet\Newsletter\Renderer\Preprocessor;
use MailPoet\WP\Functions; use MailPoet\WooCommerce\TransactionalEmails;
class PreprocessorTest extends \MailPoetUnitTest { class PreprocessorTest extends \MailPoetUnitTest {
function testProcessWooCommerceHeadingBlock() { function testProcessWooCommerceHeadingBlock() {
$renderer = Stub::make(Renderer::class); $renderer = Stub::make(Renderer::class);
$wp = Stub::make(new Functions, [ $transactional_emails = Stub::make(TransactionalEmails::class, [
'getOption' => function($name) { 'getWCEmailSettings' => [
if ($name === 'woocommerce_email_base_color') 'base_color' => '{base_color}',
return '{base_color}'; 'base_text_color' => '{base_text_color}',
if ($name === 'woocommerce_email_text_color') ],
return '{text_color}';
},
]); ]);
$preprocessor = new Preprocessor($renderer, $wp); $preprocessor = new Preprocessor($renderer, $transactional_emails);
expect($preprocessor->processBlock(['type' => 'woocommerceHeading']))->equals([[ expect($preprocessor->processBlock(['type' => 'woocommerceHeading']))->equals([[
'type' => 'container', 'type' => 'container',
'orientation' => 'horizontal', 'orientation' => 'horizontal',
@ -34,7 +32,7 @@ class PreprocessorTest extends \MailPoetUnitTest {
'blocks' => [ 'blocks' => [
[ [
'type' => 'text', 'type' => 'text',
'text' => '<h1 style="color:{text_color};">[mailpet_woocommerce_heading_placeholder]</h1>', 'text' => '<h1 style="color:{base_text_color};">[mailpet_woocommerce_heading_placeholder]</h1>',
], ],
], ],
], ],
@ -44,7 +42,7 @@ class PreprocessorTest extends \MailPoetUnitTest {
function testProcessWooCommerceContentBlock() { function testProcessWooCommerceContentBlock() {
$renderer = Stub::make(Renderer::class); $renderer = Stub::make(Renderer::class);
$preprocessor = new Preprocessor($renderer, new Functions); $preprocessor = new Preprocessor($renderer, Stub::make(TransactionalEmails::class));
expect($preprocessor->processBlock(['type' => 'woocommerceContent']))->equals([[ expect($preprocessor->processBlock(['type' => 'woocommerceContent']))->equals([[
'type' => 'container', 'type' => 'container',
'orientation' => 'horizontal', 'orientation' => 'horizontal',