Add dummy email body renderer for new editor

[MAILPOET-5365]
This commit is contained in:
Rostislav Wolny
2023-06-23 16:36:53 +02:00
committed by Aschepikov
parent ba23b5f224
commit fc2bbda9a2
6 changed files with 57 additions and 4 deletions

View File

@@ -309,6 +309,7 @@ class ContainerConfigurator implements IContainerConfigurator {
$container->autowire(\MailPoet\CustomFields\CustomFieldsRepository::class)->setPublic(true);
// Email Editor
$container->autowire(\MailPoet\EmailEditor\Core\EmailEditor::class)->setPublic(true);
$container->autowire(\MailPoet\EmailEditor\Core\Renderer\BodyRenderer::class)->setPublic(true);
$container->autowire(\MailPoet\EmailEditor\Integration\EmailEditor::class)->setPublic(true);
$container->autowire(\MailPoet\EmailEditor\Integration\EmailApiController::class)->setPublic(true);
// Features

View File

@@ -0,0 +1,13 @@
<?php declare(strict_types = 1);
namespace MailPoet\EmailEditor\Core\Renderer;
class BodyRenderer {
public function renderBody(\WP_Post $emailPost): string {
// @todo Parse blocks \WP_Block_Parser
// @todo We need to wrap top level blocks which are not in columns into a column
// @todo Add rendering of columns (inspire by/reuse code from mailpoet/lib/Newsletter/Renderer/Columns/Renderer)
// @todo Add rendering of blocks
return $emailPost->post_content ?: ''; // phpcs:ignore Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps
}
}

View File

@@ -558,4 +558,16 @@ class NewsletterEntity {
public function canBeSetSent(): bool {
return in_array($this->getType(), [self::TYPE_NOTIFICATION_HISTORY, self::TYPE_STANDARD], true);
}
/**
* We don't use typehint for now because doctrine cache generator would fail as it doesn't know the class.
* @return \WP_Post|null
*/
public function getWpPost() {
if ($this->wpPostId === null) {
return null;
}
$post = \WP_Post::get_instance($this->wpPostId);
return $post ?: null;
}
}

View File

@@ -4,7 +4,9 @@ namespace MailPoet\Newsletter\Renderer;
use MailPoet\Config\Env;
use MailPoet\Config\ServicesChecker;
use MailPoet\EmailEditor\Core\Renderer\BodyRenderer as GuntenbergBodyRenderer;
use MailPoet\Entities\NewsletterEntity;
use MailPoet\Features\FeaturesController;
use MailPoet\Logging\LoggerFactory;
use MailPoet\Newsletter\NewslettersRepository;
use MailPoet\Newsletter\Renderer\EscapeHelper as EHelper;
@@ -22,6 +24,9 @@ class Renderer {
/** @var BodyRenderer */
private $bodyRenderer;
/** @var GuntenbergBodyRenderer */
private $guntenbergBodyRenderer;
/** @var Preprocessor */
private $preprocessor;
@@ -43,17 +48,23 @@ class Renderer {
/*** @var SendingQueuesRepository */
private $sendingQueuesRepository;
/** @var FeaturesController */
private $featuresController;
public function __construct(
BodyRenderer $bodyRenderer,
GuntenbergBodyRenderer $guntenbergBodyRenderer,
Preprocessor $preprocessor,
\MailPoetVendor\CSS $cSSInliner,
ServicesChecker $servicesChecker,
WPFunctions $wp,
LoggerFactory $loggerFactory,
NewslettersRepository $newslettersRepository,
SendingQueuesRepository $sendingQueuesRepository
SendingQueuesRepository $sendingQueuesRepository,
FeaturesController $featuresController
) {
$this->bodyRenderer = $bodyRenderer;
$this->guntenbergBodyRenderer = $guntenbergBodyRenderer;
$this->preprocessor = $preprocessor;
$this->cSSInliner = $cSSInliner;
$this->servicesChecker = $servicesChecker;
@@ -61,6 +72,7 @@ class Renderer {
$this->loggerFactory = $loggerFactory;
$this->newslettersRepository = $newslettersRepository;
$this->sendingQueuesRepository = $sendingQueuesRepository;
$this->featuresController = $featuresController;
}
public function render(NewsletterEntity $newsletter, SendingTask $sendingTask = null, $type = false) {
@@ -93,7 +105,16 @@ class Renderer {
$renderedBody = "";
try {
$content = $this->preprocessor->process($newsletter, $content, $preview, $sendingTask);
$renderedBody = $this->bodyRenderer->renderBody($newsletter, $content);
if ($this->featuresController->isSupported(FeaturesController::GUTENBERG_EMAIL_EDITOR) && $newsletter->getWpPostId()) {
$post = $newsletter->getWpPost();
if (!$post instanceof \WP_Post) {
throw new NewsletterProcessingException('Missing email post object');
}
$renderedBody = $this->guntenbergBodyRenderer->renderBody($post);
} else {
$renderedBody = $this->bodyRenderer->renderBody($newsletter, $content);
}
} catch (NewsletterProcessingException $e) {
$this->loggerFactory->getLogger(LoggerFactory::TOPIC_COUPONS)->error(
$e->getMessage(),

View File

@@ -5,6 +5,7 @@ namespace MailPoet\Test\Newsletter;
use Codeception\Util\Fixtures;
use MailPoet\Config\ServicesChecker;
use MailPoet\Entities\NewsletterEntity;
use MailPoet\Features\FeaturesController;
use MailPoet\Logging\LoggerFactory;
use MailPoet\Newsletter\NewslettersRepository;
use MailPoet\Newsletter\Renderer\Blocks\Button;
@@ -54,13 +55,15 @@ class RendererTest extends \MailPoetTest {
$this->servicesChecker = $this->createMock(ServicesChecker::class);
$this->renderer = new Renderer(
$this->diContainer->get(BodyRenderer::class),
$this->diContainer->get(\MailPoet\EmailEditor\Core\Renderer\BodyRenderer::class),
$this->diContainer->get(Preprocessor::class),
$this->diContainer->get(\MailPoetVendor\CSS::class),
$this->servicesChecker,
$this->diContainer->get(WPFunctions::class),
$this->diContainer->get(LoggerFactory::class),
$this->diContainer->get(NewslettersRepository::class),
$this->diContainer->get(SendingQueuesRepository::class)
$this->diContainer->get(SendingQueuesRepository::class),
$this->diContainer->get(FeaturesController::class)
);
$this->columnRenderer = new ColumnRenderer();
$this->dOMParser = new pQuery();

View File

@@ -5,6 +5,7 @@ namespace MailPoet\WooCommerce\TransactionalEmails;
use Codeception\Stub;
use MailPoet\Config\ServicesChecker;
use MailPoet\Entities\NewsletterEntity;
use MailPoet\Features\FeaturesController;
use MailPoet\Logging\LoggerFactory;
use MailPoet\Newsletter\Editor\LayoutHelper as L;
use MailPoet\Newsletter\NewslettersRepository;
@@ -138,6 +139,7 @@ class RendererTest extends \MailPoetTest {
));
return new NewsletterRenderer(
$this->diContainer->get(\MailPoet\Newsletter\Renderer\BodyRenderer::class),
$this->diContainer->get(\MailPoet\EmailEditor\Core\Renderer\BodyRenderer::class),
new Preprocessor(
$this->diContainer->get(\MailPoet\Newsletter\Renderer\Blocks\AbandonedCartContent::class),
$this->diContainer->get(\MailPoet\Newsletter\Renderer\Blocks\AutomatedLatestContentBlock::class),
@@ -149,7 +151,8 @@ class RendererTest extends \MailPoetTest {
$this->diContainer->get(WPFunctions::class),
$this->diContainer->get(LoggerFactory::class),
$this->diContainer->get(NewslettersRepository::class),
$this->diContainer->get(SendingQueuesRepository::class)
$this->diContainer->get(SendingQueuesRepository::class),
$this->diContainer->get(FeaturesController::class)
);
}