Path: blob/master/src/applications/harbormaster/controller/HarbormasterStepAddController.php
12256 views
<?php12final class HarbormasterStepAddController3extends HarbormasterPlanController {45public function handleRequest(AphrontRequest $request) {6$viewer = $this->getViewer();78$plan = id(new HarbormasterBuildPlanQuery())9->setViewer($viewer)10->withIDs(array($request->getURIData('id')))11->requireCapabilities(12array(13PhabricatorPolicyCapability::CAN_VIEW,14PhabricatorPolicyCapability::CAN_EDIT,15))16->executeOne();17if (!$plan) {18return new Aphront404Response();19}2021$plan_id = $plan->getID();22$cancel_uri = $this->getApplicationURI("plan/{$plan_id}/");23$plan_title = pht('Plan %d', $plan_id);2425$all = HarbormasterBuildStepImplementation::getImplementations();26$all = msort($all, 'getName');2728$all_groups = HarbormasterBuildStepGroup::getAllGroups();29foreach ($all as $impl) {30$group_key = $impl->getBuildStepGroupKey();31if (empty($all_groups[$group_key])) {32throw new Exception(33pht(34'Build step "%s" has step group key "%s", but no step group '.35'with that key exists.',36get_class($impl),37$group_key));38}39}4041$groups = mgroup($all, 'getBuildStepGroupKey');42$boxes = array();4344$enabled_groups = HarbormasterBuildStepGroup::getAllEnabledGroups();45foreach ($enabled_groups as $group) {46$list = id(new PHUIObjectItemListView())47->setNoDataString(48pht('This group has no available build steps.'));4950$steps = idx($groups, $group->getGroupKey(), array());5152foreach ($steps as $key => $impl) {53if ($impl->shouldRequireAutotargeting()) {54unset($steps[$key]);55continue;56}57}5859if (!$steps && !$group->shouldShowIfEmpty()) {60continue;61}6263foreach ($steps as $key => $impl) {64$class = get_class($impl);6566$new_uri = $this->getApplicationURI("step/new/{$plan_id}/{$class}/");6768$item = id(new PHUIObjectItemView())69->setHeader($impl->getName())70->setHref($new_uri)71->addAttribute($impl->getGenericDescription());7273$list->addItem($item);74}7576$box = id(new PHUIObjectBoxView())77->setHeaderText($group->getGroupName())78->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)79->appendChild($list);8081$boxes[] = $box;82}8384$crumbs = $this->buildApplicationCrumbs()85->addTextCrumb($plan_title, $cancel_uri)86->addTextCrumb(pht('Add Build Step'))87->setBorder(true);8889$title = array($plan_title, pht('Add Build Step'));9091$header = id(new PHUIHeaderView())92->setHeader(pht('Add Build Step'))93->setHeaderIcon('fa-plus-square');9495$view = id(new PHUITwoColumnView())96->setHeader($header)97->setFooter(array(98$boxes,99));100101return $this->newPage()102->setTitle($title)103->setCrumbs($crumbs)104->appendChild($view);105106}107108}109110111