From fbc77160dbf27a1a7ab2d4173411fdceeb8d3e31 Mon Sep 17 00:00:00 2001 From: Nestor Soriano Date: Fri, 18 Mar 2022 12:52:43 +0100 Subject: [PATCH] Use CssInliner class instead of Emogrifier class With the upgrade of the Emogrifier package we can't use the Emogrifier class, since it was removed in v4 (we need to use at least v5 for compatibility with PHP 8); so we now use the CssInliner class. Note that this is a potential breaking change for consumers of the woocommerce_emogrifier hook, which was getting an Emogrifier object as parameter (now it gets a CssInliner object, which is partially compatible). --- .../includes/emails/class-wc-email.php | 22 ++++++++++++------- .../tests/legacy/data/sample-email.html | 2 +- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/plugins/woocommerce/includes/emails/class-wc-email.php b/plugins/woocommerce/includes/emails/class-wc-email.php index 9f05fd39f28..d56a63838fa 100644 --- a/plugins/woocommerce/includes/emails/class-wc-email.php +++ b/plugins/woocommerce/includes/emails/class-wc-email.php @@ -5,6 +5,10 @@ * @package WooCommerce\Emails */ +use Pelago\Emogrifier\CssInliner; +use Pelago\Emogrifier\HtmlProcessor\CssToAttributeConverter; +use Pelago\Emogrifier\HtmlProcessor\HtmlPruner; + if ( ! defined( 'ABSPATH' ) ) { exit; } @@ -559,18 +563,20 @@ class WC_Email extends WC_Settings_API { wc_get_template( 'emails/email-styles.php' ); $css = apply_filters( 'woocommerce_email_styles', ob_get_clean(), $this ); - $emogrifier_class = 'Pelago\\Emogrifier'; + $css_inliner_class = CssInliner::class; - if ( $this->supports_emogrifier() && class_exists( $emogrifier_class ) ) { + if ( $this->supports_emogrifier() && class_exists( $css_inliner_class ) ) { try { - $emogrifier = new $emogrifier_class( $content, $css ); + $css_inliner = CssInliner::fromHtml( $content )->inlineCss( $css ); - do_action( 'woocommerce_emogrifier', $emogrifier, $this ); + do_action( 'woocommerce_emogrifier', $css_inliner, $this ); - $content = $emogrifier->emogrify(); - $html_prune = \Pelago\Emogrifier\HtmlProcessor\HtmlPruner::fromHtml( $content ); - $html_prune->removeElementsWithDisplayNone(); - $content = $html_prune->render(); + $domDocument = $css_inliner->getDomDocument(); + + HtmlPruner::fromDomDocument( $domDocument )->removeElementsWithDisplayNone(); + $content = CssToAttributeConverter::fromDomDocument( $domDocument ) + ->convertCssToVisualAttributes() + ->render(); } catch ( Exception $e ) { $logger = wc_get_logger(); $logger->error( $e->getMessage(), array( 'source' => 'emogrifier' ) ); diff --git a/plugins/woocommerce/tests/legacy/data/sample-email.html b/plugins/woocommerce/tests/legacy/data/sample-email.html index 144b4c7b845..a76b328ed2d 100644 --- a/plugins/woocommerce/tests/legacy/data/sample-email.html +++ b/plugins/woocommerce/tests/legacy/data/sample-email.html @@ -1,5 +1,5 @@ -

Hello World!

+

Hello World!