Refactor renderers to use template JSON

This commit is contained in:
Mike Jolley
2024-04-23 19:58:56 +01:00
parent 73ba5923ef
commit c321eb282e
9 changed files with 172 additions and 72 deletions

View File

@ -6,17 +6,21 @@ use MailPoet\Config\ServicesChecker;
use MailPoet\EmailEditor\Engine\Renderer\ContentRenderer\ContentRenderer;
use MailPoet\EmailEditor\Engine\SettingsController;
use MailPoet\EmailEditor\Engine\Templates\Templates;
use MailPoet\EmailEditor\Engine\ThemeController;
use MailPoet\Util\CdnAssetUrl;
use MailPoetVendor\Html2Text\Html2Text;
use MailPoetVendor\Pelago\Emogrifier\CssInliner;
use WP_Style_Engine;
use WP_Theme_JSON;
class Renderer {
private SettingsController $settingsController;
private ThemeController $themeController;
private ContentRenderer $contentRenderer;
private CdnAssetUrl $cdnAssetUrl;
private ServicesChecker $servicesChecker;
private Templates $templates;
private static WP_Theme_JSON|null $theme = null;
const TEMPLATE_FILE = 'template-canvas.php';
const TEMPLATE_STYLES_FILE = 'template-canvas.css';
@ -26,23 +30,41 @@ class Renderer {
ContentRenderer $contentRenderer,
CdnAssetUrl $cdnAssetUrl,
Templates $templates,
ServicesChecker $servicesChecker
ServicesChecker $servicesChecker,
ThemeController $themeController
) {
$this->settingsController = $settingsController;
$this->contentRenderer = $contentRenderer;
$this->cdnAssetUrl = $cdnAssetUrl;
$this->templates = $templates;
$this->servicesChecker = $servicesChecker;
$this->themeController = $themeController;
}
/**
* During rendering, this stores the theme data for the template being rendered.
*/
public static function getTheme() {
return self::$theme;
}
public function render(\WP_Post $post, string $subject, string $preHeader, string $language, $metaRobots = ''): array {
$templateId = 'mailpoet/mailpoet//' . (get_page_template_slug($post) ?: 'email-general');
$template = $this->templates->getBlockTemplate($templateId);
$theme = $this->templates->getBlockTheme($templateId);
// Set the theme for the template. This is merged with base theme.json and core json before rendering.
self::$theme = new WP_Theme_JSON($theme, 'default');
$emailStyles = $this->themeController->getStyles();
$layoutSettings = $this->settingsController->getLayout();
$templateHtml = $this->contentRenderer->render($post, $template);
ob_start();
$logoHtml = $this->servicesChecker->isPremiumPluginActive() ? '' : '<img src="' . esc_attr($this->cdnAssetUrl->generateCdnUrl('email-editor/logo-footer.png')) . '" alt="MailPoet" style="margin: 24px auto; display: block;" />';
$templateHtml = $this->contentRenderer->render($post, $this->templates->getBlockTemplate('mailpoet/mailpoet//email-general'));
include self::TEMPLATE_FILE;
$renderedTemplate = (string)ob_get_clean();
$emailStyles = $this->settingsController->getEmailStyles();
$templateStyles = WP_Style_Engine::compile_css(
[
'background-color' => $emailStyles['color']['background'] ?? 'inherit',