Path: blob/master/src/applications/fund/query/FundInitiativeSearchEngine.php
12256 views
<?php12final class FundInitiativeSearchEngine3extends PhabricatorApplicationSearchEngine {45public function getResultTypeDescription() {6return pht('Fund Initiatives');7}89public function getApplicationClassName() {10return 'PhabricatorFundApplication';11}1213public function newQuery() {14return new FundInitiativeQuery();15}1617protected function buildCustomSearchFields() {18return array(19id(new PhabricatorUsersSearchField())20->setKey('ownerPHIDs')21->setAliases(array('owner', 'ownerPHID', 'owners'))22->setLabel(pht('Owners')),23id(new PhabricatorSearchCheckboxesField())24->setKey('statuses')25->setLabel(pht('Statuses'))26->setOptions(FundInitiative::getStatusNameMap()),27);28}2930protected function buildQueryFromParameters(array $map) {31$query = $this->newQuery();3233if ($map['ownerPHIDs']) {34$query->withOwnerPHIDs($map['ownerPHIDs']);35}3637if ($map['statuses']) {38$query->withStatuses($map['statuses']);39}4041return $query;42}4344protected function getURI($path) {45return '/fund/'.$path;46}4748protected function getBuiltinQueryNames() {49$names = array();5051$names['open'] = pht('Open Initiatives');52if ($this->requireViewer()->isLoggedIn()) {53$names['owned'] = pht('Owned Initiatives');54}55$names['all'] = pht('All Initiatives');5657return $names;58}5960public function buildSavedQueryFromBuiltin($query_key) {61$query = $this->newSavedQuery();62$query->setQueryKey($query_key);6364switch ($query_key) {65case 'all':66return $query;67case 'owned':68return $query->setParameter(69'ownerPHIDs',70array(71$this->requireViewer()->getPHID(),72));73case 'open':74return $query->setParameter(75'statuses',76array(77FundInitiative::STATUS_OPEN,78));79}8081return parent::buildSavedQueryFromBuiltin($query_key);82}8384protected function renderResultList(85array $initiatives,86PhabricatorSavedQuery $query,87array $handles) {88assert_instances_of($initiatives, 'FundInitiative');8990$viewer = $this->requireViewer();9192$load_phids = array();93foreach ($initiatives as $initiative) {94$load_phids[] = $initiative->getOwnerPHID();95}9697if ($initiatives) {98$edge_query = id(new PhabricatorEdgeQuery())99->withSourcePHIDs(mpull($initiatives, 'getPHID'))100->withEdgeTypes(101array(102PhabricatorProjectObjectHasProjectEdgeType::EDGECONST,103));104105$edge_query->execute();106107foreach ($edge_query->getDestinationPHIDs() as $phid) {108$load_phids[] = $phid;109}110}111112$handles = $viewer->loadHandles($load_phids);113$handles = iterator_to_array($handles);114115$list = new PHUIObjectItemListView();116foreach ($initiatives as $initiative) {117$owner_handle = $handles[$initiative->getOwnerPHID()];118119$item = id(new PHUIObjectItemView())120->setObjectName($initiative->getMonogram())121->setHeader($initiative->getName())122->setHref('/'.$initiative->getMonogram())123->addByline(pht('Owner: %s', $owner_handle->renderLink()));124125if ($initiative->isClosed()) {126$item->setDisabled(true);127}128129$project_phids = $edge_query->getDestinationPHIDs(130array(131$initiative->getPHID(),132));133134$project_handles = array_select_keys($handles, $project_phids);135if ($project_handles) {136$item->addAttribute(137id(new PHUIHandleTagListView())138->setLimit(4)139->setSlim(true)140->setHandles($project_handles));141}142143$list->addItem($item);144}145146$result = new PhabricatorApplicationSearchResultView();147$result->setObjectList($list);148$result->setNoDataString(pht('No initiatives found.'));149150return $result;151}152153}154155156