postoffice-1.0.x-dev/extensions/postoffice_skel/src/EventSubscriber/MessageSubscriber.php

extensions/postoffice_skel/src/EventSubscriber/MessageSubscriber.php
<?php

namespace Drupal\postoffice_skel\EventSubscriber;

use Drupal\Core\Asset\AttachedAssets;
use Drupal\Core\Render\RendererInterface;
use Drupal\postoffice\Email\TemplateAttachmentsInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Mailer\Event\MessageEvent;
use Symfony\Component\Mime\Email;

/**
 * Message subscriber which wraps a message into a HTML document skeleton.
 *
 * Runs with priority -125 (after Symfony MessageListener which is responsible
 * for body rendering, after html2text, before inline styles).
 */
class MessageSubscriber implements EventSubscriberInterface {

  /**
   * Constructs a postoffice skel message subscriber.
   *
   * @param \Drupal\Core\Render\RendererInterface $coreRenderer
   *   The renderer.
   */
  public function __construct(protected RendererInterface $coreRenderer) {
  }

  /**
   * {@inheritdoc}
   */
  public static function getSubscribedEvents(): array {
    $events = [];
    $events[MessageEvent::class] = ['onMessage', -125];
    return $events;
  }

  /**
   * Wrap a message into a HTML document skeleton.
   */
  public function onMessage(MessageEvent $event): void {
    $message = $event->getMessage();
    if ($message instanceof Email && $message->getHtmlBody()) {
      $build = ['#theme' => 'postoffice_skel', '#email' => $message];
      if ($message instanceof TemplateAttachmentsInterface) {
        $templateAttachments = $message->getTemplateAttachments();
        $build['#attached']['library'] = $templateAttachments->getLibraries();
        $build['#attached']['drupalSettings'] = $templateAttachments->getSettings();
      }
      $message->html((string) $this->coreRenderer->render($build));
      if ($message instanceof TemplateAttachmentsInterface) {
        $templateAttachments = AttachedAssets::createFromRenderArray($build);
        $message->setTemplateAttachments($templateAttachments);
      }

    }
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc