mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-22 14:52:41 +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();
|
||||
|
||||
$body = new PhabricatorMetaMTAMailBody();
|
||||
$body->setViewer($this->requireActor());
|
||||
$body = id(new PhabricatorMetaMTAMailBody())
|
||||
->setViewer($viewer);
|
||||
|
||||
$revision_uri = $object->getURI();
|
||||
$revision_uri = PhabricatorEnv::getProductionURI($revision_uri);
|
||||
|
|
|
@ -128,51 +128,30 @@ final class PholioMockEditor extends PhabricatorApplicationTransactionEditor {
|
|||
PhabricatorLiskDAO $object,
|
||||
array $xactions) {
|
||||
|
||||
$body = new PhabricatorMetaMTAMailBody();
|
||||
$headers = array();
|
||||
$comments = array();
|
||||
$inline_comments = array();
|
||||
$viewer = $this->requireActor();
|
||||
|
||||
$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) {
|
||||
if ($xaction->shouldHide()) {
|
||||
continue;
|
||||
}
|
||||
$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;
|
||||
if ($xaction->getTransactionType() == $type_inline) {
|
||||
$inlines[] = $xaction;
|
||||
}
|
||||
}
|
||||
|
||||
$body->addRawSection(implode("\n", $headers));
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
$this->appendInlineCommentsForMail($object, $inlines, $body);
|
||||
|
||||
$body->addLinkSection(
|
||||
pht('MOCK DETAIL'),
|
||||
|
@ -181,6 +160,51 @@ final class PholioMockEditor extends PhabricatorApplicationTransactionEditor {
|
|||
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() {
|
||||
return PhabricatorEnv::getEnvConfig('metamta.pholio.subject-prefix');
|
||||
}
|
||||
|
|
|
@ -58,6 +58,10 @@ final class PholioMock extends PholioDAO
|
|||
return 'M'.$this->getID();
|
||||
}
|
||||
|
||||
public function getURI() {
|
||||
return '/'.$this->getMonogram();
|
||||
}
|
||||
|
||||
protected function getConfiguration() {
|
||||
return array(
|
||||
self::CONFIG_AUX_PHID => true,
|
||||
|
|
|
@ -53,4 +53,13 @@ final class PholioTransaction extends PhabricatorModularTransaction {
|
|||
return $tags;
|
||||
}
|
||||
|
||||
public function isInlineCommentTransaction() {
|
||||
switch ($this->getTransactionType()) {
|
||||
case PholioMockInlineTransaction::TRANSACTIONTYPE:
|
||||
return true;
|
||||
}
|
||||
|
||||
return parent::isInlineCommentTransaction();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue