Create WC content preprocessor
[MAILPOET-3638]
This commit is contained in:
@@ -374,6 +374,7 @@ class ContainerConfigurator implements IContainerConfigurator {
|
||||
$container->autowire(\MailPoet\WooCommerce\TransactionalEmails::class)->setPublic(true);
|
||||
$container->autowire(\MailPoet\WooCommerce\TransactionalEmails\Template::class)->setPublic(true);
|
||||
$container->autowire(\MailPoet\WooCommerce\TransactionalEmails\Renderer::class)->setPublic(true);
|
||||
$container->autowire(\MailPoet\WooCommerce\TransactionalEmails\ContentPreprocessor::class)->setPublic(true);
|
||||
// WordPress
|
||||
$container->autowire(\MailPoet\WP\Emoji::class)->setPublic(true);
|
||||
$container->autowire(\MailPoet\WP\Functions::class)->setPublic(true);
|
||||
|
@@ -3,16 +3,12 @@
|
||||
namespace MailPoet\Newsletter\Renderer;
|
||||
|
||||
use MailPoet\Entities\NewsletterEntity;
|
||||
use MailPoet\Newsletter\Editor\LayoutHelper;
|
||||
use MailPoet\Newsletter\Renderer\Blocks\AbandonedCartContent;
|
||||
use MailPoet\Newsletter\Renderer\Blocks\AutomatedLatestContentBlock;
|
||||
use MailPoet\Tasks\Sending as SendingTask;
|
||||
use MailPoet\WooCommerce\TransactionalEmails;
|
||||
use MailPoet\WooCommerce\TransactionalEmails\ContentPreprocessor;
|
||||
|
||||
class Preprocessor {
|
||||
const WC_HEADING_PLACEHOLDER = '[mailpoet_woocommerce_heading_placeholder]';
|
||||
const WC_CONTENT_PLACEHOLDER = '[mailpoet_woocommerce_content_placeholder]';
|
||||
|
||||
const WC_HEADING_BEFORE = '
|
||||
<table width="100%" border="0" cellpadding="0" cellspacing="0" style="border-spacing:0;mso-table-lspace:0;mso-table-rspace:0">
|
||||
<tr>
|
||||
@@ -28,17 +24,17 @@ class Preprocessor {
|
||||
/** @var AutomatedLatestContentBlock */
|
||||
private $automatedLatestContent;
|
||||
|
||||
/** @var TransactionalEmails */
|
||||
private $transactionalEmails;
|
||||
/** @var ContentPreprocessor */
|
||||
private $wooCommerceContentPreprocessor;
|
||||
|
||||
public function __construct(
|
||||
AbandonedCartContent $abandonedCartContent,
|
||||
AutomatedLatestContentBlock $automatedLatestContent,
|
||||
TransactionalEmails $transactionalEmails
|
||||
ContentPreprocessor $wooCommerceContentPreprocessor
|
||||
) {
|
||||
$this->abandonedCartContent = $abandonedCartContent;
|
||||
$this->automatedLatestContent = $automatedLatestContent;
|
||||
$this->transactionalEmails = $transactionalEmails;
|
||||
$this->wooCommerceContentPreprocessor = $wooCommerceContentPreprocessor;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -68,34 +64,10 @@ class Preprocessor {
|
||||
case 'automatedLatestContentLayout':
|
||||
return $this->automatedLatestContent->render($newsletter, $block);
|
||||
case 'woocommerceHeading':
|
||||
$wcEmailSettings = $this->transactionalEmails->getWCEmailSettings();
|
||||
$content = self::WC_HEADING_BEFORE . '<h1 style="color:' . $wcEmailSettings['base_text_color'] . ';">' . self::WC_HEADING_PLACEHOLDER . '</h1>' . self::WC_HEADING_AFTER;
|
||||
return $this->renderTextBlock($content, ['backgroundColor' => $wcEmailSettings['base_color']]);
|
||||
return $this->wooCommerceContentPreprocessor->preprocessHeader();
|
||||
case 'woocommerceContent':
|
||||
return $this->renderPlaceholderBlock(self::WC_CONTENT_PLACEHOLDER);
|
||||
return $this->wooCommerceContentPreprocessor->preprocessContent();
|
||||
}
|
||||
return [$block];
|
||||
}
|
||||
|
||||
private function renderTextBlock(string $text, array $styles = []): array {
|
||||
return [
|
||||
LayoutHelper::row([
|
||||
LayoutHelper::col([[
|
||||
'type' => 'text',
|
||||
'text' => $text,
|
||||
]]),
|
||||
], $styles),
|
||||
];
|
||||
}
|
||||
|
||||
private function renderPlaceholderBlock(string $placeholder): array {
|
||||
return [
|
||||
LayoutHelper::row([
|
||||
LayoutHelper::col([[
|
||||
'type' => 'placeholder',
|
||||
'placeholder' => $placeholder,
|
||||
]]),
|
||||
]),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
61
lib/WooCommerce/TransactionalEmails/ContentPreprocessor.php
Normal file
61
lib/WooCommerce/TransactionalEmails/ContentPreprocessor.php
Normal file
@@ -0,0 +1,61 @@
|
||||
<?php
|
||||
|
||||
namespace MailPoet\WooCommerce\TransactionalEmails;
|
||||
|
||||
use MailPoet\Newsletter\Editor\LayoutHelper;
|
||||
use MailPoet\WooCommerce\TransactionalEmails;
|
||||
|
||||
class ContentPreprocessor {
|
||||
public const WC_HEADING_PLACEHOLDER = '[mailpoet_woocommerce_heading_placeholder]';
|
||||
public const WC_CONTENT_PLACEHOLDER = '[mailpoet_woocommerce_content_placeholder]';
|
||||
|
||||
public const WC_HEADING_BEFORE = '
|
||||
<table width="100%" border="0" cellpadding="0" cellspacing="0" style="border-spacing:0;mso-table-lspace:0;mso-table-rspace:0">
|
||||
<tr>
|
||||
<td class="mailpoet_text" valign="top" style="padding-top:20px;padding-bottom:20px;word-break:break-word;word-wrap:break-word;">';
|
||||
public const WC_HEADING_AFTER = '
|
||||
</td>
|
||||
</tr>
|
||||
</table>';
|
||||
|
||||
/** @var TransactionalEmails */
|
||||
private $transactionalEmails;
|
||||
|
||||
public function __construct(
|
||||
TransactionalEmails $transactionalEmails
|
||||
) {
|
||||
$this->transactionalEmails = $transactionalEmails;
|
||||
}
|
||||
|
||||
public function preprocessContent() {
|
||||
return $this->renderPlaceholderBlock(self::WC_CONTENT_PLACEHOLDER);
|
||||
}
|
||||
|
||||
public function preprocessHeader() {
|
||||
$wcEmailSettings = $this->transactionalEmails->getWCEmailSettings();
|
||||
$content = self::WC_HEADING_BEFORE . '<h1 style="color:' . $wcEmailSettings['base_text_color'] . ';">' . self::WC_HEADING_PLACEHOLDER . '</h1>' . self::WC_HEADING_AFTER;
|
||||
return $this->renderTextBlock($content, ['backgroundColor' => $wcEmailSettings['base_color']]);
|
||||
}
|
||||
|
||||
private function renderTextBlock(string $text, array $styles = []): array {
|
||||
return [
|
||||
LayoutHelper::row([
|
||||
LayoutHelper::col([[
|
||||
'type' => 'text',
|
||||
'text' => $text,
|
||||
]]),
|
||||
], $styles),
|
||||
];
|
||||
}
|
||||
|
||||
private function renderPlaceholderBlock(string $placeholder): array {
|
||||
return [
|
||||
LayoutHelper::row([
|
||||
LayoutHelper::col([[
|
||||
'type' => 'placeholder',
|
||||
'placeholder' => $placeholder,
|
||||
]]),
|
||||
]),
|
||||
];
|
||||
}
|
||||
}
|
@@ -3,7 +3,6 @@
|
||||
namespace MailPoet\WooCommerce\TransactionalEmails;
|
||||
|
||||
use MailPoet\Models\Newsletter;
|
||||
use MailPoet\Newsletter\Renderer\Preprocessor;
|
||||
use MailPoet\Newsletter\Renderer\Renderer as NewsletterRenderer;
|
||||
use MailPoetVendor\csstidy;
|
||||
use MailPoetVendor\csstidy_print;
|
||||
@@ -34,7 +33,7 @@ class Renderer {
|
||||
}
|
||||
|
||||
public function render(Newsletter $newsletter, ?string $subject = null) {
|
||||
$html = explode(Preprocessor::WC_CONTENT_PLACEHOLDER, $this->renderer->renderAsPreview($newsletter, 'html', $subject));
|
||||
$html = explode(ContentPreprocessor::WC_CONTENT_PLACEHOLDER, $this->renderer->renderAsPreview($newsletter, 'html', $subject));
|
||||
$this->htmlBeforeContent = $html[0];
|
||||
$this->htmlAfterContent = $html[1];
|
||||
}
|
||||
@@ -43,7 +42,7 @@ class Renderer {
|
||||
if (empty($this->htmlBeforeContent)) {
|
||||
throw new \Exception("You should call 'render' before 'getHTMLBeforeContent'");
|
||||
}
|
||||
$html = str_replace(Preprocessor::WC_HEADING_PLACEHOLDER, $headingText, $this->htmlBeforeContent);
|
||||
$html = str_replace(ContentPreprocessor::WC_HEADING_PLACEHOLDER, $headingText, $this->htmlBeforeContent);
|
||||
return $html . '<div id="' . self::CONTENT_CONTAINER_ID . '"><div id="body_content"><div id="body_content_inner"><table style="width: 100%"><tr><td>';
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user