Path: blob/master/src/applications/harbormaster/query/HarbormasterBuildPlanSearchEngine.php
12256 views
<?php12final class HarbormasterBuildPlanSearchEngine3extends PhabricatorApplicationSearchEngine {45public function getResultTypeDescription() {6return pht('Harbormaster Build Plans');7}89public function getApplicationClassName() {10return 'PhabricatorHarbormasterApplication';11}1213public function newQuery() {14return new HarbormasterBuildPlanQuery();15}1617protected function buildCustomSearchFields() {18return array(19id(new PhabricatorSearchTextField())20->setLabel(pht('Name Contains'))21->setKey('match')22->setDescription(pht('Search for namespaces by name substring.')),23id(new PhabricatorSearchCheckboxesField())24->setLabel(pht('Status'))25->setKey('status')26->setAliases(array('statuses'))27->setOptions(28array(29HarbormasterBuildPlan::STATUS_ACTIVE => pht('Active'),30HarbormasterBuildPlan::STATUS_DISABLED => pht('Disabled'),31)),32);33}3435protected function buildQueryFromParameters(array $map) {36$query = $this->newQuery();3738if ($map['match'] !== null) {39$query->withNameNgrams($map['match']);40}4142if ($map['status']) {43$query->withStatuses($map['status']);44}4546return $query;47}4849protected function getURI($path) {50return '/harbormaster/plan/'.$path;51}5253protected function getBuiltinQueryNames() {54return array(55'active' => pht('Active Plans'),56'all' => pht('All Plans'),57);58}5960public function buildSavedQueryFromBuiltin($query_key) {61$query = $this->newSavedQuery();62$query->setQueryKey($query_key);6364switch ($query_key) {65case 'active':66return $query->setParameter(67'status',68array(69HarbormasterBuildPlan::STATUS_ACTIVE,70));71case 'all':72return $query;73}7475return parent::buildSavedQueryFromBuiltin($query_key);76}7778protected function renderResultList(79array $plans,80PhabricatorSavedQuery $query,81array $handles) {82assert_instances_of($plans, 'HarbormasterBuildPlan');8384$viewer = $this->requireViewer();8586if ($plans) {87$edge_query = id(new PhabricatorEdgeQuery())88->withSourcePHIDs(mpull($plans, 'getPHID'))89->withEdgeTypes(90array(91PhabricatorProjectObjectHasProjectEdgeType::EDGECONST,92));9394$edge_query->execute();95}9697$list = new PHUIObjectItemListView();98foreach ($plans as $plan) {99$id = $plan->getID();100101$item = id(new PHUIObjectItemView())102->setObjectName(pht('Plan %d', $id))103->setHeader($plan->getName());104105if ($plan->isDisabled()) {106$item->setDisabled(true);107}108109if ($plan->isAutoplan()) {110$item->addIcon('fa-lock grey', pht('Autoplan'));111}112113$item->setHref($this->getApplicationURI("plan/{$id}/"));114115$phid = $plan->getPHID();116$project_phids = $edge_query->getDestinationPHIDs(array($phid));117$project_handles = $viewer->loadHandles($project_phids);118119$item->addAttribute(120id(new PHUIHandleTagListView())121->setLimit(4)122->setNoDataString(pht('No Projects'))123->setSlim(true)124->setHandles($project_handles));125126$list->addItem($item);127}128129$result = new PhabricatorApplicationSearchResultView();130$result->setObjectList($list);131$result->setNoDataString(pht('No build plans found.'));132133return $result;134135}136137}138139140