diff --git a/lib/Newsletter/Editor/LayoutHelper.php b/lib/Newsletter/Editor/LayoutHelper.php index ef84020c46..3f25e4cdd2 100644 --- a/lib/Newsletter/Editor/LayoutHelper.php +++ b/lib/Newsletter/Editor/LayoutHelper.php @@ -3,28 +3,26 @@ namespace MailPoet\Newsletter\Editor; class LayoutHelper { - static function row($blocks) { + static function row($blocks, $styles = []) { + if (empty($styles['backgroundColor'])) { + $styles['backgroundColor'] = 'transparent'; + } return [ 'type' => 'container', 'orientation' => 'horizontal', - 'styles' => [ - 'block' => [ - 'backgroundColor' => 'transparent', - ], - ], + 'styles' => ['block' => $styles], 'blocks' => $blocks, ]; } - static function col($blocks) { + static function col($blocks, $styles = []) { + if (empty($styles['backgroundColor'])) { + $styles['backgroundColor'] = 'transparent'; + } return [ 'type' => 'container', 'orientation' => 'vertical', - 'styles' => [ - 'block' => [ - 'backgroundColor' => 'transparent', - ], - ], + 'styles' => ['block' => $styles], 'blocks' => $blocks, ]; } diff --git a/lib/Newsletter/Renderer/Preprocessor.php b/lib/Newsletter/Renderer/Preprocessor.php index 931fce245a..5fb913041f 100644 --- a/lib/Newsletter/Renderer/Preprocessor.php +++ b/lib/Newsletter/Renderer/Preprocessor.php @@ -4,6 +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; class Preprocessor { const WC_HEADING_PLACEHOLDER = '[mailpet_woocommerce_heading_placeholder]'; @@ -12,8 +13,12 @@ class Preprocessor { /** @var BlocksRenderer */ private $blocks_renderer; - public function __construct(BlocksRenderer $blocks_renderer) { + /** @var WPFunctions */ + private $wp; + + public function __construct(BlocksRenderer $blocks_renderer, WPFunctions $wp) { $this->blocks_renderer = $blocks_renderer; + $this->wp = $wp; } /** @@ -41,7 +46,10 @@ class Preprocessor { case 'automatedLatestContentLayout': return $this->blocks_renderer->automatedLatestContentTransformedPosts($block); case 'woocommerceHeading': - return $this->placeholder(self::WC_HEADING_PLACEHOLDER); + $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]); case 'woocommerceContent': return $this->placeholder(self::WC_CONTENT_PLACEHOLDER); } @@ -49,17 +57,17 @@ class Preprocessor { } /** - * @param array $block + * @param string $text * @return array */ - private function placeholder($text) { + private function placeholder($text, $styles = []) { return [ LayoutHelper::row([ LayoutHelper::col([[ 'type' => 'text', 'text' => $text, ]]), - ]), + ], $styles), ]; } } \ No newline at end of file diff --git a/lib/Newsletter/Renderer/Renderer.php b/lib/Newsletter/Renderer/Renderer.php index 17df35db30..319180a6fd 100644 --- a/lib/Newsletter/Renderer/Renderer.php +++ b/lib/Newsletter/Renderer/Renderer.php @@ -31,7 +31,7 @@ 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); + $this->preprocessor = new Preprocessor($this->blocks_renderer, WPFunctions::get()); $this->CSS_inliner = new \MailPoet\Util\CSS(); $this->template = file_get_contents(dirname(__FILE__) . '/' . self::NEWSLETTER_TEMPLATE); $this->premium_activated = License::getLicense(); diff --git a/tasks/phpstan/woocommerce.php b/tasks/phpstan/woocommerce.php index 180cee8e66..04f08ce850 100644 --- a/tasks/phpstan/woocommerce.php +++ b/tasks/phpstan/woocommerce.php @@ -2,6 +2,8 @@ // phpcs:ignore class WooCommerce { + function mailer() { + } } /** diff --git a/tests/unit/Newsletter/Renderer/PreprocessorTest.php b/tests/unit/Newsletter/Renderer/PreprocessorTest.php new file mode 100644 index 0000000000..33816a2d3f --- /dev/null +++ b/tests/unit/Newsletter/Renderer/PreprocessorTest.php @@ -0,0 +1,70 @@ + function($name) { + if ($name === 'woocommerce_email_base_color') + return '{base_color}'; + if ($name === 'woocommerce_email_text_color') + return '{text_color}'; + }, + ]); + $preprocessor = new Preprocessor($renderer, $wp); + expect($preprocessor->processBlock(['type' => 'woocommerceHeading']))->equals([[ + 'type' => 'container', + 'orientation' => 'horizontal', + 'styles' => [ + 'block' => ['backgroundColor' => '{base_color}'], + ], + 'blocks' => [ + [ + 'type' => 'container', + 'orientation' => 'vertical', + 'styles' => ['block' => ['backgroundColor' => 'transparent']], + 'blocks' => [ + [ + 'type' => 'text', + 'text' => '

[mailpet_woocommerce_heading_placeholder]

', + ], + ], + ], + ], + ]]); + } + + function testProcessWooCommerceContentBlock() { + $renderer = Stub::make(Renderer::class); + $preprocessor = new Preprocessor($renderer, new Functions); + expect($preprocessor->processBlock(['type' => 'woocommerceContent']))->equals([[ + 'type' => 'container', + 'orientation' => 'horizontal', + 'styles' => [ + 'block' => ['backgroundColor' => 'transparent'], + ], + 'blocks' => [ + [ + 'type' => 'container', + 'orientation' => 'vertical', + 'styles' => ['block' => ['backgroundColor' => 'transparent']], + 'blocks' => [ + [ + 'type' => 'text', + 'text' => '[mailpet_woocommerce_content_placeholder]', + ], + ], + ], + ], + ]]); + } + +} \ No newline at end of file