Mercurial > hg > isophonics-drupal-site
view core/modules/contact/src/MailHandler.php @ 19:fa3358dc1485 tip
Add ndrum files
author | Chris Cannam |
---|---|
date | Wed, 28 Aug 2019 13:14:47 +0100 |
parents | af1871eacc83 |
children |
line wrap: on
line source
<?php namespace Drupal\contact; use Drupal\Core\Entity\EntityTypeManagerInterface; use Drupal\Core\Language\LanguageManagerInterface; use Drupal\Core\Mail\MailManagerInterface; use Drupal\Core\Session\AccountInterface; use Drupal\Core\StringTranslation\StringTranslationTrait; use Drupal\Core\StringTranslation\TranslationInterface; use Psr\Log\LoggerInterface; /** * Provides a class for handling assembly and dispatch of contact mail messages. */ class MailHandler implements MailHandlerInterface { use StringTranslationTrait; /** * Language manager service. * * @var \Drupal\Core\Language\LanguageManagerInterface */ protected $languageManager; /** * Logger service. * * @var \Drupal\Core\Logger\LoggerChannelInterface */ protected $logger; /** * Mail manager service. * * @var \Drupal\Core\Mail\MailManagerInterface */ protected $mailManager; /** * The user entity storage handler. * * @var \Drupal\Core\Entity\EntityStorageInterface */ protected $userStorage; /** * Constructs a new \Drupal\contact\MailHandler object. * * @param \Drupal\Core\Mail\MailManagerInterface $mail_manager * Mail manager service. * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager * Language manager service. * @param \Psr\Log\LoggerInterface $logger * A logger instance. * @param \Drupal\Core\StringTranslation\TranslationInterface $string_translation * String translation service. * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager * The entity type manager. */ public function __construct(MailManagerInterface $mail_manager, LanguageManagerInterface $language_manager, LoggerInterface $logger, TranslationInterface $string_translation, EntityTypeManagerInterface $entity_type_manager) { $this->languageManager = $language_manager; $this->mailManager = $mail_manager; $this->logger = $logger; $this->stringTranslation = $string_translation; $this->userStorage = $entity_type_manager->getStorage('user'); } /** * {@inheritdoc} */ public function sendMailMessages(MessageInterface $message, AccountInterface $sender) { // Clone the sender, as we make changes to mail and name properties. $sender_cloned = clone $this->userStorage->load($sender->id()); $params = []; $current_langcode = $this->languageManager->getCurrentLanguage()->getId(); $recipient_langcode = $this->languageManager->getDefaultLanguage()->getId(); $contact_form = $message->getContactForm(); if ($sender_cloned->isAnonymous()) { // At this point, $sender contains an anonymous user, so we need to take // over the submitted form values. $sender_cloned->name = $message->getSenderName(); $sender_cloned->mail = $message->getSenderMail(); // For the email message, clarify that the sender name is not verified; it // could potentially clash with a username on this site. $sender_cloned->name = $this->t('@name (not verified)', ['@name' => $message->getSenderName()]); } // Build email parameters. $params['contact_message'] = $message; $params['sender'] = $sender_cloned; if (!$message->isPersonal()) { // Send to the form recipient(s), using the site's default language. $params['contact_form'] = $contact_form; $to = implode(', ', $contact_form->getRecipients()); } elseif ($recipient = $message->getPersonalRecipient()) { // Send to the user in the user's preferred language. $to = $recipient->getEmail(); $recipient_langcode = $recipient->getPreferredLangcode(); $params['recipient'] = $recipient; } else { throw new MailHandlerException('Unable to determine message recipient'); } // Send email to the recipient(s). $key_prefix = $message->isPersonal() ? 'user' : 'page'; $this->mailManager->mail('contact', $key_prefix . '_mail', $to, $recipient_langcode, $params, $sender_cloned->getEmail()); // If requested, send a copy to the user, using the current language. if ($message->copySender()) { $this->mailManager->mail('contact', $key_prefix . '_copy', $sender_cloned->getEmail(), $current_langcode, $params, $sender_cloned->getEmail()); } // If configured, send an auto-reply, using the current language. if (!$message->isPersonal() && $contact_form->getReply()) { // User contact forms do not support an auto-reply message, so this // message always originates from the site. if (!$sender_cloned->getEmail()) { $this->logger->error('Error sending auto-reply, missing sender e-mail address in %contact_form', [ '%contact_form' => $contact_form->label(), ]); } else { $this->mailManager->mail('contact', 'page_autoreply', $sender_cloned->getEmail(), $current_langcode, $params); } } if (!$message->isPersonal()) { $this->logger->notice('%sender-name (@sender-from) sent an email regarding %contact_form.', [ '%sender-name' => $sender_cloned->getAccountName(), '@sender-from' => $sender_cloned->getEmail(), '%contact_form' => $contact_form->label(), ]); } else { $this->logger->notice('%sender-name (@sender-from) sent %recipient-name an email.', [ '%sender-name' => $sender_cloned->getAccountName(), '@sender-from' => $sender_cloned->getEmail(), '%recipient-name' => $message->getPersonalRecipient()->getAccountName(), ]); } } }