Skip to content
Snippets Groups Projects
Commit b537f22a authored by Piotr Potrebka's avatar Piotr Potrebka
Browse files

feat: refactor

parent bf1b3c6f
No related branches found
No related tags found
2 merge requests!5Devel,!4Refactor/templates
Pipeline #406283 passed with warnings with stages
in 30 seconds
......@@ -164,7 +164,7 @@ class Email {
/**
* @return string
*/
public function set_content_type( $type = 'html' ): self {
public function set_content_type( $type ): self {
switch ( $type ) {
case 'plain':
$content_type = 'text/plain';
......@@ -200,12 +200,21 @@ class Email {
return $this->content;
}
/**
* @param string $name
* @param string $value
*
* @return $this
*/
public function set_template_attributes( string $name, string $value ): self {
$this->template_attributes[ $name ] = $value;
return $this;
}
/**
* @return array
*/
public function get_template_attributes(): array {
return $this->template_attributes;
}
......
<?php
namespace WPDesk\Library\WPEmail\Helpers;
use Pelago\Emogrifier\CssInliner;
use Pelago\Emogrifier\HtmlProcessor\CssToAttributeConverter;
use Pelago\Emogrifier\HtmlProcessor\HtmlPruner;
class StyleInliner {
public static function inline( string $content, string $styles = '' ): string {
if ( class_exists( 'DOMDocument' ) ) {
try {
$css_inliner = CssInliner::fromHtml( $content )->inlineCss( $styles );
$dom_document = $css_inliner->getDomDocument();
HtmlPruner::fromDomDocument( $dom_document )->removeElementsWithDisplayNone();
$content = CssToAttributeConverter::fromDomDocument( $dom_document )
->convertCssToVisualAttributes()
->render();
} catch ( \Exception $e ) {
error_log( $e->getMessage() );
}
} else {
$content = '<style>' . strip_tags( $styles ) . '</style>' . $content;
}
return $content;
}
/**
* @return array|string|string[]
*/
protected function replace_placeholders( string $string ): string {
if ( empty( $this->placeholders ) ) {
return $string;
}
return (string) str_replace( array_keys( $this->placeholders ), array_values( $this->placeholders ), $string );
}
}
......@@ -2,11 +2,20 @@
namespace WPDesk\Library\WPEmail;
use WPDesk\Library\WPEmail\Helpers\StyleInliner;
use Exception;
use Pelago\Emogrifier\CssInliner;
use Pelago\Emogrifier\HtmlProcessor\CssToAttributeConverter;
use Pelago\Emogrifier\HtmlProcessor\HtmlPruner;
use Psr\Log\LoggerInterface;
use WPDesk\View\Renderer\Renderer;
class Template {
/**
* @var LoggerInterface
*/
private $logger;
/**
* @var Renderer
*/
......@@ -17,7 +26,8 @@ class Template {
*/
private $template_attributes;
public function __construct( Renderer $renderer, array $template_attributes ) {
public function __construct( LoggerInterface $logger, Renderer $renderer, array $template_attributes ) {
$this->logger = $logger;
$this->renderer = $renderer;
$this->template_attributes = wp_parse_args( $template_attributes, $this->get_default_template_attributes() );
}
......@@ -38,7 +48,7 @@ class Template {
public function css_inline( string $content ): string {
$styles = $this->renderer->render( 'html/email-styles', $this->template_attributes );
return StyleInliner::inline( $content, $styles );
return $this->convert_css( $content, $styles );
}
public function get_default_template_attributes(): array {
......@@ -53,4 +63,23 @@ class Template {
];
}
public function convert_css( string $content, string $styles = '' ): string {
if ( class_exists( 'DOMDocument' ) ) {
try {
$css_inliner = CssInliner::fromHtml( $content )->inlineCss( $styles );
$dom_document = $css_inliner->getDomDocument();
HtmlPruner::fromDomDocument( $dom_document )->removeElementsWithDisplayNone();
$content = CssToAttributeConverter::fromDomDocument( $dom_document )->convertCssToVisualAttributes()->render();
} catch ( Exception $e ) {
$this->logger->debug( $e->getMessage() );
return $content;
}
} else {
$content = '<style>' . strip_tags( $styles ) . '</style>' . $content;
}
return $content;
}
}
......@@ -3,6 +3,8 @@
namespace WPDesk\Library\WPEmail;
use Exception;
use Psr\Log\LoggerAwareInterface;
use Psr\Log\LoggerInterface;
use WP_Error;
use WPDesk\Library\WPEmail\Abstracts\Email;
use WPDesk\Library\WPEmail\Abstracts\Mailer;
......@@ -14,12 +16,22 @@ use WPDesk\View\Resolver\DirResolver;
class WPMailer implements Mailer {
/**
* @var LoggerInterface
*/
private $logger;
/**
* @var Renderer
*/
private $renderer;
public function __construct() {
public function __construct( LoggerInterface $logger ) {
$this->logger = $logger;
$this->init_renderer();
}
public function init_renderer() {
$resolver = new ChainResolver();
$resolver->appendResolver( new DirResolver( __DIR__ . '/templates' ) );
$renderer = new SimplePhpRenderer( $resolver );
......@@ -53,7 +65,7 @@ class WPMailer implements Mailer {
);
add_action( 'wp_mail_failed', [ $this, 'catch_error' ] );
$email_template = new Template( $this->renderer, $email->get_template_attributes() );
$email_template = new Template( $this->logger, $this->get_renderer(), $email->get_template_attributes() );
try {
$success = wp_mail(
......@@ -84,4 +96,5 @@ class WPMailer implements Mailer {
throw MailerException::with_wp_error( $error );
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment