Preprocess transactional email newsletter
[MAILPOET-2286]
This commit is contained in:
committed by
Jack Kitterhing
parent
f56ced0ef5
commit
e1a8883935
@ -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,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
@ -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),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -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();
|
||||||
|
@ -2,6 +2,8 @@
|
|||||||
|
|
||||||
// phpcs:ignore
|
// phpcs:ignore
|
||||||
class WooCommerce {
|
class WooCommerce {
|
||||||
|
function mailer() {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
70
tests/unit/Newsletter/Renderer/PreprocessorTest.php
Normal file
70
tests/unit/Newsletter/Renderer/PreprocessorTest.php
Normal 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]',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
]]);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Reference in New Issue
Block a user