mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-22 23:02:42 +01:00
Make Pholio mail render without a ton of over-escaped HTML
Summary: Ref T13202. See PHI900. Fixes T12814. Pholio currently builds HTML comments in an older way that can dump a bunch of over-escaped HTML into mail bodies. Update the logic to be more similar to the Differential rendering logic and stop over-escaping things. The result isn't perfect, but is dramatically less broken. Test Plan: {F5919860} Reviewers: amckinley Reviewed By: amckinley Maniphest Tasks: T13202, T12814 Differential Revision: https://secure.phabricator.com/D19733
This commit is contained in:
parent
c6c1893dc0
commit
99034efa8b
4 changed files with 79 additions and 42 deletions
|
@ -636,8 +636,8 @@ final class DifferentialTransactionEditor
|
||||||
|
|
||||||
$viewer = $this->requireActor();
|
$viewer = $this->requireActor();
|
||||||
|
|
||||||
$body = new PhabricatorMetaMTAMailBody();
|
$body = id(new PhabricatorMetaMTAMailBody())
|
||||||
$body->setViewer($this->requireActor());
|
->setViewer($viewer);
|
||||||
|
|
||||||
$revision_uri = $object->getURI();
|
$revision_uri = $object->getURI();
|
||||||
$revision_uri = PhabricatorEnv::getProductionURI($revision_uri);
|
$revision_uri = PhabricatorEnv::getProductionURI($revision_uri);
|
||||||
|
|
|
@ -128,51 +128,30 @@ final class PholioMockEditor extends PhabricatorApplicationTransactionEditor {
|
||||||
PhabricatorLiskDAO $object,
|
PhabricatorLiskDAO $object,
|
||||||
array $xactions) {
|
array $xactions) {
|
||||||
|
|
||||||
$body = new PhabricatorMetaMTAMailBody();
|
$viewer = $this->requireActor();
|
||||||
$headers = array();
|
|
||||||
$comments = array();
|
|
||||||
$inline_comments = array();
|
|
||||||
|
|
||||||
|
$body = id(new PhabricatorMetaMTAMailBody())
|
||||||
|
->setViewer($viewer);
|
||||||
|
|
||||||
|
$mock_uri = $object->getURI();
|
||||||
|
$mock_uri = PhabricatorEnv::getProductionURI($mock_uri);
|
||||||
|
|
||||||
|
$this->addHeadersAndCommentsToMailBody(
|
||||||
|
$body,
|
||||||
|
$xactions,
|
||||||
|
pht('View Mock'),
|
||||||
|
$mock_uri);
|
||||||
|
|
||||||
|
$type_inline = PholioMockInlineTransaction::TRANSACTIONTYPE;
|
||||||
|
|
||||||
|
$inlines = array();
|
||||||
foreach ($xactions as $xaction) {
|
foreach ($xactions as $xaction) {
|
||||||
if ($xaction->shouldHide()) {
|
if ($xaction->getTransactionType() == $type_inline) {
|
||||||
continue;
|
$inlines[] = $xaction;
|
||||||
}
|
|
||||||
$comment = $xaction->getComment();
|
|
||||||
switch ($xaction->getTransactionType()) {
|
|
||||||
case PholioMockInlineTransaction::TRANSACTIONTYPE:
|
|
||||||
if ($comment && strlen($comment->getContent())) {
|
|
||||||
$inline_comments[] = $comment;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case PhabricatorTransactions::TYPE_COMMENT:
|
|
||||||
if ($comment && strlen($comment->getContent())) {
|
|
||||||
$comments[] = $comment->getContent();
|
|
||||||
}
|
|
||||||
// fallthrough
|
|
||||||
default:
|
|
||||||
$headers[] = id(clone $xaction)
|
|
||||||
->setRenderingTarget('text')
|
|
||||||
->getTitle();
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$body->addRawSection(implode("\n", $headers));
|
$this->appendInlineCommentsForMail($object, $inlines, $body);
|
||||||
|
|
||||||
foreach ($comments as $comment) {
|
|
||||||
$body->addRawSection($comment);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($inline_comments) {
|
|
||||||
$body->addRawSection(pht('INLINE COMMENTS'));
|
|
||||||
foreach ($inline_comments as $comment) {
|
|
||||||
$text = pht(
|
|
||||||
'Image %d: %s',
|
|
||||||
$comment->getImageID(),
|
|
||||||
$comment->getContent());
|
|
||||||
$body->addRawSection($text);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$body->addLinkSection(
|
$body->addLinkSection(
|
||||||
pht('MOCK DETAIL'),
|
pht('MOCK DETAIL'),
|
||||||
|
@ -181,6 +160,51 @@ final class PholioMockEditor extends PhabricatorApplicationTransactionEditor {
|
||||||
return $body;
|
return $body;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function appendInlineCommentsForMail(
|
||||||
|
$object,
|
||||||
|
array $inlines,
|
||||||
|
PhabricatorMetaMTAMailBody $body) {
|
||||||
|
|
||||||
|
if (!$inlines) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$viewer = $this->requireActor();
|
||||||
|
|
||||||
|
$header = pht('INLINE COMMENTS');
|
||||||
|
$body->addRawPlaintextSection($header);
|
||||||
|
$body->addRawHTMLSection(phutil_tag('strong', array(), $header));
|
||||||
|
|
||||||
|
$image_ids = array();
|
||||||
|
foreach ($inlines as $inline) {
|
||||||
|
$comment = $inline->getComment();
|
||||||
|
$image_id = $comment->getImageID();
|
||||||
|
$image_ids[$image_id] = $image_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
$images = id(new PholioImageQuery())
|
||||||
|
->setViewer($viewer)
|
||||||
|
->withIDs($image_ids)
|
||||||
|
->execute();
|
||||||
|
$images = mpull($images, null, 'getID');
|
||||||
|
|
||||||
|
foreach ($inlines as $inline) {
|
||||||
|
$comment = $inline->getComment();
|
||||||
|
$content = $comment->getContent();
|
||||||
|
$image_id = $comment->getImageID();
|
||||||
|
$image = idx($images, $image_id);
|
||||||
|
if ($image) {
|
||||||
|
$image_name = $image->getName();
|
||||||
|
} else {
|
||||||
|
$image_name = pht('Unknown (ID %d)', $image_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
$body->addRemarkupSection(
|
||||||
|
pht('Image "%s":', $image_name),
|
||||||
|
$content);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected function getMailSubjectPrefix() {
|
protected function getMailSubjectPrefix() {
|
||||||
return PhabricatorEnv::getEnvConfig('metamta.pholio.subject-prefix');
|
return PhabricatorEnv::getEnvConfig('metamta.pholio.subject-prefix');
|
||||||
}
|
}
|
||||||
|
|
|
@ -58,6 +58,10 @@ final class PholioMock extends PholioDAO
|
||||||
return 'M'.$this->getID();
|
return 'M'.$this->getID();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getURI() {
|
||||||
|
return '/'.$this->getMonogram();
|
||||||
|
}
|
||||||
|
|
||||||
protected function getConfiguration() {
|
protected function getConfiguration() {
|
||||||
return array(
|
return array(
|
||||||
self::CONFIG_AUX_PHID => true,
|
self::CONFIG_AUX_PHID => true,
|
||||||
|
|
|
@ -53,4 +53,13 @@ final class PholioTransaction extends PhabricatorModularTransaction {
|
||||||
return $tags;
|
return $tags;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function isInlineCommentTransaction() {
|
||||||
|
switch ($this->getTransactionType()) {
|
||||||
|
case PholioMockInlineTransaction::TRANSACTIONTYPE:
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return parent::isInlineCommentTransaction();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue