@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
at upstream/main 80 lines 2.2 kB view raw
1<?php 2 3final class DifferentialMailEngineExtension 4 extends PhabricatorMailEngineExtension { 5 6 const EXTENSIONKEY = 'differential'; 7 8 public function supportsObject($object) { 9 return ($object instanceof DifferentialRevision); 10 } 11 12 public function newMailStampTemplates($object) { 13 return array( 14 id(new PhabricatorPHIDMailStamp()) 15 ->setKey('author') 16 ->setLabel(pht('Author')), 17 id(new PhabricatorPHIDMailStamp()) 18 ->setKey('reviewer') 19 ->setLabel(pht('Reviewer')), 20 id(new PhabricatorPHIDMailStamp()) 21 ->setKey('blocking-reviewer') 22 ->setLabel(pht('Reviewer')), 23 id(new PhabricatorPHIDMailStamp()) 24 ->setKey('resigned-reviewer') 25 ->setLabel(pht('Reviewer')), 26 id(new PhabricatorPHIDMailStamp()) 27 ->setKey('revision-repository') 28 ->setLabel(pht('Revision Repository')), 29 id(new PhabricatorPHIDMailStamp()) 30 ->setKey('revision-status') 31 ->setLabel(pht('Revision Status')), 32 ); 33 } 34 35 public function newMailStamps($object, array $xactions) { 36 $editor = $this->getEditor(); 37 $viewer = $this->getViewer(); 38 39 $revision = id(new DifferentialRevisionQuery()) 40 ->setViewer($viewer) 41 ->needReviewers(true) 42 ->withPHIDs(array($object->getPHID())) 43 ->executeOne(); 44 45 $reviewers = array(); 46 $blocking = array(); 47 $resigned = array(); 48 foreach ($revision->getReviewers() as $reviewer) { 49 $reviewer_phid = $reviewer->getReviewerPHID(); 50 51 if ($reviewer->isResigned()) { 52 $resigned[] = $reviewer_phid; 53 } else { 54 $reviewers[] = $reviewer_phid; 55 if ($reviewer->isBlocking()) { 56 $blocking[] = $reviewer_phid; 57 } 58 } 59 } 60 61 $this->getMailStamp('author') 62 ->setValue($revision->getAuthorPHID()); 63 64 $this->getMailStamp('reviewer') 65 ->setValue($reviewers); 66 67 $this->getMailStamp('blocking-reviewer') 68 ->setValue($blocking); 69 70 $this->getMailStamp('resigned-reviewer') 71 ->setValue($resigned); 72 73 $this->getMailStamp('revision-repository') 74 ->setValue($revision->getRepositoryPHID()); 75 76 $this->getMailStamp('revision-status') 77 ->setValue($revision->getModernRevisionStatus()); 78 } 79 80}