postoffice-1.0.x-dev/src/MailerMiddleware/Language.php

src/MailerMiddleware/Language.php
<?php

namespace Drupal\postoffice\MailerMiddleware;

use Drupal\Core\Language\LanguageManagerInterface;
use Drupal\postoffice\Email\LocalizedEmailInterface;
use Drupal\postoffice\Language\LanguageSwitcherInterface;
use Symfony\Component\Mailer\Envelope;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mime\RawMessage;

/**
 * Implements the language mailer middleware.
 */
class Language implements MailerInterface {

  /**
   * The decorated mailer.
   */
  protected MailerInterface $mailer;

  /**
   * The language manager.
   */
  protected LanguageManagerInterface $languageManager;

  /**
   * The language switcher.
   */
  protected LanguageSwitcherInterface $languageSwitcher;

  /**
   * Constructs a new language mailer middleware.
   */
  public function __construct(MailerInterface $mailer, LanguageManagerInterface $languageManager, LanguageSwitcherInterface $languageSwitcher) {
    $this->mailer = $mailer;
    $this->languageManager = $languageManager;
    $this->languageSwitcher = $languageSwitcher;
  }

  /**
   * {@inheritdoc}
   */
  public function send(RawMessage $message, ?Envelope $envelope = NULL): void {
    $originalLangcode = $this->languageManager->getCurrentLanguage()->getId();
    $mailLangcode = $this->getLangcode($message);

    try {
      if ($originalLangcode !== $mailLangcode) {
        $this->languageSwitcher->switchTo($mailLangcode);
      }
      $this->mailer->send($message, $envelope);
    }
    finally {
      $activeLanguage = $this->languageManager->getCurrentLanguage()->getId();
      if ($activeLanguage !== $originalLangcode) {
        $this->languageSwitcher->switchTo($originalLangcode);
      }
    }
  }

  /**
   * Determine the language for this message.
   */
  public function getLangcode(RawMessage $message): string {
    return ($message instanceof LocalizedEmailInterface) ?
      $message->getLangcode() :
      $this->languageManager->getDefaultLanguage()->getId();
  }

}

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

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