[ Index ] |
PHP Cross Reference of Phabricator |
[Summary view] [Print] [Text view]
1 <?php 2 3 final class HarbormasterBuildableActionController 4 extends HarbormasterController { 5 6 private $id; 7 private $action; 8 9 public function willProcessRequest(array $data) { 10 $this->id = $data['id']; 11 $this->action = $data['action']; 12 } 13 14 public function processRequest() { 15 $request = $this->getRequest(); 16 $viewer = $request->getUser(); 17 $command = $this->action; 18 19 $buildable = id(new HarbormasterBuildableQuery()) 20 ->setViewer($viewer) 21 ->withIDs(array($this->id)) 22 ->needBuilds(true) 23 ->requireCapabilities( 24 array( 25 PhabricatorPolicyCapability::CAN_VIEW, 26 PhabricatorPolicyCapability::CAN_EDIT, 27 )) 28 ->executeOne(); 29 if (!$buildable) { 30 return new Aphront404Response(); 31 } 32 33 $issuable = array(); 34 35 foreach ($buildable->getBuilds() as $build) { 36 switch ($command) { 37 case HarbormasterBuildCommand::COMMAND_RESTART: 38 if ($build->canRestartBuild()) { 39 $issuable[] = $build; 40 } 41 break; 42 case HarbormasterBuildCommand::COMMAND_STOP: 43 if ($build->canStopBuild()) { 44 $issuable[] = $build; 45 } 46 break; 47 case HarbormasterBuildCommand::COMMAND_RESUME: 48 if ($build->canResumeBuild()) { 49 $issuable[] = $build; 50 } 51 break; 52 default: 53 return new Aphront400Response(); 54 } 55 } 56 57 $return_uri = '/'.$buildable->getMonogram(); 58 if ($request->isDialogFormPost() && $issuable) { 59 $editor = id(new HarbormasterBuildableTransactionEditor()) 60 ->setActor($viewer) 61 ->setContentSourceFromRequest($request) 62 ->setContinueOnNoEffect(true) 63 ->setContinueOnMissingFields(true); 64 65 $xaction = id(new HarbormasterBuildableTransaction()) 66 ->setTransactionType(HarbormasterBuildableTransaction::TYPE_COMMAND) 67 ->setNewValue($command); 68 69 $editor->applyTransactions($buildable, array($xaction)); 70 71 $build_editor = id(new HarbormasterBuildTransactionEditor()) 72 ->setActor($viewer) 73 ->setContentSourceFromRequest($request) 74 ->setContinueOnNoEffect(true) 75 ->setContinueOnMissingFields(true); 76 77 foreach ($issuable as $build) { 78 $xaction = id(new HarbormasterBuildTransaction()) 79 ->setTransactionType(HarbormasterBuildTransaction::TYPE_COMMAND) 80 ->setNewValue($command); 81 $build_editor->applyTransactions($build, array($xaction)); 82 } 83 84 return id(new AphrontRedirectResponse())->setURI($return_uri); 85 } 86 87 switch ($command) { 88 case HarbormasterBuildCommand::COMMAND_RESTART: 89 if ($issuable) { 90 $title = pht('Really restart all builds?'); 91 $body = pht( 92 'Progress on all builds will be discarded, and all builds will '. 93 'restart. Side effects of the builds will occur again. Really '. 94 'restart all builds?'); 95 $submit = pht('Restart All Builds'); 96 } else { 97 $title = pht('Unable to Restart Build'); 98 $body = pht('No builds can be restarted.'); 99 } 100 break; 101 case HarbormasterBuildCommand::COMMAND_STOP: 102 if ($issuable) { 103 $title = pht('Really stop all builds?'); 104 $body = pht( 105 'If you stop all build, work will halt once the current steps '. 106 'complete. You can resume the builds later.'); 107 $submit = pht('Stop All Builds'); 108 } else { 109 $title = pht('Unable to Stop Build'); 110 $body = pht('No builds can be stopped.'); 111 } 112 break; 113 case HarbormasterBuildCommand::COMMAND_RESUME: 114 if ($issuable) { 115 $title = pht('Really resume all builds?'); 116 $body = pht('Work will continue on all builds. Really resume?'); 117 $submit = pht('Resume All Builds'); 118 } else { 119 $title = pht('Unable to Resume Build'); 120 $body = pht('No builds can be resumed.'); 121 } 122 break; 123 } 124 125 $dialog = id(new AphrontDialogView()) 126 ->setUser($viewer) 127 ->setTitle($title) 128 ->appendChild($body) 129 ->addCancelButton($return_uri); 130 131 if ($issuable) { 132 $dialog->addSubmitButton($submit); 133 } 134 135 return id(new AphrontDialogResponse())->setDialog($dialog); 136 } 137 138 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Sun Nov 30 09:20:46 2014 | Cross-referenced by PHPXref 0.7.1 |