@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
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}