Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/phabricator
Path: blob/master/src/applications/diffusion/view/DiffusionView.php
12242 views
1
<?php
2
3
abstract class DiffusionView extends AphrontView {
4
5
private $diffusionRequest;
6
7
final public function setDiffusionRequest(DiffusionRequest $request) {
8
$this->diffusionRequest = $request;
9
return $this;
10
}
11
12
final public function getDiffusionRequest() {
13
return $this->diffusionRequest;
14
}
15
16
final public function linkHistory($path) {
17
$href = $this->getDiffusionRequest()->generateURI(
18
array(
19
'action' => 'history',
20
'path' => $path,
21
));
22
23
return $this->renderHistoryLink($href);
24
}
25
26
final public function linkBranchHistory($branch) {
27
$href = $this->getDiffusionRequest()->generateURI(
28
array(
29
'action' => 'history',
30
'branch' => $branch,
31
));
32
33
return $this->renderHistoryLink($href);
34
}
35
36
final public function linkTagHistory($tag) {
37
$href = $this->getDiffusionRequest()->generateURI(
38
array(
39
'action' => 'history',
40
'commit' => $tag,
41
));
42
43
return $this->renderHistoryLink($href);
44
}
45
46
private function renderHistoryLink($href) {
47
return javelin_tag(
48
'a',
49
array(
50
'href' => $href,
51
'class' => 'diffusion-link-icon',
52
'sigil' => 'has-tooltip',
53
'meta' => array(
54
'tip' => pht('History'),
55
'align' => 'E',
56
),
57
),
58
id(new PHUIIconView())->setIcon('fa-history bluegrey'));
59
}
60
61
final public function linkBrowse(
62
$path,
63
array $details = array(),
64
$button = false) {
65
require_celerity_resource('diffusion-icons-css');
66
Javelin::initBehavior('phabricator-tooltips');
67
68
$file_type = idx($details, 'type');
69
unset($details['type']);
70
71
$display_name = idx($details, 'name');
72
unset($details['name']);
73
74
if ($display_name !== null && strlen($display_name)) {
75
$display_name = phutil_tag(
76
'span',
77
array(
78
'class' => 'diffusion-browse-name',
79
),
80
$display_name);
81
}
82
83
if (isset($details['external'])) {
84
$params = array(
85
'uri' => idx($details, 'external'),
86
'id' => idx($details, 'hash'),
87
);
88
89
$href = new PhutilURI('/diffusion/external/', $params);
90
$tip = pht('Browse External');
91
} else {
92
$href = $this->getDiffusionRequest()->generateURI(
93
$details + array(
94
'action' => 'browse',
95
'path' => $path,
96
));
97
$tip = pht('Browse');
98
}
99
100
$icon = DifferentialChangeType::getIconForFileType($file_type);
101
$color = DifferentialChangeType::getIconColorForFileType($file_type);
102
$icon_view = id(new PHUIIconView())
103
->setIcon($icon.' '.$color);
104
105
// If we're rendering a file or directory name, don't show the tooltip.
106
if ($display_name !== null) {
107
$sigil = null;
108
$meta = null;
109
} else {
110
$sigil = 'has-tooltip';
111
$meta = array(
112
'tip' => $tip,
113
'align' => 'E',
114
);
115
}
116
117
if ($button) {
118
return id(new PHUIButtonView())
119
->setTag('a')
120
->setIcon('fa-code')
121
->setHref($href)
122
->setToolTip(pht('Browse'))
123
->setButtonType(PHUIButtonView::BUTTONTYPE_SIMPLE);
124
}
125
126
return javelin_tag(
127
'a',
128
array(
129
'href' => $href,
130
'class' => 'diffusion-link-icon',
131
'sigil' => $sigil,
132
'meta' => $meta,
133
),
134
array(
135
$icon_view,
136
$display_name,
137
));
138
}
139
140
final public static function linkCommit(
141
PhabricatorRepository $repository,
142
$commit,
143
$summary = '') {
144
145
$commit_name = $repository->formatCommitName($commit, $local = true);
146
147
if (strlen($summary)) {
148
$commit_name .= ': '.$summary;
149
}
150
151
return phutil_tag(
152
'a',
153
array(
154
'href' => $repository->getCommitURI($commit),
155
),
156
$commit_name);
157
}
158
159
final public static function linkDetail(
160
PhabricatorRepository $repository,
161
$commit,
162
$detail) {
163
164
return phutil_tag(
165
'a',
166
array(
167
'href' => $repository->getCommitURI($commit),
168
),
169
$detail);
170
}
171
172
final public static function renderName($name) {
173
$email = new PhutilEmailAddress($name);
174
if ($email->getDisplayName() && $email->getDomainName()) {
175
Javelin::initBehavior('phabricator-tooltips', array());
176
require_celerity_resource('aphront-tooltip-css');
177
return javelin_tag(
178
'span',
179
array(
180
'sigil' => 'has-tooltip',
181
'meta' => array(
182
'tip' => $email->getAddress(),
183
'align' => 'S',
184
'size' => 'auto',
185
),
186
),
187
$email->getDisplayName());
188
}
189
return hsprintf('%s', $name);
190
}
191
192
final protected function renderBuildable(
193
HarbormasterBuildable $buildable,
194
$type = null) {
195
Javelin::initBehavior('phabricator-tooltips');
196
197
$icon = $buildable->getStatusIcon();
198
$color = $buildable->getStatusColor();
199
$name = $buildable->getStatusDisplayName();
200
201
if ($type == 'button') {
202
return id(new PHUIButtonView())
203
->setTag('a')
204
->setText($name)
205
->setIcon($icon)
206
->setColor($color)
207
->setHref('/'.$buildable->getMonogram())
208
->addClass('mmr')
209
->setButtonType(PHUIButtonView::BUTTONTYPE_SIMPLE)
210
->addClass('diffusion-list-build-status');
211
}
212
213
return id(new PHUIIconView())
214
->setIcon($icon.' '.$color)
215
->addSigil('has-tooltip')
216
->setHref('/'.$buildable->getMonogram())
217
->setMetadata(
218
array(
219
'tip' => $name,
220
));
221
222
}
223
224
final protected function loadBuildables(array $commits) {
225
assert_instances_of($commits, 'PhabricatorRepositoryCommit');
226
227
if (!$commits) {
228
return array();
229
}
230
231
$viewer = $this->getUser();
232
233
$harbormaster_app = 'PhabricatorHarbormasterApplication';
234
$have_harbormaster = PhabricatorApplication::isClassInstalledForViewer(
235
$harbormaster_app,
236
$viewer);
237
238
if ($have_harbormaster) {
239
$buildables = id(new HarbormasterBuildableQuery())
240
->setViewer($viewer)
241
->withBuildablePHIDs(mpull($commits, 'getPHID'))
242
->withManualBuildables(false)
243
->execute();
244
$buildables = mpull($buildables, null, 'getBuildablePHID');
245
} else {
246
$buildables = array();
247
}
248
249
return $buildables;
250
}
251
252
}
253
254