@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
at recaptime-dev/main 67 lines 1.8 kB view raw
1<?php 2 3final 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}