[ Index ] |
PHP Cross Reference of Phabricator |
[Summary view] [Print] [Text view]
1 <?php 2 3 final class HarbormasterBuildableViewController 4 extends HarbormasterController { 5 6 private $id; 7 8 public function willProcessRequest(array $data) { 9 $this->id = $data['id']; 10 } 11 12 public function processRequest() { 13 $request = $this->getRequest(); 14 $viewer = $request->getUser(); 15 16 $id = $this->id; 17 18 $buildable = id(new HarbormasterBuildableQuery()) 19 ->setViewer($viewer) 20 ->withIDs(array($id)) 21 ->needBuildableHandles(true) 22 ->needContainerHandles(true) 23 ->executeOne(); 24 if (!$buildable) { 25 return new Aphront404Response(); 26 } 27 28 // Pull builds and build targets. 29 $builds = id(new HarbormasterBuildQuery()) 30 ->setViewer($viewer) 31 ->withBuildablePHIDs(array($buildable->getPHID())) 32 ->needBuildTargets(true) 33 ->execute(); 34 35 $buildable->attachBuilds($builds); 36 37 $build_list = $this->buildBuildList($buildable); 38 39 $title = pht('Buildable %d', $id); 40 41 $header = id(new PHUIHeaderView()) 42 ->setHeader($title) 43 ->setUser($viewer) 44 ->setPolicyObject($buildable); 45 46 $box = id(new PHUIObjectBoxView()) 47 ->setHeader($header); 48 49 $xactions = id(new HarbormasterBuildableTransactionQuery()) 50 ->setViewer($viewer) 51 ->withObjectPHIDs(array($buildable->getPHID())) 52 ->execute(); 53 $timeline = id(new PhabricatorApplicationTransactionView()) 54 ->setUser($viewer) 55 ->setObjectPHID($buildable->getPHID()) 56 ->setTransactions($xactions); 57 58 $actions = $this->buildActionList($buildable); 59 $this->buildPropertyLists($box, $buildable, $actions); 60 61 $crumbs = $this->buildApplicationCrumbs(); 62 $crumbs->addTextCrumb("B{$id}"); 63 64 return $this->buildApplicationPage( 65 array( 66 $crumbs, 67 $box, 68 $build_list, 69 $timeline, 70 ), 71 array( 72 'title' => $title, 73 )); 74 } 75 76 private function buildActionList(HarbormasterBuildable $buildable) { 77 $request = $this->getRequest(); 78 $viewer = $request->getUser(); 79 $id = $buildable->getID(); 80 81 $list = id(new PhabricatorActionListView()) 82 ->setUser($viewer) 83 ->setObject($buildable) 84 ->setObjectURI($buildable->getMonogram()); 85 86 $can_edit = PhabricatorPolicyFilter::hasCapability( 87 $viewer, 88 $buildable, 89 PhabricatorPolicyCapability::CAN_EDIT); 90 91 $can_restart = false; 92 $can_resume = false; 93 $can_stop = false; 94 95 foreach ($buildable->getBuilds() as $build) { 96 if ($build->canRestartBuild()) { 97 $can_restart = true; 98 } 99 if ($build->canResumeBuild()) { 100 $can_resume = true; 101 } 102 if ($build->canStopBuild()) { 103 $can_stop = true; 104 } 105 } 106 107 $restart_uri = "buildable/{$id}/restart/"; 108 $stop_uri = "buildable/{$id}/stop/"; 109 $resume_uri = "buildable/{$id}/resume/"; 110 111 $list->addAction( 112 id(new PhabricatorActionView()) 113 ->setIcon('fa-repeat') 114 ->setName(pht('Restart All Builds')) 115 ->setHref($this->getApplicationURI($restart_uri)) 116 ->setWorkflow(true) 117 ->setDisabled(!$can_restart || !$can_edit)); 118 119 $list->addAction( 120 id(new PhabricatorActionView()) 121 ->setIcon('fa-pause') 122 ->setName(pht('Pause All Builds')) 123 ->setHref($this->getApplicationURI($stop_uri)) 124 ->setWorkflow(true) 125 ->setDisabled(!$can_stop || !$can_edit)); 126 127 $list->addAction( 128 id(new PhabricatorActionView()) 129 ->setIcon('fa-play') 130 ->setName(pht('Resume All Builds')) 131 ->setHref($this->getApplicationURI($resume_uri)) 132 ->setWorkflow(true) 133 ->setDisabled(!$can_resume || !$can_edit)); 134 135 return $list; 136 } 137 138 private function buildPropertyLists( 139 PHUIObjectBoxView $box, 140 HarbormasterBuildable $buildable, 141 PhabricatorActionListView $actions) { 142 $request = $this->getRequest(); 143 $viewer = $request->getUser(); 144 145 $properties = id(new PHUIPropertyListView()) 146 ->setUser($viewer) 147 ->setObject($buildable) 148 ->setActionList($actions); 149 $box->addPropertyList($properties); 150 151 $properties->addProperty( 152 pht('Buildable'), 153 $buildable->getBuildableHandle()->renderLink()); 154 155 if ($buildable->getContainerHandle() !== null) { 156 $properties->addProperty( 157 pht('Container'), 158 $buildable->getContainerHandle()->renderLink()); 159 } 160 161 $properties->addProperty( 162 pht('Origin'), 163 $buildable->getIsManualBuildable() 164 ? pht('Manual Buildable') 165 : pht('Automatic Buildable')); 166 167 } 168 169 private function buildBuildList(HarbormasterBuildable $buildable) { 170 $viewer = $this->getRequest()->getUser(); 171 172 $build_list = id(new PHUIObjectItemListView()) 173 ->setUser($viewer); 174 foreach ($buildable->getBuilds() as $build) { 175 $view_uri = $this->getApplicationURI('/build/'.$build->getID().'/'); 176 $item = id(new PHUIObjectItemView()) 177 ->setObjectName(pht('Build %d', $build->getID())) 178 ->setHeader($build->getName()) 179 ->setHref($view_uri); 180 181 $status = $build->getBuildStatus(); 182 $item->setBarColor(HarbormasterBuild::getBuildStatusColor($status)); 183 184 $item->addAttribute(HarbormasterBuild::getBuildStatusName($status)); 185 186 if ($build->isRestarting()) { 187 $item->addIcon('fa-repeat', pht('Restarting')); 188 } else if ($build->isStopping()) { 189 $item->addIcon('fa-pause', pht('Pausing')); 190 } else if ($build->isResuming()) { 191 $item->addIcon('fa-play', pht('Resuming')); 192 } 193 194 $build_id = $build->getID(); 195 196 $restart_uri = "build/restart/{$build_id}/buildable/"; 197 $resume_uri = "build/resume/{$build_id}/buildable/"; 198 $stop_uri = "build/stop/{$build_id}/buildable/"; 199 200 $item->addAction( 201 id(new PHUIListItemView()) 202 ->setIcon('fa-repeat') 203 ->setName(pht('Restart')) 204 ->setHref($this->getApplicationURI($restart_uri)) 205 ->setWorkflow(true) 206 ->setDisabled(!$build->canRestartBuild())); 207 208 if ($build->canResumeBuild()) { 209 $item->addAction( 210 id(new PHUIListItemView()) 211 ->setIcon('fa-play') 212 ->setName(pht('Resume')) 213 ->setHref($this->getApplicationURI($resume_uri)) 214 ->setWorkflow(true)); 215 } else { 216 $item->addAction( 217 id(new PHUIListItemView()) 218 ->setIcon('fa-pause') 219 ->setName(pht('Pause')) 220 ->setHref($this->getApplicationURI($stop_uri)) 221 ->setWorkflow(true) 222 ->setDisabled(!$build->canStopBuild())); 223 } 224 225 $targets = $build->getBuildTargets(); 226 227 if ($targets) { 228 $target_list = id(new PHUIStatusListView()); 229 foreach ($targets as $target) { 230 $status = $target->getTargetStatus(); 231 $icon = HarbormasterBuildTarget::getBuildTargetStatusIcon($status); 232 $color = HarbormasterBuildTarget::getBuildTargetStatusColor($status); 233 $status_name = 234 HarbormasterBuildTarget::getBuildTargetStatusName($status); 235 236 $name = $target->getName(); 237 238 $target_list->addItem( 239 id(new PHUIStatusItemView()) 240 ->setIcon($icon, $color, $status_name) 241 ->setTarget(pht('Target %d', $target->getID())) 242 ->setNote($name)); 243 } 244 245 $target_box = id(new PHUIBoxView()) 246 ->addPadding(PHUI::PADDING_SMALL) 247 ->appendChild($target_list); 248 249 $item->appendChild($target_box); 250 } 251 252 $build_list->addItem($item); 253 } 254 255 return $build_list; 256 } 257 258 }
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 |