3 final class HarbormasterBuildableActionController
4 extends HarbormasterController
{
6 public function handleRequest(AphrontRequest
$request) {
7 $viewer = $this->getViewer();
8 $id = $request->getURIData('id');
9 $action = $request->getURIData('action');
11 $buildable = id(new HarbormasterBuildableQuery())
15 ->requireCapabilities(
17 PhabricatorPolicyCapability
::CAN_VIEW
,
18 PhabricatorPolicyCapability
::CAN_EDIT
,
22 return new Aphront404Response();
26 HarbormasterBuildMessageTransaction
::getTransactionObjectForMessageType(
29 return new Aphront404Response();
32 $return_uri = '/'.$buildable->getMonogram();
34 // See T13348. Actions may apply to only a subset of builds, so give the
35 // user a preview of what will happen.
40 $builds = $buildable->getBuilds();
41 foreach ($builds as $key => $build) {
44 $message->assertCanSendMessage($viewer, $build);
45 $can_send[$key] = $build;
46 } catch (HarbormasterMessageException
$ex) {
51 $icon_icon = $message->getIcon();
52 $icon_color = 'green';
54 $title = $message->getHarbormasterBuildMessageName();
55 $body = $message->getHarbormasterBuildableMessageEffect();
57 $icon_icon = 'fa-times';
60 $title = $ex->getTitle();
61 $body = $ex->getBody();
64 $icon = id(new PHUIIconView())
66 ->setColor($icon_color);
68 $build_name = phutil_tag(
71 'href' => $build->getURI(),
74 pht('%s %s', $build->getObjectName(), $build->getName()));
84 $table = id(new AphrontTableView($rows))
103 'class' => 'mlt mlb',
107 if ($request->isDialogFormPost() && $can_send) {
108 $editor = id(new HarbormasterBuildableTransactionEditor())
110 ->setContentSourceFromRequest($request)
111 ->setContinueOnNoEffect(true)
112 ->setContinueOnMissingFields(true);
114 $xaction_type = HarbormasterBuildableMessageTransaction
::TRANSACTIONTYPE
;
116 $xaction = id(new HarbormasterBuildableTransaction())
117 ->setTransactionType($xaction_type)
118 ->setNewValue($action);
120 $editor->applyTransactions($buildable, array($xaction));
122 foreach ($can_send as $build) {
125 $message->getHarbormasterBuildMessageType());
128 return id(new AphrontRedirectResponse())->setURI($return_uri);
132 $title = pht('No Builds');
134 'This buildable has no builds, so you can not issue any commands.');
137 $title = $message->newBuildableConfirmPromptTitle(
141 $body = $message->newBuildableConfirmPromptBody(
145 $title = pht('Unable to Send Command');
147 'You can not send this command to any of the current builds '.
148 'for this buildable.');
152 pht('Builds for this buildable:'),
158 $warnings = $message->newBuildableConfirmPromptWarnings(
163 $body[] = id(new PHUIInfoView())
164 ->setSeverity(PHUIInfoView
::SEVERITY_WARNING
)
165 ->setErrors($warnings);
168 $submit = $message->getHarbormasterBuildableMessageName();
170 $dialog = $this->newDialog()
171 ->setWidth(AphrontDialogView
::WIDTH_FULL
)
174 ->addCancelButton($return_uri);
177 $dialog->addSubmitButton($submit);