diff --git a/lib/Newsletter/Renderer/Preprocessor.php b/lib/Newsletter/Renderer/Preprocessor.php index 5fb913041f..514f99eba6 100644 --- a/lib/Newsletter/Renderer/Preprocessor.php +++ b/lib/Newsletter/Renderer/Preprocessor.php @@ -4,7 +4,7 @@ namespace MailPoet\Newsletter\Renderer; use MailPoet\Newsletter\Editor\LayoutHelper; use MailPoet\Newsletter\Renderer\Blocks\Renderer as BlocksRenderer; -use MailPoet\WP\Functions as WPFunctions; +use MailPoet\WooCommerce\TransactionalEmails; class Preprocessor { const WC_HEADING_PLACEHOLDER = '[mailpet_woocommerce_heading_placeholder]'; @@ -13,12 +13,12 @@ class Preprocessor { /** @var BlocksRenderer */ private $blocks_renderer; - /** @var WPFunctions */ - private $wp; + /** @var TransactionalEmails */ + 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->wp = $wp; + $this->transactional_emails = $transactional_emails; } /** @@ -46,10 +46,9 @@ class Preprocessor { case 'automatedLatestContentLayout': return $this->blocks_renderer->automatedLatestContentTransformedPosts($block); case 'woocommerceHeading': - $base_color = $this->wp->getOption('woocommerce_email_base_color'); - $text_color = $this->wp->getOption('woocommerce_email_text_color'); - $content = '

' . self::WC_HEADING_PLACEHOLDER . '

'; - return $this->placeholder($content, ['backgroundColor' => $base_color]); + $wc_email_settings = $this->transactional_emails->getWCEmailSettings(); + $content = '

' . self::WC_HEADING_PLACEHOLDER . '

'; + return $this->placeholder($content, ['backgroundColor' => $wc_email_settings['base_color']]); case 'woocommerceContent': return $this->placeholder(self::WC_CONTENT_PLACEHOLDER); } diff --git a/lib/Newsletter/Renderer/Renderer.php b/lib/Newsletter/Renderer/Renderer.php index 0620ecf112..eb9a7625e7 100644 --- a/lib/Newsletter/Renderer/Renderer.php +++ b/lib/Newsletter/Renderer/Renderer.php @@ -3,17 +3,19 @@ namespace MailPoet\Newsletter\Renderer; use MailPoet\Config\Env; +use MailPoet\DI\ContainerWrapper; use MailPoet\Models\Newsletter; use MailPoet\Newsletter\Renderer\EscapeHelper as EHelper; use MailPoet\Services\Bridge; use MailPoet\Util\License\License; use MailPoet\Util\pQuery\DomNode; +use MailPoet\WooCommerce\TransactionalEmails; use MailPoet\WP\Functions as WPFunctions; class Renderer { public $blocks_renderer; public $columns_renderer; - private $preprocessor; + public $preprocessor; public $CSS_inliner; public $newsletter; public $preview; @@ -31,7 +33,10 @@ class Renderer { $this->preview = $preview; $this->blocks_renderer = new Blocks\Renderer($this->newsletter); $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->template = file_get_contents(dirname(__FILE__) . '/' . self::NEWSLETTER_TEMPLATE); $this->premium_activated = License::getLicense(); diff --git a/lib/WooCommerce/TransactionalEmails/Renderer.php b/lib/WooCommerce/TransactionalEmails/Renderer.php index 85f93fa0c9..5afc71f29c 100644 --- a/lib/WooCommerce/TransactionalEmails/Renderer.php +++ b/lib/WooCommerce/TransactionalEmails/Renderer.php @@ -26,8 +26,8 @@ class Renderer { $this->html_after_content = ''; } - public function render(Newsletter $newsletter) { - $renderer = new NewsletterRenderer($newsletter, true); + public function render(Newsletter $newsletter, NewsletterRenderer $renderer = null) { + $renderer = $renderer ?: new NewsletterRenderer($newsletter, true); $html = explode(Preprocessor::WC_CONTENT_PLACEHOLDER, $renderer->render('html')); $this->html_before_content = $html[0]; $this->html_after_content = $html[1]; @@ -38,14 +38,14 @@ class Renderer { throw new \Exception("You should call 'render' before 'getHTMLBeforeContent'"); } $html = str_replace(Preprocessor::WC_HEADING_PLACEHOLDER, $heading_text, $this->html_before_content); - return $html . '
'; + return $html . '
'; } public function getHTMLAfterContent() { if (empty($this->html_after_content)) { throw new \Exception("You should call 'render' before 'getHTMLAfterContent'"); } - return '
' . $this->html_after_content; + return '
' . $this->html_after_content; } public function prefixCss($css) { diff --git a/tests/integration/WooCommerce/TransactionalEmails/RendererTest.php b/tests/integration/WooCommerce/TransactionalEmails/RendererTest.php index 29b64f00cf..248faa14d3 100644 --- a/tests/integration/WooCommerce/TransactionalEmails/RendererTest.php +++ b/tests/integration/WooCommerce/TransactionalEmails/RendererTest.php @@ -5,6 +5,8 @@ namespace MailPoet\WooCommerce\TransactionalEmails; use Codeception\Stub; use MailPoet\Models\Newsletter; use MailPoet\Newsletter\Editor\LayoutHelper as L; +use MailPoet\Newsletter\Renderer\Preprocessor; +use MailPoet\Newsletter\Renderer\Renderer as NewsletterRenderer; use MailPoetVendor\csstidy; class RendererTest extends \MailPoetTest { @@ -35,7 +37,20 @@ class RendererTest extends \MailPoetTest { function testGetHTMLBeforeContent() { $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'); expect($html)->contains('Some text before heading'); expect($html)->contains('Heading Text'); @@ -45,7 +60,20 @@ class RendererTest extends \MailPoetTest { function testGetHTMLAfterContent() { $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'); expect($html)->notContains('Some text before heading'); expect($html)->notContains('Heading Text'); diff --git a/tests/unit/Newsletter/Renderer/PreprocessorTest.php b/tests/unit/Newsletter/Renderer/PreprocessorTest.php index 33816a2d3f..0f884a15ac 100644 --- a/tests/unit/Newsletter/Renderer/PreprocessorTest.php +++ b/tests/unit/Newsletter/Renderer/PreprocessorTest.php @@ -5,21 +5,19 @@ namespace MailPoet\Test\Newsletter; use Codeception\Stub; use MailPoet\Newsletter\Renderer\Blocks\Renderer; use MailPoet\Newsletter\Renderer\Preprocessor; -use MailPoet\WP\Functions; +use MailPoet\WooCommerce\TransactionalEmails; class PreprocessorTest extends \MailPoetUnitTest { function testProcessWooCommerceHeadingBlock() { $renderer = Stub::make(Renderer::class); - $wp = Stub::make(new Functions, [ - 'getOption' => function($name) { - if ($name === 'woocommerce_email_base_color') - return '{base_color}'; - if ($name === 'woocommerce_email_text_color') - return '{text_color}'; - }, + $transactional_emails = Stub::make(TransactionalEmails::class, [ + 'getWCEmailSettings' => [ + 'base_color' => '{base_color}', + 'base_text_color' => '{base_text_color}', + ], ]); - $preprocessor = new Preprocessor($renderer, $wp); + $preprocessor = new Preprocessor($renderer, $transactional_emails); expect($preprocessor->processBlock(['type' => 'woocommerceHeading']))->equals([[ 'type' => 'container', 'orientation' => 'horizontal', @@ -34,7 +32,7 @@ class PreprocessorTest extends \MailPoetUnitTest { 'blocks' => [ [ 'type' => 'text', - 'text' => '

[mailpet_woocommerce_heading_placeholder]

', + 'text' => '

[mailpet_woocommerce_heading_placeholder]

', ], ], ], @@ -44,7 +42,7 @@ class PreprocessorTest extends \MailPoetUnitTest { function testProcessWooCommerceContentBlock() { $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([[ 'type' => 'container', 'orientation' => 'horizontal',