Path: blob/master/src/applications/harbormaster/query/HarbormasterBuildableSearchEngine.php
12256 views
<?php12final class HarbormasterBuildableSearchEngine3extends PhabricatorApplicationSearchEngine {45public function getResultTypeDescription() {6return pht('Harbormaster Buildables');7}89public function getApplicationClassName() {10return 'PhabricatorHarbormasterApplication';11}1213public function newQuery() {14return new HarbormasterBuildableQuery();15}1617protected function buildCustomSearchFields() {18return array(19id(new PhabricatorSearchStringListField())20->setKey('objectPHIDs')21->setAliases(array('objects'))22->setLabel(pht('Objects'))23->setPlaceholder(pht('rXabcdef, PHID-DIFF-1234, ...'))24->setDescription(pht('Search for builds of particular objects.')),25id(new PhabricatorSearchStringListField())26->setKey('containerPHIDs')27->setAliases(array('containers'))28->setLabel(pht('Containers'))29->setPlaceholder(pht('rXYZ, R123, D456, ...'))30->setDescription(31pht('Search for builds by containing revision or repository.')),32id(new PhabricatorSearchCheckboxesField())33->setKey('statuses')34->setLabel(pht('Statuses'))35->setOptions(HarbormasterBuildableStatus::getOptionMap())36->setDescription(pht('Search for builds by buildable status.')),37id(new PhabricatorSearchThreeStateField())38->setLabel(pht('Manual'))39->setKey('manual')40->setDescription(41pht('Search for only manual or automatic buildables.'))42->setOptions(43pht('(Show All)'),44pht('Show Only Manual Builds'),45pht('Show Only Automated Builds')),46);47}4849private function resolvePHIDs(array $names) {50$viewer = $this->requireViewer();5152$objects = id(new PhabricatorObjectQuery())53->setViewer($viewer)54->withNames($names)55->execute();5657// TODO: Instead of using string lists, we should ideally be using some58// kind of smart field with resolver logic that can help users type the59// right stuff. For now, just return a bogus value here so nothing matches60// but the form doesn't explode.61if (!$objects) {62return array('-');63}6465return mpull($objects, 'getPHID');66}6768protected function buildQueryFromParameters(array $map) {69$query = $this->newQuery();7071if ($map['objectPHIDs']) {72$phids = $this->resolvePHIDs($map['objectPHIDs']);73if ($phids) {74$query->withBuildablePHIDs($phids);75}76}7778if ($map['containerPHIDs']) {79$phids = $this->resolvePHIDs($map['containerPHIDs']);80if ($phids) {81$query->withContainerPHIDs($phids);82}83}8485if ($map['statuses']) {86$query->withStatuses($map['statuses']);87}8889if ($map['manual'] !== null) {90$query->withManualBuildables($map['manual']);91}9293return $query;94}9596protected function getURI($path) {97return '/harbormaster/'.$path;98}99100protected function getBuiltinQueryNames() {101return array(102'all' => pht('All Buildables'),103);104}105106public function buildSavedQueryFromBuiltin($query_key) {107$query = $this->newSavedQuery();108$query->setQueryKey($query_key);109110switch ($query_key) {111case 'all':112return $query;113}114115return parent::buildSavedQueryFromBuiltin($query_key);116}117118protected function renderResultList(119array $buildables,120PhabricatorSavedQuery $query,121array $handles) {122assert_instances_of($buildables, 'HarbormasterBuildable');123124$viewer = $this->requireViewer();125126$phids = array();127foreach ($buildables as $buildable) {128$phids[] = $buildable->getBuildableObject()129->getHarbormasterBuildableDisplayPHID();130131$phids[] = $buildable->getContainerPHID();132$phids[] = $buildable->getBuildablePHID();133}134$handles = $viewer->loadHandles($phids);135136137$list = new PHUIObjectItemListView();138foreach ($buildables as $buildable) {139$id = $buildable->getID();140141$display_phid = $buildable->getBuildableObject()142->getHarbormasterBuildableDisplayPHID();143144$container_phid = $buildable->getContainerPHID();145$buildable_phid = $buildable->getBuildablePHID();146147$item = id(new PHUIObjectItemView())148->setObjectName(pht('Buildable %d', $buildable->getID()));149150if ($display_phid) {151$handle = $handles[$display_phid];152$item->setHeader($handle->getFullName());153}154155if ($container_phid && ($container_phid != $display_phid)) {156$handle = $handles[$container_phid];157$item->addAttribute($handle->getName());158}159160if ($buildable_phid && ($buildable_phid != $display_phid)) {161$handle = $handles[$buildable_phid];162$item->addAttribute($handle->getFullName());163}164165$item->setHref($buildable->getURI());166167if ($buildable->getIsManualBuildable()) {168$item->addIcon('fa-wrench grey', pht('Manual'));169}170171$status_icon = $buildable->getStatusIcon();172$status_color = $buildable->getStatusColor();173$status_label = $buildable->getStatusDisplayName();174175$item->setStatusIcon("{$status_icon} {$status_color}", $status_label);176177$list->addItem($item);178}179180$result = new PhabricatorApplicationSearchResultView();181$result->setObjectList($list);182$result->setNoDataString(pht('No buildables found.'));183184return $result;185}186187}188189190