@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at recaptime-dev/main 146 lines 4.1 kB view raw
1<?php 2 3final class HarbormasterBuildSearchEngine 4 extends PhabricatorApplicationSearchEngine { 5 6 public function getResultTypeDescription() { 7 return pht('Harbormaster Builds'); 8 } 9 10 public function getApplicationClassName() { 11 return PhabricatorHarbormasterApplication::class; 12 } 13 14 public function newQuery() { 15 return new HarbormasterBuildQuery(); 16 } 17 18 protected function buildCustomSearchFields() { 19 return array( 20 id(new PhabricatorSearchDatasourceField()) 21 ->setLabel(pht('Build Plans')) 22 ->setKey('plans') 23 ->setAliases(array('plan')) 24 ->setDescription( 25 pht('Search for builds running a given build plan.')) 26 ->setDatasource(new HarbormasterBuildPlanDatasource()), 27 id(new PhabricatorPHIDsSearchField()) 28 ->setLabel(pht('Buildables')) 29 ->setKey('buildables') 30 ->setAliases(array('buildable')) 31 ->setDescription( 32 pht('Search for builds running against particular buildables.')), 33 id(new PhabricatorSearchDatasourceField()) 34 ->setLabel(pht('Statuses')) 35 ->setKey('statuses') 36 ->setAliases(array('status')) 37 ->setDescription( 38 pht('Search for builds with given statuses.')) 39 ->setDatasource(new HarbormasterBuildStatusDatasource()), 40 id(new PhabricatorSearchDatasourceField()) 41 ->setLabel(pht('Initiators')) 42 ->setKey('initiators') 43 ->setAliases(array('initiator')) 44 ->setDescription( 45 pht( 46 'Search for builds started by someone or something in particular.')) 47 ->setDatasource(new HarbormasterBuildInitiatorDatasource()), 48 ); 49 } 50 51 protected function getHiddenFields() { 52 return array( 53 'buildables', 54 ); 55 } 56 57 protected function buildQueryFromParameters(array $map) { 58 $query = $this->newQuery(); 59 60 if ($map['plans']) { 61 $query->withBuildPlanPHIDs($map['plans']); 62 } 63 64 if ($map['buildables']) { 65 $query->withBuildablePHIDs($map['buildables']); 66 } 67 68 if ($map['statuses']) { 69 $query->withBuildStatuses($map['statuses']); 70 } 71 72 if ($map['initiators']) { 73 $query->withInitiatorPHIDs($map['initiators']); 74 } 75 76 return $query; 77 } 78 79 protected function getURI($path) { 80 return '/harbormaster/build/'.$path; 81 } 82 83 protected function getBuiltinQueryNames() { 84 return array( 85 'initiated' => pht('My Builds'), 86 'all' => pht('All Builds'), 87 'waiting' => pht('Waiting'), 88 'active' => pht('Active'), 89 'completed' => pht('Completed'), 90 ); 91 } 92 93 public function buildSavedQueryFromBuiltin($query_key) { 94 $query = $this->newSavedQuery(); 95 $query->setQueryKey($query_key); 96 97 switch ($query_key) { 98 case 'initiated': 99 $viewer = $this->requireViewer(); 100 return $query->setParameter('initiators', array($viewer->getPHID())); 101 case 'all': 102 return $query; 103 case 'waiting': 104 return $query 105 ->setParameter( 106 'statuses', 107 HarbormasterBuildStatus::getWaitingStatusConstants()); 108 case 'active': 109 return $query 110 ->setParameter( 111 'statuses', 112 HarbormasterBuildStatus::getActiveStatusConstants()); 113 case 'completed': 114 return $query 115 ->setParameter( 116 'statuses', 117 HarbormasterBuildStatus::getCompletedStatusConstants()); 118 } 119 120 return parent::buildSavedQueryFromBuiltin($query_key); 121 } 122 123 /** 124 * @param array<HarbormasterBuild> $builds 125 * @param PhabricatorSavedQuery $query 126 * @param array<PhabricatorObjectHandle> $handles 127 */ 128 protected function renderResultList( 129 array $builds, 130 PhabricatorSavedQuery $query, 131 array $handles) { 132 assert_instances_of($builds, HarbormasterBuild::class); 133 134 $viewer = $this->requireViewer(); 135 136 $list = id(new HarbormasterBuildView()) 137 ->setViewer($viewer) 138 ->setBuilds($builds) 139 ->newObjectList(); 140 141 return id(new PhabricatorApplicationSearchResultView()) 142 ->setObjectList($list) 143 ->setNoDataString(pht('No builds found.')); 144 } 145 146}