Something went wrong. Try again.
@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
Something went wrong. Try again.
4.6 kB · 170 lines
PHP
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171<?php
final class DiffusionRepositoryIdentitySearchEngine extends PhabricatorApplicationSearchEngine {
public function getResultTypeDescription() { return pht('Repository Identities'); }
public function getApplicationClassName() { return PhabricatorDiffusionApplication::class; }
public function newQuery() { return new PhabricatorRepositoryIdentityQuery(); }
protected function buildCustomSearchFields() { return array( id(new PhabricatorUsersSearchField()) ->setLabel(pht('Matching Users')) ->setKey('effectivePHIDs') ->setAliases( array( 'effective', 'effectivePHID', )) ->setDescription(pht('Search for identities by effective user.')), id(new DiffusionIdentityAssigneeSearchField()) ->setLabel(pht('Assigned To')) ->setKey('assignedPHIDs') ->setAliases( array( 'assigned', 'assignedPHID', )) ->setDescription(pht('Search for identities by explicit assignee.')), id(new PhabricatorSearchTextField()) ->setLabel(pht('Identity Contains')) ->setKey('match') ->setDescription(pht('Search for identities by substring.')), id(new PhabricatorSearchThreeStateField()) ->setLabel(pht('Has Matching User')) ->setKey('hasEffectivePHID') ->setOptions( pht('(Show All)'), pht('Show Identities With Matching Users'), pht('Show Identities Without Matching Users')), ); }
protected function buildQueryFromParameters(array $map) { $query = $this->newQuery();
if ($map['hasEffectivePHID'] !== null) { $query->withHasEffectivePHID($map['hasEffectivePHID']); }
if ($map['match'] !== null) { $query->withIdentityNameLike($map['match']); }
if ($map['assignedPHIDs']) { $query->withAssignedPHIDs($map['assignedPHIDs']); }
if ($map['effectivePHIDs']) { $query->withEffectivePHIDs($map['effectivePHIDs']); }
return $query; }
protected function getURI($path) { return '/diffusion/identity/'.$path; }
protected function getBuiltinQueryNames() { $names = array( 'all' => pht('All Identities'), );
return $names; }
public function buildSavedQueryFromBuiltin($query_key) {
$query = $this->newSavedQuery(); $query->setQueryKey($query_key);
switch ($query_key) { case 'all': return $query; }
return parent::buildSavedQueryFromBuiltin($query_key); }
/** * @param array<PhabricatorRepositoryIdentity> $identities * @param PhabricatorSavedQuery $query * @param array<PhabricatorObjectHandle> $handles */ protected function renderResultList( array $identities, PhabricatorSavedQuery $query, array $handles) { assert_instances_of($identities, PhabricatorRepositoryIdentity::class);
$viewer = $this->requireViewer();
$list = id(new PHUIObjectItemListView()) ->setViewer($viewer);
$phids = array(); foreach ($identities as $identity) { $phids[] = $identity->getCurrentEffectiveUserPHID(); $phids[] = $identity->getManuallySetUserPHID(); }
$handles = $viewer->loadHandles($phids);
$unassigned = DiffusionIdentityUnassignedDatasource::FUNCTION_TOKEN;
foreach ($identities as $identity) { $item = id(new PHUIObjectItemView()) ->setObjectName($identity->getObjectName()) ->setHeader($identity->getIdentityShortName()) ->setHref($identity->getURI()) ->setObject($identity);
$status_icon = 'fa-circle-o grey';
$effective_phid = $identity->getCurrentEffectiveUserPHID(); if ($effective_phid) { $item->addIcon( 'fa-id-badge', pht('Matches User: %s', $handles[$effective_phid]->getName()));
$status_icon = 'fa-id-badge'; }
$assigned_phid = $identity->getManuallySetUserPHID(); if ($assigned_phid) { if ($assigned_phid === $unassigned) { $item->addIcon( 'fa-ban', pht('Explicitly Unassigned')); $status_icon = 'fa-ban'; } else { $item->addIcon( 'fa-user', pht('Assigned To: %s', $handles[$assigned_phid]->getName())); $status_icon = 'fa-user'; } }
$item->setStatusIcon($status_icon);
$list->addItem($item); }
$result = new PhabricatorApplicationSearchResultView(); $result->setObjectList($list); $result->setNoDataString(pht('No Identities found.'));
return $result; }
}