Loading modules/invite_by_email/invite_by_email.module +26 −3 Original line number Diff line number Diff line Loading @@ -5,6 +5,7 @@ * Contains invite_by_email.module. */ use Drupal\Component\Render\PlainTextOutput; use Drupal\invite\InviteConstants; use Drupal\Core\Form\FormStateInterface; Loading Loading @@ -154,8 +155,30 @@ function invite_by_email_form_user_register_form_alter(&$form, FormStateInterfac * Implements hook_mail(). */ function invite_by_email_mail($key, &$message, $params) { $token_service = \Drupal::token(); $language_manager = \Drupal::languageManager(); $langcode = $message['langcode']; $variables = ['invite' => $params['invite']]; $language = $language_manager->getLanguage($langcode); $original_language = $language_manager->getConfigOverrideLanguage(); $language_manager->setConfigOverrideLanguage($language); $invite_type = $params['invite']->get('type')->value; $is_html = unserialize(\Drupal::config("invite.invite_type.$invite_type")->get('data'))['html_email'] ?? FALSE; $subject = $params['invite']->get('field_invite_email_subject')->value; $body = $params['invite']->get('field_invite_email_body')->value; $token_options = ['langcode' => $langcode]; $body_element = [ '#theme' => 'invite_by_email', '#body' => $token_service->replace($body, $variables, $token_options), ]; $message['subject'] .= PlainTextOutput::renderFromHtml($token_service->replace($subject, $variables, $token_options)); $message['body'][] = \Drupal::service('renderer')->render($body_element); if ($is_html) { $message['headers']['Content-Type'] = 'text/html; charset=UTF-8;'; } $message['subject'] = $params['subject']; $message['body'] = $params['body']; $language_manager->setConfigOverrideLanguage($original_language); } modules/invite_by_email/src/Plugin/Invite/InviteByEmail.php +48 −52 Original line number Diff line number Diff line Loading @@ -3,9 +3,10 @@ namespace Drupal\invite_by_email\Plugin\Invite; use Drupal\Component\Plugin\PluginBase; use Drupal\Core\Language\LanguageManagerInterface; use Drupal\Core\Mail\MailManagerInterface; use Drupal\Core\Messenger\MessengerInterface; use Drupal\Core\Plugin\ContainerFactoryPluginInterface; use Drupal\Core\Render\BubbleableMetadata; use Drupal\invite\InvitePluginInterface; use Drupal\Core\StringTranslation\StringTranslationTrait; use Symfony\Component\DependencyInjection\ContainerInterface; Loading Loading @@ -39,6 +40,20 @@ class InviteByEmail extends PluginBase implements InvitePluginInterface, Contain return $this->messenger; } /** * Mail manager service. * * @var \Drupal\Core\Mail\MailManagerInterface */ protected $mailManager; /** * The language manager. * * @var \Drupal\Core\Language\LanguageManagerInterface */ protected $languageManager; /** * Constructs invite_by_email plugin. * Loading @@ -50,10 +65,23 @@ class InviteByEmail extends PluginBase implements InvitePluginInterface, Contain * Plugin Definition. * @param \Drupal\Core\Messenger\MessengerInterface $messenger * The messenger service. * @param \Drupal\Core\Mail\MailManagerInterface $mail_manager * The mail manager service. * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager * The language manager service. */ public function __construct(array $configuration, $plugin_id, $plugin_definition, MessengerInterface $messenger) { public function __construct( array $configuration, $plugin_id, $plugin_definition, MessengerInterface $messenger, MailManagerInterface $mail_manager, LanguageManagerInterface $language_manager ) { parent::__construct($configuration, $plugin_id, $plugin_definition); $this->messenger = $messenger; $this->mailManager = $mail_manager; $this->languageManager = $language_manager; } /** Loading @@ -64,7 +92,9 @@ class InviteByEmail extends PluginBase implements InvitePluginInterface, Contain $configuration, $plugin_id, $plugin_definition, $container->get('messenger') $container->get('messenger'), $container->get('plugin.manager.mail'), $container->get('language_manager') ); } Loading @@ -72,62 +102,28 @@ class InviteByEmail extends PluginBase implements InvitePluginInterface, Contain * {@inheritdoc} */ public function send($invite) { /** * @var \Drupal\token\Token $token * @var \Drupal\Core\Mail\MailManager $mail */ $bubbleable_metadata = new BubbleableMetadata(); $token = \Drupal::service('token'); $mail = \Drupal::service('plugin.manager.mail'); $mail_key = $invite->get('type')->value; $params['subject'] = $token->replace($invite->get('field_invite_email_subject')->value, ['invite' => $invite], [], $bubbleable_metadata); $body = [ '#theme' => 'invite_by_email', '#body' => $token->replace($invite->get('field_invite_email_body')->value, ['invite' => $invite], [], $bubbleable_metadata), $module = 'invite_by_email'; $key = $invite->get('type')->value; $to = $invite->get('field_invite_email_address')->value; $from = $invite->getOwner()->getEmail(); $language_code = $this->languageManager->getDefaultLanguage()->getId(); $send_now = TRUE; $params = [ 'invite' => $invite, ]; $body = \Drupal::service('renderer') ->render($body) ->__toString(); $params['body'] = explode(PHP_EOL, str_replace("\r", '', $body)); // Prepare message. $message = $mail->mail('invite_by_email', $mail_key, $invite->get('field_invite_email_address')->value, $invite->activeLangcode, $params, $invite->getOwner() ->getEmail(), FALSE); // If HTML email. $config = \Drupal::config('invite.invite_type.' . $invite->get('type')->value); $data = unserialize($config->get('data')); if ($data['html_email']) { $message['headers']['Content-Type'] = 'text/html; charset=UTF-8;'; // Body has been converted from an array to a string by above mail() call. $message['body'] = html_entity_decode($message['body']); } // Send. $system = $mail->getInstance([ 'module' => 'invite_by_email', 'key' => $mail_key, ]); $result = $system->mail($message); $result = $this->mailManager->mail($module, $key, $to, $language_code, $params, $from, $send_now); if ($result) { $this->getMessenger()->addStatus($this->t('Invitation has been sent.')); $mail_user = $message['to']; \Drupal::logger('invite')->notice('Invitation has been sent for: @mail_user.', [ '@mail_user' => $mail_user, ]); $this->messenger->addStatus($this->t('Invitation has been sent.')); \Drupal::logger('invite')->notice( 'Invitation has been sent for: @mail_user.', ['@mail_user' => $to] ); } else { $this->getMessenger()->addStatus($this->t('Failed to send a message.'), 'error'); $this->messenger->addStatus($this->t('Failed to send a message.'), 'error'); \Drupal::logger('invite')->error('Failed to send a message.'); } } } Loading
modules/invite_by_email/invite_by_email.module +26 −3 Original line number Diff line number Diff line Loading @@ -5,6 +5,7 @@ * Contains invite_by_email.module. */ use Drupal\Component\Render\PlainTextOutput; use Drupal\invite\InviteConstants; use Drupal\Core\Form\FormStateInterface; Loading Loading @@ -154,8 +155,30 @@ function invite_by_email_form_user_register_form_alter(&$form, FormStateInterfac * Implements hook_mail(). */ function invite_by_email_mail($key, &$message, $params) { $token_service = \Drupal::token(); $language_manager = \Drupal::languageManager(); $langcode = $message['langcode']; $variables = ['invite' => $params['invite']]; $language = $language_manager->getLanguage($langcode); $original_language = $language_manager->getConfigOverrideLanguage(); $language_manager->setConfigOverrideLanguage($language); $invite_type = $params['invite']->get('type')->value; $is_html = unserialize(\Drupal::config("invite.invite_type.$invite_type")->get('data'))['html_email'] ?? FALSE; $subject = $params['invite']->get('field_invite_email_subject')->value; $body = $params['invite']->get('field_invite_email_body')->value; $token_options = ['langcode' => $langcode]; $body_element = [ '#theme' => 'invite_by_email', '#body' => $token_service->replace($body, $variables, $token_options), ]; $message['subject'] .= PlainTextOutput::renderFromHtml($token_service->replace($subject, $variables, $token_options)); $message['body'][] = \Drupal::service('renderer')->render($body_element); if ($is_html) { $message['headers']['Content-Type'] = 'text/html; charset=UTF-8;'; } $message['subject'] = $params['subject']; $message['body'] = $params['body']; $language_manager->setConfigOverrideLanguage($original_language); }
modules/invite_by_email/src/Plugin/Invite/InviteByEmail.php +48 −52 Original line number Diff line number Diff line Loading @@ -3,9 +3,10 @@ namespace Drupal\invite_by_email\Plugin\Invite; use Drupal\Component\Plugin\PluginBase; use Drupal\Core\Language\LanguageManagerInterface; use Drupal\Core\Mail\MailManagerInterface; use Drupal\Core\Messenger\MessengerInterface; use Drupal\Core\Plugin\ContainerFactoryPluginInterface; use Drupal\Core\Render\BubbleableMetadata; use Drupal\invite\InvitePluginInterface; use Drupal\Core\StringTranslation\StringTranslationTrait; use Symfony\Component\DependencyInjection\ContainerInterface; Loading Loading @@ -39,6 +40,20 @@ class InviteByEmail extends PluginBase implements InvitePluginInterface, Contain return $this->messenger; } /** * Mail manager service. * * @var \Drupal\Core\Mail\MailManagerInterface */ protected $mailManager; /** * The language manager. * * @var \Drupal\Core\Language\LanguageManagerInterface */ protected $languageManager; /** * Constructs invite_by_email plugin. * Loading @@ -50,10 +65,23 @@ class InviteByEmail extends PluginBase implements InvitePluginInterface, Contain * Plugin Definition. * @param \Drupal\Core\Messenger\MessengerInterface $messenger * The messenger service. * @param \Drupal\Core\Mail\MailManagerInterface $mail_manager * The mail manager service. * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager * The language manager service. */ public function __construct(array $configuration, $plugin_id, $plugin_definition, MessengerInterface $messenger) { public function __construct( array $configuration, $plugin_id, $plugin_definition, MessengerInterface $messenger, MailManagerInterface $mail_manager, LanguageManagerInterface $language_manager ) { parent::__construct($configuration, $plugin_id, $plugin_definition); $this->messenger = $messenger; $this->mailManager = $mail_manager; $this->languageManager = $language_manager; } /** Loading @@ -64,7 +92,9 @@ class InviteByEmail extends PluginBase implements InvitePluginInterface, Contain $configuration, $plugin_id, $plugin_definition, $container->get('messenger') $container->get('messenger'), $container->get('plugin.manager.mail'), $container->get('language_manager') ); } Loading @@ -72,62 +102,28 @@ class InviteByEmail extends PluginBase implements InvitePluginInterface, Contain * {@inheritdoc} */ public function send($invite) { /** * @var \Drupal\token\Token $token * @var \Drupal\Core\Mail\MailManager $mail */ $bubbleable_metadata = new BubbleableMetadata(); $token = \Drupal::service('token'); $mail = \Drupal::service('plugin.manager.mail'); $mail_key = $invite->get('type')->value; $params['subject'] = $token->replace($invite->get('field_invite_email_subject')->value, ['invite' => $invite], [], $bubbleable_metadata); $body = [ '#theme' => 'invite_by_email', '#body' => $token->replace($invite->get('field_invite_email_body')->value, ['invite' => $invite], [], $bubbleable_metadata), $module = 'invite_by_email'; $key = $invite->get('type')->value; $to = $invite->get('field_invite_email_address')->value; $from = $invite->getOwner()->getEmail(); $language_code = $this->languageManager->getDefaultLanguage()->getId(); $send_now = TRUE; $params = [ 'invite' => $invite, ]; $body = \Drupal::service('renderer') ->render($body) ->__toString(); $params['body'] = explode(PHP_EOL, str_replace("\r", '', $body)); // Prepare message. $message = $mail->mail('invite_by_email', $mail_key, $invite->get('field_invite_email_address')->value, $invite->activeLangcode, $params, $invite->getOwner() ->getEmail(), FALSE); // If HTML email. $config = \Drupal::config('invite.invite_type.' . $invite->get('type')->value); $data = unserialize($config->get('data')); if ($data['html_email']) { $message['headers']['Content-Type'] = 'text/html; charset=UTF-8;'; // Body has been converted from an array to a string by above mail() call. $message['body'] = html_entity_decode($message['body']); } // Send. $system = $mail->getInstance([ 'module' => 'invite_by_email', 'key' => $mail_key, ]); $result = $system->mail($message); $result = $this->mailManager->mail($module, $key, $to, $language_code, $params, $from, $send_now); if ($result) { $this->getMessenger()->addStatus($this->t('Invitation has been sent.')); $mail_user = $message['to']; \Drupal::logger('invite')->notice('Invitation has been sent for: @mail_user.', [ '@mail_user' => $mail_user, ]); $this->messenger->addStatus($this->t('Invitation has been sent.')); \Drupal::logger('invite')->notice( 'Invitation has been sent for: @mail_user.', ['@mail_user' => $to] ); } else { $this->getMessenger()->addStatus($this->t('Failed to send a message.'), 'error'); $this->messenger->addStatus($this->t('Failed to send a message.'), 'error'); \Drupal::logger('invite')->error('Failed to send a message.'); } } }