diff --git a/mailpoet/lib/DI/ContainerConfigurator.php b/mailpoet/lib/DI/ContainerConfigurator.php index 56952aa0ac..653d957ae9 100644 --- a/mailpoet/lib/DI/ContainerConfigurator.php +++ b/mailpoet/lib/DI/ContainerConfigurator.php @@ -344,7 +344,6 @@ class ContainerConfigurator implements IContainerConfigurator { $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\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); $container->autowire(\MailPoet\EmailEditor\Integrations\MailPoet\EmailApiController::class)->setPublic(true); diff --git a/mailpoet/lib/EmailEditor/Engine/EmailApiController.php b/mailpoet/lib/EmailEditor/Engine/EmailApiController.php index 09891527ec..d1cbfa66eb 100644 --- a/mailpoet/lib/EmailEditor/Engine/EmailApiController.php +++ b/mailpoet/lib/EmailEditor/Engine/EmailApiController.php @@ -5,13 +5,13 @@ namespace MailPoet\EmailEditor\Engine; use MailPoet\Validator\Builder; class EmailApiController { - /** @var StylesController */ - private $stylesController; + /** @var SettingsController */ + private $settingsController; public function __construct( - StylesController $stylesController + SettingsController $settingsController ) { - $this->stylesController = $stylesController; + $this->settingsController = $settingsController; } /** @@ -19,7 +19,7 @@ class EmailApiController { */ public function getEmailData(): array { return [ - 'layout_styles' => $this->stylesController->getEmailLayoutStyles(), + 'layout_styles' => $this->settingsController->getEmailLayoutStyles(), ]; } diff --git a/mailpoet/lib/EmailEditor/Engine/Renderer/BlockRenderer.php b/mailpoet/lib/EmailEditor/Engine/Renderer/BlockRenderer.php index 0ccb93a385..e758fd613c 100644 --- a/mailpoet/lib/EmailEditor/Engine/Renderer/BlockRenderer.php +++ b/mailpoet/lib/EmailEditor/Engine/Renderer/BlockRenderer.php @@ -2,8 +2,8 @@ namespace MailPoet\EmailEditor\Engine\Renderer; -use MailPoet\EmailEditor\Engine\StylesController; +use MailPoet\EmailEditor\Engine\SettingsController; interface BlockRenderer { - public function render(array $parsedBlock, BlocksRenderer $blocksRenderer, StylesController $stylesController): string; + public function render(array $parsedBlock, BlocksRenderer $blocksRenderer, SettingsController $settingsController): string; } diff --git a/mailpoet/lib/EmailEditor/Engine/Renderer/BlocksRenderer.php b/mailpoet/lib/EmailEditor/Engine/Renderer/BlocksRenderer.php index 309a163ff3..00448368ad 100644 --- a/mailpoet/lib/EmailEditor/Engine/Renderer/BlocksRenderer.php +++ b/mailpoet/lib/EmailEditor/Engine/Renderer/BlocksRenderer.php @@ -2,25 +2,25 @@ namespace MailPoet\EmailEditor\Engine\Renderer; -use MailPoet\EmailEditor\Engine\StylesController; +use MailPoet\EmailEditor\Engine\SettingsController; class BlocksRenderer { /** @var BlocksRegistry */ private $blockRenderersRegistry; - /** @var StylesController */ - private $stylesController; + /** @var SettingsController */ + private $settingsController; /** @var bool */ private $blocksInitialized = false; public function __construct( BlocksRegistry $blockRenderersRegistry, - StylesController $stylesController + SettingsController $settingsController ) { $this->blockRenderersRegistry = $blockRenderersRegistry; - $this->stylesController = $stylesController; + $this->settingsController = $settingsController; } public function render(array $parsedBlocks): string { @@ -35,7 +35,7 @@ class BlocksRenderer { if (!$blockRenderer) { continue; } - $content .= $blockRenderer->render($parsedBlock, $this, $this->stylesController); + $content .= $blockRenderer->render($parsedBlock, $this, $this->settingsController); } return $content; } diff --git a/mailpoet/lib/EmailEditor/Engine/Renderer/Renderer.php b/mailpoet/lib/EmailEditor/Engine/Renderer/Renderer.php index a0bdce8952..326abef3d2 100644 --- a/mailpoet/lib/EmailEditor/Engine/Renderer/Renderer.php +++ b/mailpoet/lib/EmailEditor/Engine/Renderer/Renderer.php @@ -2,7 +2,7 @@ namespace MailPoet\EmailEditor\Engine\Renderer; -use MailPoet\EmailEditor\Engine\StylesController; +use MailPoet\EmailEditor\Engine\SettingsController; use MailPoet\Util\pQuery\DomNode; use MailPoetVendor\Html2Text\Html2Text; @@ -17,8 +17,8 @@ class Renderer { /** @var PreprocessManager */ private $preprocessManager; - /** @var StylesController */ - private $stylesController; + /** @var SettingsController */ + private $settingsController; const TEMPLATE_FILE = 'template.html'; const TEMPLATE_STYLES_FILE = 'styles.css'; @@ -30,19 +30,19 @@ class Renderer { \MailPoetVendor\CSS $cssInliner, PreprocessManager $preprocessManager, BlocksRenderer $blocksRenderer, - StylesController $stylesController + SettingsController $settingsController ) { $this->cssInliner = $cssInliner; $this->preprocessManager = $preprocessManager; $this->blocksRenderer = $blocksRenderer; - $this->stylesController = $stylesController; + $this->settingsController = $settingsController; } public function render(\WP_Post $post, string $subject, string $preHeader, string $language, $metaRobots = ''): array { $parser = new \WP_Block_Parser(); $parsedBlocks = $parser->parse($post->post_content); // phpcs:ignore Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps - $layoutStyles = $this->stylesController->getEmailLayoutStyles(); + $layoutStyles = $this->settingsController->getEmailLayoutStyles(); $parsedBlocks = $this->preprocessManager->preprocess($parsedBlocks, $layoutStyles); $renderedBody = $this->blocksRenderer->render($parsedBlocks); diff --git a/mailpoet/lib/EmailEditor/Engine/SettingsController.php b/mailpoet/lib/EmailEditor/Engine/SettingsController.php index 2dffff19fb..a664ccf870 100644 --- a/mailpoet/lib/EmailEditor/Engine/SettingsController.php +++ b/mailpoet/lib/EmailEditor/Engine/SettingsController.php @@ -28,14 +28,66 @@ class SettingsController { ], ]; - /** @var StylesController */ - private $stylesController; + /** + * Width of the email in pixels. + * @var string + */ + const EMAIL_WIDTH = '660px'; - public function __construct( - StylesController $stylesController - ) { - $this->stylesController = $stylesController; - } + /** + * Width of the email in pixels. + * @var string + */ + const EMAIL_BACKGROUND = '#cccccc'; + + /** + * Padding of the email in pixels. + * @var string + */ + const EMAIL_PADDING = '10px'; + + /** + * Default styles applied to the email. These are going to be replaced by style settings. + * This is currently more af a proof of concept that we can apply styles to the email. + * We will gradually replace these hardcoded values with styles saved as global styles or styles saved with the email. + * @var array + */ + const DEFAULT_EMAIL_CONTENT_STYLES = [ + 'typography' => [ + 'fontFamily' => "Arial, 'Helvetica Neue', Helvetica, sans-serif", + 'fontSize' => '16px', + ], + 'h1' => [ + 'typography' => [ + 'fontSize' => '32px', + ], + ], + 'h2' => [ + 'typography' => [ + 'fontSize' => '24px', + ], + ], + 'h3' => [ + 'typography' => [ + 'fontSize' => '18px', + ], + ], + 'h4' => [ + 'typography' => [ + 'fontSize' => '16px', + ], + ], + 'h5' => [ + 'typography' => [ + 'fontSize' => '14px', + ], + ], + 'h6' => [ + 'typography' => [ + 'fontSize' => '12px', + ], + ], + ]; public function getSettings(): array { $coreDefaultSettings = get_default_block_editor_settings(); @@ -48,9 +100,29 @@ class SettingsController { $settings = array_merge($coreDefaultSettings, self::DEFAULT_SETTINGS); $settings['allowedBlockTypes'] = self::ALLOWED_BLOCK_TYPES; - $settings['defaultEditorStyles'] = [[ 'css' => $this->stylesController->getEmailContentStyles() ]]; + $settings['defaultEditorStyles'] = [[ 'css' => $this->getEmailContentStyles() ]]; $settings['__experimentalFeatures'] = $coreSettings; return $settings; } + + public function getEmailContentStyles(): array { + return self::DEFAULT_EMAIL_CONTENT_STYLES; + } + + /** + * @return array{width: string, background: string, padding: array{bottom: string, left: string, right: string, top: string}} + */ + public function getEmailLayoutStyles(): array { + return [ + 'width' => self::EMAIL_WIDTH, + 'background' => self::EMAIL_BACKGROUND, + 'padding' => [ + 'bottom' => self::EMAIL_PADDING, + 'left' => self::EMAIL_PADDING, + 'right' => self::EMAIL_PADDING, + 'top' => self::EMAIL_PADDING, + ], + ]; + } } diff --git a/mailpoet/lib/EmailEditor/Engine/StylesController.php b/mailpoet/lib/EmailEditor/Engine/StylesController.php deleted file mode 100644 index dc61e98b67..0000000000 --- a/mailpoet/lib/EmailEditor/Engine/StylesController.php +++ /dev/null @@ -1,86 +0,0 @@ - [ - 'fontFamily' => "Arial, 'Helvetica Neue', Helvetica, sans-serif", - 'fontSize' => '16px', - ], - 'h1' => [ - 'typography' => [ - 'fontSize' => '32px', - ], - ], - 'h2' => [ - 'typography' => [ - 'fontSize' => '24px', - ], - ], - 'h3' => [ - 'typography' => [ - 'fontSize' => '18px', - ], - ], - 'h4' => [ - 'typography' => [ - 'fontSize' => '16px', - ], - ], - 'h5' => [ - 'typography' => [ - 'fontSize' => '14px', - ], - ], - 'h6' => [ - 'typography' => [ - 'fontSize' => '12px', - ], - ], - ]; - - public function getEmailContentStyles(): array { - return self::DEFAULT_EMAIL_CONTENT_STYLES; - } - - /** - * @return array{width: string, background: string, padding: array{bottom: string, left: string, right: string, top: string}} - */ - public function getEmailLayoutStyles(): array { - return [ - 'width' => self::EMAIL_WIDTH, - 'background' => self::EMAIL_BACKGROUND, - 'padding' => [ - 'bottom' => self::EMAIL_PADDING, - 'left' => self::EMAIL_PADDING, - 'right' => self::EMAIL_PADDING, - 'top' => self::EMAIL_PADDING, - ], - ]; - } -} diff --git a/mailpoet/lib/EmailEditor/Integrations/Core/Renderer/Blocks/Column.php b/mailpoet/lib/EmailEditor/Integrations/Core/Renderer/Blocks/Column.php index b0794a2d3d..dfd4eea2ae 100644 --- a/mailpoet/lib/EmailEditor/Integrations/Core/Renderer/Blocks/Column.php +++ b/mailpoet/lib/EmailEditor/Integrations/Core/Renderer/Blocks/Column.php @@ -4,7 +4,7 @@ namespace MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks; use MailPoet\EmailEditor\Engine\Renderer\BlockRenderer; use MailPoet\EmailEditor\Engine\Renderer\BlocksRenderer; -use MailPoet\EmailEditor\Engine\StylesController; +use MailPoet\EmailEditor\Engine\SettingsController; class Column implements BlockRenderer { public function render($parsedBlock, BlocksRenderer $blocksRenderer, StylesController $stylesController): string { diff --git a/mailpoet/lib/EmailEditor/Integrations/Core/Renderer/Blocks/Columns.php b/mailpoet/lib/EmailEditor/Integrations/Core/Renderer/Blocks/Columns.php index 843abafb9f..e599af2e31 100644 --- a/mailpoet/lib/EmailEditor/Integrations/Core/Renderer/Blocks/Columns.php +++ b/mailpoet/lib/EmailEditor/Integrations/Core/Renderer/Blocks/Columns.php @@ -4,7 +4,7 @@ namespace MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks; use MailPoet\EmailEditor\Engine\Renderer\BlockRenderer; use MailPoet\EmailEditor\Engine\Renderer\BlocksRenderer; -use MailPoet\EmailEditor\Engine\StylesController; +use MailPoet\EmailEditor\Engine\SettingsController; class Columns implements BlockRenderer { public function render($parsedBlock, BlocksRenderer $blocksRenderer, StylesController $stylesController): string { diff --git a/mailpoet/lib/EmailEditor/Integrations/Core/Renderer/Blocks/Heading.php b/mailpoet/lib/EmailEditor/Integrations/Core/Renderer/Blocks/Heading.php index 414fa80f96..e14f7a9181 100644 --- a/mailpoet/lib/EmailEditor/Integrations/Core/Renderer/Blocks/Heading.php +++ b/mailpoet/lib/EmailEditor/Integrations/Core/Renderer/Blocks/Heading.php @@ -4,10 +4,10 @@ namespace MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks; use MailPoet\EmailEditor\Engine\Renderer\BlockRenderer; use MailPoet\EmailEditor\Engine\Renderer\BlocksRenderer; -use MailPoet\EmailEditor\Engine\StylesController; +use MailPoet\EmailEditor\Engine\SettingsController; class Heading implements BlockRenderer { - public function render($parsedBlock, BlocksRenderer $blocksRenderer, StylesController $stylesController): string { + public function render($parsedBlock, BlocksRenderer $blocksRenderer, SettingsController $settingsController): string { return $parsedBlock['innerHTML'] ?? ''; } } diff --git a/mailpoet/lib/EmailEditor/Integrations/Core/Renderer/Blocks/Paragraph.php b/mailpoet/lib/EmailEditor/Integrations/Core/Renderer/Blocks/Paragraph.php index 36138ce175..d0627c65d5 100644 --- a/mailpoet/lib/EmailEditor/Integrations/Core/Renderer/Blocks/Paragraph.php +++ b/mailpoet/lib/EmailEditor/Integrations/Core/Renderer/Blocks/Paragraph.php @@ -4,7 +4,7 @@ namespace MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks; use MailPoet\EmailEditor\Engine\Renderer\BlockRenderer; use MailPoet\EmailEditor\Engine\Renderer\BlocksRenderer; -use MailPoet\EmailEditor\Engine\StylesController; +use MailPoet\EmailEditor\Engine\SettingsController; class Paragraph implements BlockRenderer { public function render($parsedBlock, BlocksRenderer $blocksRenderer, StylesController $stylesController): string { diff --git a/mailpoet/tests/integration/EmailEditor/Engine/Renderer/BlocksRendererTest.php b/mailpoet/tests/integration/EmailEditor/Engine/Renderer/BlocksRendererTest.php index e408650c4b..a8e0d6bdee 100644 --- a/mailpoet/tests/integration/EmailEditor/Engine/Renderer/BlocksRendererTest.php +++ b/mailpoet/tests/integration/EmailEditor/Engine/Renderer/BlocksRendererTest.php @@ -2,7 +2,7 @@ namespace MailPoet\EmailEditor\Engine\Renderer; -use MailPoet\EmailEditor\Engine\StylesController; +use MailPoet\EmailEditor\Engine\SettingsController; require_once __DIR__ . '/DummyBlockRenderer.php'; @@ -73,7 +73,7 @@ class BlocksRendererTest extends \MailPoetTest { private function getBlocksRenderer() { return new BlocksRenderer( new BlocksRegistry(), - new StylesController() + new SettingsController() ); } } diff --git a/mailpoet/tests/integration/EmailEditor/Engine/Renderer/DummyBlockRenderer.php b/mailpoet/tests/integration/EmailEditor/Engine/Renderer/DummyBlockRenderer.php index e913426457..252528f6e1 100644 --- a/mailpoet/tests/integration/EmailEditor/Engine/Renderer/DummyBlockRenderer.php +++ b/mailpoet/tests/integration/EmailEditor/Engine/Renderer/DummyBlockRenderer.php @@ -2,10 +2,10 @@ namespace MailPoet\EmailEditor\Engine\Renderer; -use MailPoet\EmailEditor\Engine\StylesController; +use MailPoet\EmailEditor\Engine\SettingsController; class DummyBlockRenderer implements BlockRenderer { - public function render($parsedBlock, BlocksRenderer $blocksRenderer, StylesController $stylesController): string { + public function render($parsedBlock, BlocksRenderer $blocksRenderer, SettingsController $settingsController): string { if (!isset($parsedBlock['innerBlocks']) || empty($parsedBlock['innerBlocks'])) { return $parsedBlock['innerHTML']; } diff --git a/mailpoet/tests/integration/EmailEditor/Engine/Renderer/RendererTest.php b/mailpoet/tests/integration/EmailEditor/Engine/Renderer/RendererTest.php index b872d4b80c..8ab07df112 100644 --- a/mailpoet/tests/integration/EmailEditor/Engine/Renderer/RendererTest.php +++ b/mailpoet/tests/integration/EmailEditor/Engine/Renderer/RendererTest.php @@ -3,7 +3,7 @@ namespace MailPoet\EmailEditor\Engine\Renderer; use MailPoet\EmailEditor\Engine\EmailEditor; -use MailPoet\EmailEditor\Engine\StylesController; +use MailPoet\EmailEditor\Engine\SettingsController; require_once __DIR__ . '/DummyBlockRenderer.php'; @@ -76,8 +76,8 @@ class RendererTest extends \MailPoetTest { } public function testItAppliesLayoutStyles() { - $stylesControllerMock = $this->createMock(StylesController::class); - $stylesControllerMock->method('getEmailLayoutStyles')->willReturn([ + $settingsControllerMock = $this->createMock(SettingsController::class); + $settingsControllerMock->method('getEmailLayoutStyles')->willReturn([ 'width' => 123, 'background' => '#123456', 'padding' => [ @@ -88,7 +88,7 @@ class RendererTest extends \MailPoetTest { ], ]); $renderer = $this->getServiceWithOverrides(Renderer::class, [ - 'stylesController' => $stylesControllerMock, + 'stylesController' => $settingsControllerMock, ]); $rendered = $renderer->render($this->emailPost, 'Subject', '', 'en'); $doc = new \DOMDocument(); diff --git a/mailpoet/tests/integration/EmailEditor/Integration/Core/Renderer/Blocks/ColumnsTest.php b/mailpoet/tests/integration/EmailEditor/Integration/Core/Renderer/Blocks/ColumnsTest.php index 88f41d0416..64b882f6c4 100644 --- a/mailpoet/tests/integration/EmailEditor/Integration/Core/Renderer/Blocks/ColumnsTest.php +++ b/mailpoet/tests/integration/EmailEditor/Integration/Core/Renderer/Blocks/ColumnsTest.php @@ -4,7 +4,7 @@ namespace MailPoet\EmailEditor\Integrations\Core\Renderer\Blocks; use MailPoet\EmailEditor\Engine\EmailEditor; use MailPoet\EmailEditor\Engine\Renderer\BlocksRenderer; -use MailPoet\EmailEditor\Engine\StylesController; +use MailPoet\EmailEditor\Engine\SettingsController; class ColumnsTest extends \MailPoetTest { /** @var BlocksRenderer */ @@ -49,26 +49,26 @@ class ColumnsTest extends \MailPoetTest { } public function testItRendersInnerColumn() { - $stylesController = $this->diContainer->get(StylesController::class); - $rendered = $this->columnsRenderer->render($this->parsedColumns, $this->blocksRenderer, $stylesController); + $settingsController = $this->diContainer->get(SettingsController::class); + $rendered = $this->columnsRenderer->render($this->parsedColumns, $this->blocksRenderer, $settingsController); verify($rendered)->stringContainsString('Column 1'); } public function testItRendersWidthForOneColumn() { - $stylesController = $this->createMock(StylesController::class); - $stylesController->method('getEmailLayoutStyles') + $settingsController = $this->createMock(SettingsController::class); + $settingsController->method('getEmailLayoutStyles') ->willReturn(['width' => 800]); - $rendered = $this->columnsRenderer->render($this->parsedColumns, $this->blocksRenderer, $stylesController); + $rendered = $this->columnsRenderer->render($this->parsedColumns, $this->blocksRenderer, $settingsController); verify($rendered)->stringContainsString('width:784px;'); } public function testItRendersWidthForTwoColumns() { - $stylesController = $this->createMock(StylesController::class); - $stylesController->method('getEmailLayoutStyles') + $settingsController = $this->createMock(SettingsController::class); + $settingsController->method('getEmailLayoutStyles') ->willReturn(['width' => 800]); $parsedColumns = $this->parsedColumns; $parsedColumns['innerBlocks'][] = $parsedColumns['innerBlocks'][0]; // Insert another column - $rendered = $this->columnsRenderer->render($parsedColumns, $this->blocksRenderer, $stylesController); + $rendered = $this->columnsRenderer->render($parsedColumns, $this->blocksRenderer, $settingsController); verify($rendered)->stringContainsString('width:392px;'); } }