diff --git a/mailpoet/lib/DI/ContainerConfigurator.php b/mailpoet/lib/DI/ContainerConfigurator.php index b4701ca0c5..ef0633d742 100644 --- a/mailpoet/lib/DI/ContainerConfigurator.php +++ b/mailpoet/lib/DI/ContainerConfigurator.php @@ -336,10 +336,11 @@ class ContainerConfigurator implements IContainerConfigurator { $container->autowire(\MailPoet\EmailEditor\Engine\EmailEditor::class)->setPublic(true); $container->autowire(\MailPoet\EmailEditor\Engine\EmailApiController::class)->setPublic(true); $container->autowire(\MailPoet\EmailEditor\Engine\SettingsController::class)->setPublic(true); + $container->autowire(\MailPoet\EmailEditor\Engine\Renderer\Preprocessors\TopLevelPreprocessor::class)->setPublic(true); $container->autowire(\MailPoet\EmailEditor\Engine\Renderer\Renderer::class)->setPublic(true); $container->autowire(\MailPoet\EmailEditor\Engine\Renderer\BlocksRenderer::class)->setPublic(true); $container->autowire(\MailPoet\EmailEditor\Engine\Renderer\BlocksRegistry::class)->setPublic(true); - $container->autowire(\MailPoet\EmailEditor\Engine\Renderer\Preprocessor::class)->setPublic(true); + $container->autowire(\MailPoet\EmailEditor\Engine\Renderer\PreprocessManager::class)->setPublic(true); $container->autowire(\MailPoet\EmailEditor\Engine\StylesController::class)->setPublic(true); $container->autowire(\MailPoet\EmailEditor\Integrations\Core\Initializer::class)->setPublic(true); $container->autowire(\MailPoet\EmailEditor\Integrations\MailPoet\EmailEditor::class)->setPublic(true); diff --git a/mailpoet/lib/EmailEditor/Engine/Renderer/PreprocessManager.php b/mailpoet/lib/EmailEditor/Engine/Renderer/PreprocessManager.php new file mode 100644 index 0000000000..1e4570f6ef --- /dev/null +++ b/mailpoet/lib/EmailEditor/Engine/Renderer/PreprocessManager.php @@ -0,0 +1,32 @@ +registerPreprocessor($topLevelPreprocessor); + } + + /** + * @param array $parsedBlocks + * @return array + */ + public function preprocess(array $parsedBlocks): array { + foreach ($this->preprocessors as $preprocessor) { + $parsedBlocks = $preprocessor->preprocess($parsedBlocks); + } + return $parsedBlocks; + } + + public function registerPreprocessor(Preprocessor $preprocessor): void { + $this->preprocessors[] = $preprocessor; + } +} diff --git a/mailpoet/lib/EmailEditor/Engine/Renderer/Preprocessors/Preprocessor.php b/mailpoet/lib/EmailEditor/Engine/Renderer/Preprocessors/Preprocessor.php new file mode 100644 index 0000000000..594878c8ca --- /dev/null +++ b/mailpoet/lib/EmailEditor/Engine/Renderer/Preprocessors/Preprocessor.php @@ -0,0 +1,7 @@ + 'core/columns', 'attrs' => [], @@ -14,16 +13,12 @@ class Preprocessor { ]], ]; - public function preprocess(array $parsedBlocks): array { - return $this->addTopLevelColumns($parsedBlocks); - } - /** * In the editor we allow putting content blocks directly into the root level of the email. * But for rendering purposes it is more convenient to have them wrapped in a single column. * This method walks through the first level of blocks and wraps non column blocks into a single column. */ - private function addTopLevelColumns(array $parsedBlocks): array { + public function preprocess(array $parsedBlocks): array { $wrappedParsedBlocks = []; $nonColumnsBlocksBuffer = []; foreach ($parsedBlocks as $block) { diff --git a/mailpoet/lib/EmailEditor/Engine/Renderer/Renderer.php b/mailpoet/lib/EmailEditor/Engine/Renderer/Renderer.php index 026afa0e25..5e6857f1ac 100644 --- a/mailpoet/lib/EmailEditor/Engine/Renderer/Renderer.php +++ b/mailpoet/lib/EmailEditor/Engine/Renderer/Renderer.php @@ -14,8 +14,8 @@ class Renderer { /** @var BlocksRenderer */ private $blocksRenderer; - /** @var Preprocessor */ - private $preprocessor; + /** @var PreprocessManager */ + private $preprocessManager; /** @var StylesController */ private $stylesController; @@ -28,12 +28,12 @@ class Renderer { */ public function __construct( \MailPoetVendor\CSS $cssInliner, - Preprocessor $preprocessor, + PreprocessManager $preprocessManager, BlocksRenderer $blocksRenderer, StylesController $stylesController ) { $this->cssInliner = $cssInliner; - $this->preprocessor = $preprocessor; + $this->preprocessManager = $preprocessManager; $this->blocksRenderer = $blocksRenderer; $this->stylesController = $stylesController; } @@ -42,7 +42,7 @@ class Renderer { $parser = new \WP_Block_Parser(); $parsedBlocks = $parser->parse($post->post_content); // phpcs:ignore Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps - $parsedBlocks = $this->preprocessor->preprocess($parsedBlocks, $this->stylesController->getEmailLayoutStyles()); + $parsedBlocks = $this->preprocessManager->preprocess($parsedBlocks); $renderedBody = $this->blocksRenderer->render($parsedBlocks); $styles = (string)file_get_contents(dirname(__FILE__) . '/' . self::TEMPLATE_STYLES_FILE); diff --git a/mailpoet/tests/unit/EmailEditor/Engine/Renderer/PreprocessManagerTest.php b/mailpoet/tests/unit/EmailEditor/Engine/Renderer/PreprocessManagerTest.php new file mode 100644 index 0000000000..530314f301 --- /dev/null +++ b/mailpoet/tests/unit/EmailEditor/Engine/Renderer/PreprocessManagerTest.php @@ -0,0 +1,20 @@ +createMock(TopLevelPreprocessor::class); + $topLevel->expects($this->once())->method('preprocess')->willReturn([]); + + $secondPreprocessor = $this->createMock(TopLevelPreprocessor::class); + $secondPreprocessor->expects($this->once())->method('preprocess')->willReturn([]); + + $preprocessManager = new PreprocessManager($topLevel); + $preprocessManager->registerPreprocessor($secondPreprocessor); + expect($preprocessManager->preprocess([]))->equals([]); + } +} diff --git a/mailpoet/tests/unit/EmailEditor/Engine/Renderer/PreprocessorTest.php b/mailpoet/tests/unit/EmailEditor/Engine/Renderer/Preprocessors/TopLevelPreprocessorTest.php similarity index 89% rename from mailpoet/tests/unit/EmailEditor/Engine/Renderer/PreprocessorTest.php rename to mailpoet/tests/unit/EmailEditor/Engine/Renderer/Preprocessors/TopLevelPreprocessorTest.php index e3bff60661..b3dfd3ad1b 100644 --- a/mailpoet/tests/unit/EmailEditor/Engine/Renderer/PreprocessorTest.php +++ b/mailpoet/tests/unit/EmailEditor/Engine/Renderer/Preprocessors/TopLevelPreprocessorTest.php @@ -1,8 +1,10 @@ 'core/paragraph', @@ -20,12 +22,12 @@ class PreprocessorTest extends \MailPoetUnitTest { ]], ]; - /** @var Preprocessor */ + /** @var TopLevelPreprocessor */ private $preprocessor; public function _before() { parent::_before(); - $this->preprocessor = new Preprocessor(); + $this->preprocessor = new TopLevelPreprocessor(); } public function testItWrapsSingleTopLevelBlockIntoColumns() {