Preprocess transactional email newsletter

[MAILPOET-2286]
This commit is contained in:
Amine Ben hammou
2019-11-14 19:38:47 +01:00
committed by Jack Kitterhing
parent f56ced0ef5
commit e1a8883935
5 changed files with 96 additions and 18 deletions

View File

@ -3,28 +3,26 @@
namespace MailPoet\Newsletter\Editor; namespace MailPoet\Newsletter\Editor;
class LayoutHelper { class LayoutHelper {
static function row($blocks) { static function row($blocks, $styles = []) {
if (empty($styles['backgroundColor'])) {
$styles['backgroundColor'] = 'transparent';
}
return [ return [
'type' => 'container', 'type' => 'container',
'orientation' => 'horizontal', 'orientation' => 'horizontal',
'styles' => [ 'styles' => ['block' => $styles],
'block' => [
'backgroundColor' => 'transparent',
],
],
'blocks' => $blocks, 'blocks' => $blocks,
]; ];
} }
static function col($blocks) { static function col($blocks, $styles = []) {
if (empty($styles['backgroundColor'])) {
$styles['backgroundColor'] = 'transparent';
}
return [ return [
'type' => 'container', 'type' => 'container',
'orientation' => 'vertical', 'orientation' => 'vertical',
'styles' => [ 'styles' => ['block' => $styles],
'block' => [
'backgroundColor' => 'transparent',
],
],
'blocks' => $blocks, 'blocks' => $blocks,
]; ];
} }

View File

@ -4,6 +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;
class Preprocessor { class Preprocessor {
const WC_HEADING_PLACEHOLDER = '[mailpet_woocommerce_heading_placeholder]'; const WC_HEADING_PLACEHOLDER = '[mailpet_woocommerce_heading_placeholder]';
@ -12,8 +13,12 @@ class Preprocessor {
/** @var BlocksRenderer */ /** @var BlocksRenderer */
private $blocks_renderer; 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->blocks_renderer = $blocks_renderer;
$this->wp = $wp;
} }
/** /**
@ -41,7 +46,10 @@ class Preprocessor {
case 'automatedLatestContentLayout': case 'automatedLatestContentLayout':
return $this->blocks_renderer->automatedLatestContentTransformedPosts($block); return $this->blocks_renderer->automatedLatestContentTransformedPosts($block);
case 'woocommerceHeading': 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 = '<h1 style="color:' . $text_color . ';">' . self::WC_HEADING_PLACEHOLDER . '</h1>';
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);
} }
@ -49,17 +57,17 @@ class Preprocessor {
} }
/** /**
* @param array $block * @param string $text
* @return array * @return array
*/ */
private function placeholder($text) { private function placeholder($text, $styles = []) {
return [ return [
LayoutHelper::row([ LayoutHelper::row([
LayoutHelper::col([[ LayoutHelper::col([[
'type' => 'text', 'type' => 'text',
'text' => $text, 'text' => $text,
]]), ]]),
]), ], $styles),
]; ];
} }
} }

View File

@ -31,7 +31,7 @@ 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); $this->preprocessor = new Preprocessor($this->blocks_renderer, WPFunctions::get());
$this->CSS_inliner = new \MailPoet\Util\CSS(); $this->CSS_inliner = new \MailPoet\Util\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

@ -2,6 +2,8 @@
// phpcs:ignore // phpcs:ignore
class WooCommerce { class WooCommerce {
function mailer() {
}
} }
/** /**

View File

@ -0,0 +1,70 @@
<?php
namespace MailPoet\Test\Newsletter;
use Codeception\Stub;
use MailPoet\Newsletter\Renderer\Blocks\Renderer;
use MailPoet\Newsletter\Renderer\Preprocessor;
use MailPoet\WP\Functions;
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}';
},
]);
$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' => '<h1 style="color:{text_color};">[mailpet_woocommerce_heading_placeholder]</h1>',
],
],
],
],
]]);
}
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]',
],
],
],
],
]]);
}
}