Changeset View
Changeset View
Standalone View
Standalone View
src/applications/metamta/replyhandler/PhabricatorMailTarget.php
- This file was added.
<?php | |||||
final class PhabricatorMailTarget extends Phobject { | |||||
private $viewer; | |||||
private $replyTo; | |||||
private $toMap = array(); | |||||
private $ccMap = array(); | |||||
private $rawToPHIDs; | |||||
private $rawCCPHIDs; | |||||
public function setRawToPHIDs(array $to_phids) { | |||||
$this->rawToPHIDs = $to_phids; | |||||
return $this; | |||||
} | |||||
public function setRawCCPHIDs(array $cc_phids) { | |||||
$this->rawCCPHIDs = $cc_phids; | |||||
return $this; | |||||
} | |||||
public function setCCMap(array $cc_map) { | |||||
$this->ccMap = $cc_map; | |||||
return $this; | |||||
} | |||||
public function getCCMap() { | |||||
return $this->ccMap; | |||||
} | |||||
public function setToMap(array $to_map) { | |||||
$this->toMap = $to_map; | |||||
return $this; | |||||
} | |||||
public function getToMap() { | |||||
return $this->toMap; | |||||
} | |||||
public function setReplyTo($reply_to) { | |||||
$this->replyTo = $reply_to; | |||||
return $this; | |||||
} | |||||
public function getReplyTo() { | |||||
return $this->replyTo; | |||||
} | |||||
public function setViewer($viewer) { | |||||
$this->viewer = $viewer; | |||||
return $this; | |||||
} | |||||
public function getViewer() { | |||||
return $this->viewer; | |||||
} | |||||
public function sendMail(PhabricatorMetaMTAMail $mail) { | |||||
$viewer = $this->getViewer(); | |||||
$mail->addPHIDHeaders('X-Phabricator-To', $this->rawToPHIDs); | |||||
$mail->addPHIDHeaders('X-Phabricator-Cc', $this->rawCCPHIDs); | |||||
$to_handles = $viewer->loadHandles($this->rawToPHIDs); | |||||
$cc_handles = $viewer->loadHandles($this->rawCCPHIDs); | |||||
$body = $mail->getBody(); | |||||
$body .= "\n"; | |||||
$body .= $this->getRecipientsSummary($to_handles, $cc_handles); | |||||
$mail->setBody($body); | |||||
$html_body = $mail->getHTMLBody(); | |||||
if (strlen($html_body)) { | |||||
$html_body .= hsprintf( | |||||
'%s', | |||||
$this->getRecipientsSummaryHTML($to_handles, $cc_handles)); | |||||
} | |||||
$mail->setHTMLBody($html_body); | |||||
$reply_to = $this->getReplyTo(); | |||||
if ($reply_to) { | |||||
$mail->setReplyTo($reply_to); | |||||
} | |||||
$to = array_keys($this->getToMap()); | |||||
if ($to) { | |||||
$mail->addTos($to); | |||||
} | |||||
$cc = array_keys($this->getCCMap()); | |||||
if ($cc) { | |||||
$mail->addCCs($cc); | |||||
} | |||||
$mail->save(); | |||||
} | |||||
private function getRecipientsSummary( | |||||
PhabricatorHandleList $to_handles, | |||||
PhabricatorHandleList $cc_handles) { | |||||
if (!PhabricatorEnv::getEnvConfig('metamta.recipients.show-hints')) { | |||||
return ''; | |||||
} | |||||
$to_handles = iterator_to_array($to_handles); | |||||
$cc_handles = iterator_to_array($cc_handles); | |||||
$body = ''; | |||||
if ($to_handles) { | |||||
$body .= "To: ".implode(', ', mpull($to_handles, 'getName'))."\n"; | |||||
} | |||||
if ($cc_handles) { | |||||
$body .= "Cc: ".implode(', ', mpull($cc_handles, 'getName'))."\n"; | |||||
} | |||||
return $body; | |||||
} | |||||
private function getRecipientsSummaryHTML( | |||||
PhabricatorHandleList $to_handles, | |||||
PhabricatorHandleList $cc_handles) { | |||||
if (!PhabricatorEnv::getEnvConfig('metamta.recipients.show-hints')) { | |||||
return ''; | |||||
} | |||||
$to_handles = iterator_to_array($to_handles); | |||||
$cc_handles = iterator_to_array($cc_handles); | |||||
$body = array(); | |||||
if ($to_handles) { | |||||
$body[] = phutil_tag('strong', array(), 'To: '); | |||||
$body[] = phutil_implode_html(', ', mpull($to_handles, 'getName')); | |||||
$body[] = phutil_tag('br'); | |||||
} | |||||
if ($cc_handles) { | |||||
$body[] = phutil_tag('strong', array(), 'Cc: '); | |||||
$body[] = phutil_implode_html(', ', mpull($cc_handles, 'getName')); | |||||
$body[] = phutil_tag('br'); | |||||
} | |||||
return phutil_tag('div', array(), $body); | |||||
} | |||||
} |