Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
50.00% |
1 / 2 |
CRAP | |
85.37% |
35 / 41 |
MailHandler | |
0.00% |
0 / 1 |
|
50.00% |
1 / 2 |
10.31 | |
85.37% |
35 / 41 |
__construct | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 6 |
|||
sendMailMessages | |
100.00% |
1 / 1 |
9 | |
100.00% |
35 / 35 |
<?php | |
/** | |
* @file | |
* Contains \Drupal\contact\MailHandler. | |
*/ | |
namespace Drupal\contact; | |
use Drupal\Core\Entity\EntityManagerInterface; | |
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\EntityManagerInterface $entity_manager | |
* Entity manager service. | |
*/ | |
public function __construct(MailManagerInterface $mail_manager, LanguageManagerInterface $language_manager, LoggerInterface $logger, TranslationInterface $string_translation, EntityManagerInterface $entity_manager) { | |
$this->languageManager = $language_manager; | |
$this->mailManager = $mail_manager; | |
$this->logger = $logger; | |
$this->stringTranslation = $string_translation; | |
$this->userStorage = $entity_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 = array(); | |
$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)', array('@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. | |
$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.', array( | |
'%sender-name' => $sender_cloned->getUsername(), | |
'@sender-from' => $sender_cloned->getEmail(), | |
'%contact_form' => $contact_form->label(), | |
)); | |
} | |
else { | |
$this->logger->notice('%sender-name (@sender-from) sent %recipient-name an email.', array( | |
'%sender-name' => $sender_cloned->getUsername(), | |
'@sender-from' => $sender_cloned->getEmail(), | |
'%recipient-name' => $message->getPersonalRecipient()->getUsername(), | |
)); | |
} | |
} | |
} |