LanguageAwareSendMailQueueWorker.php in Queue Mail 8
File
modules/queue_mail_language/src/Plugin/QueueWorker/LanguageAwareSendMailQueueWorker.php
View source
<?php
namespace Drupal\queue_mail_language\Plugin\QueueWorker;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\Extension\ModuleHandlerInterface;
use Drupal\Core\Logger\LoggerChannelFactoryInterface;
use Drupal\Core\Mail\MailManagerInterface;
use Drupal\Core\Theme\ThemeInitializationInterface;
use Drupal\Core\Theme\ThemeManagerInterface;
use Drupal\language\ConfigurableLanguageManagerInterface;
use Drupal\queue_mail\Plugin\QueueWorker\SendMailQueueWorker;
use Drupal\queue_mail_language\QueueMailLanguageNegotiator;
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
class LanguageAwareSendMailQueueWorker extends SendMailQueueWorker {
protected $languageManager;
protected $queueMailLanguageNegotiator;
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
return new static($container
->get('theme.manager'), $container
->get('theme.initialization'), $container
->get('plugin.manager.mail'), $container
->get('logger.factory'), $container
->get('config.factory'), $container
->get('queue'), $container
->get('module_handler'), $container
->get('language_manager'), $container
->get('queue_mail.language_negotiator'));
}
public function __construct(ThemeManagerInterface $theme_manager, ThemeInitializationInterface $theme_init, MailManagerInterface $mail_manager, LoggerChannelFactoryInterface $logger_factory, ConfigFactoryInterface $config_factory, ContainerAwareInterface $queue_factory, ModuleHandlerInterface $module_handler, ConfigurableLanguageManagerInterface $language_manager, QueueMailLanguageNegotiator $queue_mail_language_negotiator) {
parent::__construct($theme_manager, $theme_init, $mail_manager, $logger_factory, $config_factory, $queue_factory, $module_handler);
$this->languageManager = $language_manager;
$this->queueMailLanguageNegotiator = $queue_mail_language_negotiator;
}
protected function setMailLanguage(array $message) {
$default_langcode = $this->languageManager
->getDefaultLanguage()
->getId();
if ($message['langcode'] !== $default_langcode) {
$this
->setNegotiatorLanguage($message['langcode']);
}
return $default_langcode;
}
protected function setActiveLanguage(array $message, $langcode) {
if ($message['langcode'] !== $langcode) {
$this
->setNegotiatorLanguage($langcode);
}
}
protected function setNegotiatorLanguage($langcode) {
if ($this->languageManager
->getNegotiator() !== $this->queueMailLanguageNegotiator) {
$this->languageManager
->setNegotiator($this->queueMailLanguageNegotiator);
}
$this->queueMailLanguageNegotiator
->setLanguageCode($langcode);
$this->languageManager
->reset();
}
}