diff --git a/modules/easy_email_override/src/Service/MailManager.php b/modules/easy_email_override/src/Service/MailManager.php index 12db15716ba32e4c1a5bfed83f68f8893c0c7e4a..a69010ac527333b1613b1527c652981f8d4fb1f5 100644 --- a/modules/easy_email_override/src/Service/MailManager.php +++ b/modules/easy_email_override/src/Service/MailManager.php @@ -81,6 +81,7 @@ class MailManager extends DefaultPluginManager implements MailManagerInterface { } $easy_emails = []; + /** @var \Drupal\easy_email\Service\EmailHandler $email_handler */ $email_handler = \Drupal::service('easy_email.handler'); $override_storage = \Drupal::entityTypeManager()->getStorage('easy_email_override'); @@ -122,10 +123,12 @@ class MailManager extends DefaultPluginManager implements MailManagerInterface { // If we find more than one override for a given module/key combo, we'll send them all. // Not sure if that will be useful, but perhaps. + /** @var \Drupal\easy_email_override\Entity\EmailOverride $email_override */ foreach ($email_overrides as $email_override) { $email_template = $email_override->getEasyEmailType(); $email = $email_handler->createEmail([ 'type' => $email_template, + 'langcode' => $langcode, ]); $param_map = $email_override->getParamMap(); foreach ($param_map as $pm) { diff --git a/src/Entity/EasyEmail.php b/src/Entity/EasyEmail.php index fb491dd618690b593baaee15cd13c2cec655658c..95f3fb9b5eb26cc552b8697307f83837b57ebc15 100644 --- a/src/Entity/EasyEmail.php +++ b/src/Entity/EasyEmail.php @@ -101,8 +101,9 @@ class EasyEmail extends RevisionableContentEntityBase implements EasyEmailInterf 'creator_uid' => \Drupal::currentUser()->id(), ]; - /** @var \Drupal\easy_email\Entity\EasyEmailTypeInterface $easy_email_type */ - if ($easy_email_type = $storage_controller->getEmailTypeStorage()->load($values['type'])) { + /** @var \Drupal\easy_email\Entity\EasyEmailTypeInterface|NULL $easy_email_type */ + $easy_email_type = static::loadTranslatedEmailType($storage_controller, $values['type'], $values['langcode'] ?? NULL); + if ($easy_email_type instanceof EasyEmailTypeInterface) { $values += [ 'label' => $easy_email_type->label(), 'key' => $easy_email_type->getKey(), @@ -121,6 +122,47 @@ class EasyEmail extends RevisionableContentEntityBase implements EasyEmailInterf } } + /** + * Loads the translated email type. + * + * @param \Drupal\Core\Entity\EntityStorageInterface $storage_controller + * The easy email type storage controller. + * @param string $id + * The entity type id. + * @param string|null $langcode + * The translation language, if provided. + * @return \Drupal\easy_email\Entity\EasyEmailType|null + * The easy emails type, if exists. + */ + public static function loadTranslatedEmailType(EntityStorageInterface $storage_controller, string $id, string $langcode = NULL): ?EasyEmailType { + $default_langcode = \Drupal::languageManager()->getDefaultLanguage()->getId(); + $storage = $storage_controller->getEmailTypeStorage(); + + if ($langcode === $default_langcode) { + $config_factory = \Drupal::configFactory(); + $data = $config_factory->get("easy_email.easy_email_type.$id")->getRawData(); + if (!empty($data)) { + $entity = $storage->createFromStorageRecord($data); + + if ($entity instanceof EasyEmailType) { + return $entity; + } + } + } + + $language_manager = \Drupal::languageManager(); + $config_override = $language_manager->getLanguageConfigOverride($langcode, "easy_email.easy_email_type.$id"); + + $data = $config_override->getRawData(); + if (empty($data)) { + $entity = $storage->load($id); + return $entity instanceof EasyEmailType ? $entity : null; + } + + $entity = $storage->createFromStorageRecord($data); + return $entity; + } + /** * {@inheritdoc} */ @@ -137,8 +179,6 @@ class EasyEmail extends RevisionableContentEntityBase implements EasyEmailInterf return $uri_route_parameters; } - - /** * {@inheritdoc} */