diff --git a/src/Symfony/Bridge/Twig/Mime/Renderer.php b/src/Symfony/Bridge/Twig/Mime/BodyRenderer.php similarity index 57% rename from src/Symfony/Bridge/Twig/Mime/Renderer.php rename to src/Symfony/Bridge/Twig/Mime/BodyRenderer.php index 13bf3d1bdd98..e9b04b71ab73 100644 --- a/src/Symfony/Bridge/Twig/Mime/Renderer.php +++ b/src/Symfony/Bridge/Twig/Mime/BodyRenderer.php @@ -12,6 +12,8 @@ namespace Symfony\Bridge\Twig\Mime; use League\HTMLToMarkdown\HtmlConverter; +use Symfony\Component\Mime\BodyRendererInterface; +use Symfony\Component\Mime\Message; use Twig\Environment; /** @@ -19,7 +21,7 @@ * * @experimental in 4.3 */ -final class Renderer +final class BodyRenderer implements BodyRendererInterface { private $twig; private $context; @@ -38,48 +40,48 @@ public function __construct(Environment $twig, array $context = []) } } - public function render(TemplatedEmail $email): TemplatedEmail + public function render(Message $message): void { - $email = clone $email; + if (!$message instanceof TemplatedEmail) { + return; + } - $vars = array_merge($this->context, $email->getContext(), [ - 'email' => new WrappedTemplatedEmail($this->twig, $email), + $vars = array_merge($this->context, $message->getContext(), [ + 'email' => new WrappedTemplatedEmail($this->twig, $message), ]); - if ($template = $email->getTemplate()) { - $this->renderFull($email, $template, $vars); + if ($template = $message->getTemplate()) { + $this->renderFull($message, $template, $vars); } - if ($template = $email->getTextTemplate()) { - $email->text($this->twig->render($template, $vars)); + if ($template = $message->getTextTemplate()) { + $message->text($this->twig->render($template, $vars)); } - if ($template = $email->getHtmlTemplate()) { - $email->html($this->twig->render($template, $vars)); + if ($template = $message->getHtmlTemplate()) { + $message->html($this->twig->render($template, $vars)); } // if text body is empty, compute one from the HTML body - if (!$email->getTextBody() && null !== $html = $email->getHtmlBody()) { - $email->text($this->convertHtmlToText(\is_resource($html) ? stream_get_contents($html) : $html)); + if (!$message->getTextBody() && null !== $html = $message->getHtmlBody()) { + $message->text($this->convertHtmlToText(\is_resource($html) ? stream_get_contents($html) : $html)); } - - return $email; } - private function renderFull(TemplatedEmail $email, string $template, array $vars): void + private function renderFull(TemplatedEmail $message, string $template, array $vars): void { $template = $this->twig->load($template); if ($template->hasBlock('subject', $vars)) { - $email->subject($template->renderBlock('subject', $vars)); + $message->subject($template->renderBlock('subject', $vars)); } if ($template->hasBlock('text', $vars)) { - $email->text($template->renderBlock('text', $vars)); + $message->text($template->renderBlock('text', $vars)); } if ($template->hasBlock('html', $vars)) { - $email->html($template->renderBlock('html', $vars)); + $message->html($template->renderBlock('html', $vars)); } if ($template->hasBlock('config', $vars)) { diff --git a/src/Symfony/Component/Mime/BodyRendererInterface.php b/src/Symfony/Component/Mime/BodyRendererInterface.php new file mode 100644 index 000000000000..8fcc40159554 --- /dev/null +++ b/src/Symfony/Component/Mime/BodyRendererInterface.php @@ -0,0 +1,22 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Mime; + +/** + * @author Fabien Potencier + * + * @experimental in 4.3 + */ +interface BodyRendererInterface +{ + public function render(Message $message): void; +}