Differential D20908 Diff 49852 src/applications/diffusion/query/DiffusionRepositoryIdentitySearchEngine.php
Changeset View
Changeset View
Standalone View
Standalone View
src/applications/diffusion/query/DiffusionRepositoryIdentitySearchEngine.php
Show All 11 Lines | final class DiffusionRepositoryIdentitySearchEngine | ||||
} | } | ||||
public function newQuery() { | public function newQuery() { | ||||
return new PhabricatorRepositoryIdentityQuery(); | return new PhabricatorRepositoryIdentityQuery(); | ||||
} | } | ||||
protected function buildCustomSearchFields() { | protected function buildCustomSearchFields() { | ||||
return array( | 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()) | id(new DiffusionIdentityAssigneeSearchField()) | ||||
->setLabel(pht('Assigned To')) | ->setLabel(pht('Assigned To')) | ||||
->setKey('assignee') | ->setKey('assignedPHIDs') | ||||
->setDescription(pht('Search for identities by assignee.')), | ->setAliases( | ||||
array( | |||||
'assigned', | |||||
'assignedPHID', | |||||
)) | |||||
->setDescription(pht('Search for identities by explicit assignee.')), | |||||
id(new PhabricatorSearchTextField()) | id(new PhabricatorSearchTextField()) | ||||
->setLabel(pht('Identity Contains')) | ->setLabel(pht('Identity Contains')) | ||||
->setKey('match') | ->setKey('match') | ||||
->setDescription(pht('Search for identities by substring.')), | ->setDescription(pht('Search for identities by substring.')), | ||||
id(new PhabricatorSearchThreeStateField()) | id(new PhabricatorSearchThreeStateField()) | ||||
->setLabel(pht('Is Assigned')) | ->setLabel(pht('Has Matching User')) | ||||
->setKey('hasEffectivePHID') | ->setKey('hasEffectivePHID') | ||||
->setOptions( | ->setOptions( | ||||
pht('(Show All)'), | pht('(Show All)'), | ||||
pht('Show Only Assigned Identities'), | pht('Show Identities With Matching Users'), | ||||
pht('Show Only Unassigned Identities')), | pht('Show Identities Without Matching Users')), | ||||
); | ); | ||||
} | } | ||||
protected function buildQueryFromParameters(array $map) { | protected function buildQueryFromParameters(array $map) { | ||||
$query = $this->newQuery(); | $query = $this->newQuery(); | ||||
if ($map['hasEffectivePHID'] !== null) { | if ($map['hasEffectivePHID'] !== null) { | ||||
$query->withHasEffectivePHID($map['hasEffectivePHID']); | $query->withHasEffectivePHID($map['hasEffectivePHID']); | ||||
} | } | ||||
if ($map['match'] !== null) { | if ($map['match'] !== null) { | ||||
$query->withIdentityNameLike($map['match']); | $query->withIdentityNameLike($map['match']); | ||||
} | } | ||||
if ($map['assignee']) { | if ($map['assignedPHIDs']) { | ||||
$query->withAssigneePHIDs($map['assignee']); | $query->withAssignedPHIDs($map['assignedPHIDs']); | ||||
} | |||||
if ($map['effectivePHIDs']) { | |||||
$query->withEffectivePHIDs($map['effectivePHIDs']); | |||||
} | } | ||||
return $query; | return $query; | ||||
} | } | ||||
protected function getURI($path) { | protected function getURI($path) { | ||||
return '/diffusion/identity/'.$path; | return '/diffusion/identity/'.$path; | ||||
} | } | ||||
Show All 22 Lines | final class DiffusionRepositoryIdentitySearchEngine | ||||
protected function renderResultList( | protected function renderResultList( | ||||
array $identities, | array $identities, | ||||
PhabricatorSavedQuery $query, | PhabricatorSavedQuery $query, | ||||
array $handles) { | array $handles) { | ||||
assert_instances_of($identities, 'PhabricatorRepositoryIdentity'); | assert_instances_of($identities, 'PhabricatorRepositoryIdentity'); | ||||
$viewer = $this->requireViewer(); | $viewer = $this->requireViewer(); | ||||
$list = new PHUIObjectItemListView(); | $list = id(new PHUIObjectItemListView()) | ||||
$list->setUser($viewer); | ->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) { | foreach ($identities as $identity) { | ||||
$item = id(new PHUIObjectItemView()) | $item = id(new PHUIObjectItemView()) | ||||
->setObjectName(pht('Identity %d', $identity->getID())) | ->setObjectName($identity->getObjectName()) | ||||
->setHeader($identity->getIdentityShortName()) | ->setHeader($identity->getIdentityShortName()) | ||||
->setHref($identity->getURI()) | ->setHref($identity->getURI()) | ||||
->setObject($identity); | ->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); | $list->addItem($item); | ||||
} | } | ||||
$result = new PhabricatorApplicationSearchResultView(); | $result = new PhabricatorApplicationSearchResultView(); | ||||
$result->setObjectList($list); | $result->setObjectList($list); | ||||
$result->setNoDataString(pht('No Identities found.')); | $result->setNoDataString(pht('No Identities found.')); | ||||
return $result; | return $result; | ||||
} | } | ||||
} | } |