Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/phabricator
Path: blob/master/src/applications/harbormaster/controller/HarbormasterBuildActionController.php
12256 views
1
<?php
2
3
final class HarbormasterBuildActionController
4
extends HarbormasterController {
5
6
public function handleRequest(AphrontRequest $request) {
7
$viewer = $this->getViewer();
8
$id = $request->getURIData('id');
9
$action = $request->getURIData('action');
10
$via = $request->getURIData('via');
11
12
$build = id(new HarbormasterBuildQuery())
13
->setViewer($viewer)
14
->withIDs(array($id))
15
->requireCapabilities(
16
array(
17
PhabricatorPolicyCapability::CAN_VIEW,
18
PhabricatorPolicyCapability::CAN_EDIT,
19
))
20
->executeOne();
21
if (!$build) {
22
return new Aphront404Response();
23
}
24
25
$xaction =
26
HarbormasterBuildMessageTransaction::getTransactionObjectForMessageType(
27
$action);
28
29
if (!$xaction) {
30
return new Aphront404Response();
31
}
32
33
switch ($via) {
34
case 'buildable':
35
$return_uri = '/'.$build->getBuildable()->getMonogram();
36
break;
37
default:
38
$return_uri = $this->getApplicationURI('/build/'.$build->getID().'/');
39
break;
40
}
41
42
try {
43
$xaction->assertCanSendMessage($viewer, $build);
44
} catch (HarbormasterMessageException $ex) {
45
return $this->newDialog()
46
->setTitle($ex->getTitle())
47
->appendChild($ex->getBody())
48
->addCancelButton($return_uri);
49
}
50
51
if ($request->isDialogFormPost()) {
52
$build->sendMessage($viewer, $xaction->getHarbormasterBuildMessageType());
53
return id(new AphrontRedirectResponse())->setURI($return_uri);
54
}
55
56
$title = $xaction->newConfirmPromptTitle();
57
$body = $xaction->newConfirmPromptBody();
58
$submit = $xaction->getHarbormasterBuildMessageName();
59
60
return $this->newDialog()
61
->setTitle($title)
62
->appendChild($body)
63
->addCancelButton($return_uri)
64
->addSubmitButton($submit);
65
}
66
67
}
68
69