Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/phabricator
Path: blob/master/src/applications/differential/customfield/DifferentialDraftField.php
12256 views
1
<?php
2
3
final class DifferentialDraftField
4
extends DifferentialCoreCustomField {
5
6
public function getFieldKey() {
7
return 'differential:draft';
8
}
9
10
public function getFieldName() {
11
return pht('Draft');
12
}
13
14
public function getFieldDescription() {
15
return pht('Show a warning about draft revisions.');
16
}
17
18
protected function readValueFromRevision(
19
DifferentialRevision $revision) {
20
return null;
21
}
22
23
public function shouldAppearInPropertyView() {
24
return true;
25
}
26
27
public function renderPropertyViewValue(array $handles) {
28
return null;
29
}
30
31
public function getWarningsForRevisionHeader(array $handles) {
32
$viewer = $this->getViewer();
33
$revision = $this->getObject();
34
35
if (!$revision->isDraft()) {
36
return array();
37
}
38
39
// If the author has held this revision as a draft explicitly, don't
40
// show any misleading messages about it autosubmitting later. We do show
41
// reminder text.
42
if ($revision->getHoldAsDraft()) {
43
return array(
44
pht(
45
'This is a draft revision that has not yet been submitted for '.
46
'review.'),
47
);
48
}
49
50
$warnings = array();
51
52
$blocking_map = array(
53
HarbormasterBuildStatus::STATUS_FAILED,
54
HarbormasterBuildStatus::STATUS_ABORTED,
55
HarbormasterBuildStatus::STATUS_ERROR,
56
HarbormasterBuildStatus::STATUS_PAUSED,
57
HarbormasterBuildStatus::STATUS_DEADLOCKED,
58
);
59
$blocking_map = array_fuse($blocking_map);
60
61
$builds = $revision->loadImpactfulBuilds($viewer);
62
63
$waiting = array();
64
$blocking = array();
65
foreach ($builds as $build) {
66
if (isset($blocking_map[$build->getBuildStatus()])) {
67
$blocking[] = $build;
68
} else {
69
$waiting[] = $build;
70
}
71
}
72
73
$blocking_list = $viewer->renderHandleList(mpull($blocking, 'getPHID'))
74
->setAsInline(true);
75
$waiting_list = $viewer->renderHandleList(mpull($waiting, 'getPHID'))
76
->setAsInline(true);
77
78
if ($blocking) {
79
$warnings[] = pht(
80
'This draft revision will not be submitted for review because %s '.
81
'build(s) failed: %s.',
82
phutil_count($blocking),
83
$blocking_list);
84
$warnings[] = pht(
85
'Fix build failures and update the revision.');
86
} else if ($waiting) {
87
$warnings[] = pht(
88
'This draft revision will be sent for review once %s '.
89
'build(s) pass: %s.',
90
phutil_count($waiting),
91
$waiting_list);
92
} else {
93
$warnings[] = pht(
94
'This is a draft revision that has not yet been submitted for '.
95
'review.');
96
}
97
98
return $warnings;
99
}
100
101
public function getWarningsForDetailView() {
102
$revision = $this->getObject();
103
104
if ($revision->getShouldBroadcast()) {
105
return array();
106
}
107
108
return array(
109
pht(
110
'This revision is currently a draft. You can leave comments, but '.
111
'no one will be notified until the revision is submitted for '.
112
'review.'),
113
);
114
}
115
116
}
117
118