Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/phabricator
Path: blob/master/src/applications/diffusion/xaction/DiffusionCommitAuditTransaction.php
12241 views
1
<?php
2
3
abstract class DiffusionCommitAuditTransaction
4
extends DiffusionCommitActionTransaction {
5
6
protected function getCommitActionGroupKey() {
7
return DiffusionCommitEditEngine::ACTIONGROUP_AUDIT;
8
}
9
10
public function generateOldValue($object) {
11
return false;
12
}
13
14
protected function isViewerAnyAuditor(
15
PhabricatorRepositoryCommit $commit,
16
PhabricatorUser $viewer) {
17
return ($this->getViewerAuditStatus($commit, $viewer) !== null);
18
}
19
20
protected function isViewerAnyActiveAuditor(
21
PhabricatorRepositoryCommit $commit,
22
PhabricatorUser $viewer) {
23
24
// This omits inactive states; currently just "Resigned".
25
$active = array(
26
PhabricatorAuditRequestStatus::AUDIT_REQUIRED,
27
PhabricatorAuditRequestStatus::CONCERNED,
28
PhabricatorAuditRequestStatus::ACCEPTED,
29
PhabricatorAuditRequestStatus::AUDIT_REQUESTED,
30
);
31
$active = array_fuse($active);
32
33
$viewer_status = $this->getViewerAuditStatus($commit, $viewer);
34
35
return isset($active[$viewer_status]);
36
}
37
38
protected function isViewerFullyAccepted(
39
PhabricatorRepositoryCommit $commit,
40
PhabricatorUser $viewer) {
41
return $this->isViewerAuditStatusFullyAmong(
42
$commit,
43
$viewer,
44
array(
45
PhabricatorAuditRequestStatus::ACCEPTED,
46
));
47
}
48
49
protected function isViewerFullyRejected(
50
PhabricatorRepositoryCommit $commit,
51
PhabricatorUser $viewer) {
52
return $this->isViewerAuditStatusFullyAmong(
53
$commit,
54
$viewer,
55
array(
56
PhabricatorAuditRequestStatus::CONCERNED,
57
));
58
}
59
60
protected function getViewerAuditStatus(
61
PhabricatorRepositoryCommit $commit,
62
PhabricatorUser $viewer) {
63
64
if (!$viewer->getPHID()) {
65
return null;
66
}
67
68
foreach ($commit->getAudits() as $audit) {
69
if ($audit->getAuditorPHID() != $viewer->getPHID()) {
70
continue;
71
}
72
73
return $audit->getAuditStatus();
74
}
75
76
return null;
77
}
78
79
protected function isViewerAuditStatusFullyAmong(
80
PhabricatorRepositoryCommit $commit,
81
PhabricatorUser $viewer,
82
array $status_list) {
83
84
$status = $this->getViewerAuditStatus($commit, $viewer);
85
if ($status === null) {
86
return false;
87
}
88
89
$status_map = array_fuse($status_list);
90
foreach ($commit->getAudits() as $audit) {
91
if (!$commit->hasAuditAuthority($viewer, $audit)) {
92
continue;
93
}
94
95
$status = $audit->getAuditStatus();
96
if (isset($status_map[$status])) {
97
continue;
98
}
99
100
return false;
101
}
102
103
return true;
104
}
105
106
protected function applyAuditorEffect(
107
PhabricatorRepositoryCommit $commit,
108
PhabricatorUser $viewer,
109
$value,
110
$status) {
111
112
$actor = $this->getActor();
113
$acting_phid = $this->getActingAsPHID();
114
115
$audits = $commit->getAudits();
116
$audits = mpull($audits, null, 'getAuditorPHID');
117
118
$map = array();
119
120
$with_authority = ($status != PhabricatorAuditRequestStatus::RESIGNED);
121
if ($with_authority) {
122
foreach ($audits as $audit) {
123
if ($commit->hasAuditAuthority($actor, $audit, $acting_phid)) {
124
$map[$audit->getAuditorPHID()] = $status;
125
}
126
}
127
}
128
129
// In all cases, you affect yourself.
130
$map[$viewer->getPHID()] = $status;
131
132
$this->updateAudits($commit, $map);
133
}
134
135
}
136
137