1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-12-27 16:00:59 +01:00

Expand the power of user filtering

Summary:
Ref T8387. This mostly merges D10565 + D10480. I'm going to touch this to add mailing list stuff shortly so I wanted to clean those up.

This isn't super pretty but is fully flexible and consistent with other modern query UIs.

This should be more-or-less backward compatible.

Test Plan: Fiddled with the new options.

Reviewers: btrahan

Reviewed By: btrahan

Subscribers: eadler, cburroughs, epriestley

Maniphest Tasks: T8044, T8387

Differential Revision: https://secure.phabricator.com/D13122
This commit is contained in:
epriestley 2015-06-02 10:22:26 -07:00
parent 8440b3efc0
commit 13f0dac0ed
2 changed files with 84 additions and 47 deletions

View file

@ -312,10 +312,11 @@ final class PhabricatorPeopleQuery
$this->dateCreatedBefore);
}
if ($this->isAdmin) {
if ($this->isAdmin !== null) {
$where[] = qsprintf(
$conn_r,
'user.isAdmin = 1');
'user.isAdmin = %d',
(int)$this->isAdmin);
}
if ($this->isDisabled !== null) {
@ -332,10 +333,11 @@ final class PhabricatorPeopleQuery
(int)$this->isApproved);
}
if ($this->isSystemAgent) {
if ($this->isSystemAgent !== null) {
$where[] = qsprintf(
$conn_r,
'user.isSystemAgent = 1');
'user.isSystemAgent = %d',
(int)$this->isSystemAgent);
}
if (strlen($this->nameLike)) {

View file

@ -20,10 +20,23 @@ final class PhabricatorPeopleSearchEngine
$saved->setParameter('usernames', $request->getStrList('usernames'));
$saved->setParameter('nameLike', $request->getStr('nameLike'));
$saved->setParameter('isAdmin', $request->getStr('isAdmin'));
$saved->setParameter('isDisabled', $request->getStr('isDisabled'));
$saved->setParameter('isSystemAgent', $request->getStr('isSystemAgent'));
$saved->setParameter('needsApproval', $request->getStr('needsApproval'));
$saved->setParameter(
'isAdmin',
$this->readBoolFromRequest($request, 'isAdmin'));
$saved->setParameter(
'isDisabled',
$this->readBoolFromRequest($request, 'isDisabled'));
$saved->setParameter(
'isSystemAgent',
$this->readBoolFromRequest($request, 'isSystemAgent'));
$saved->setParameter(
'needsApproval',
$this->readBoolFromRequest($request, 'needsApproval'));
$saved->setParameter('createdStart', $request->getStr('createdStart'));
$saved->setParameter('createdEnd', $request->getStr('createdEnd'));
@ -65,24 +78,21 @@ final class PhabricatorPeopleSearchEngine
$is_disabled = $saved->getParameter('isDisabled');
$is_system_agent = $saved->getParameter('isSystemAgent');
$needs_approval = $saved->getParameter('needsApproval');
$no_disabled = $saved->getParameter('noDisabled');
if ($is_admin) {
$query->withIsAdmin(true);
if ($is_admin !== null) {
$query->withIsAdmin($is_admin);
}
if ($is_disabled) {
$query->withIsDisabled(true);
} else if ($no_disabled) {
$query->withIsDisabled(false);
if ($is_disabled !== null) {
$query->withIsDisabled($is_disabled);
}
if ($is_system_agent) {
$query->withIsSystemAgent(true);
if ($is_system_agent !== null) {
$query->withIsSystemAgent($is_system_agent);
}
if ($needs_approval) {
$query->withIsApproved(false);
if ($needs_approval !== null) {
$query->withIsApproved(!$needs_approval);
}
$start = $this->parseDateTime($saved->getParameter('createdStart'));
@ -108,10 +118,10 @@ final class PhabricatorPeopleSearchEngine
$usernames = $saved->getParameter('usernames', array());
$like = $saved->getParameter('nameLike');
$is_admin = $saved->getParameter('isAdmin');
$is_disabled = $saved->getParameter('isDisabled');
$is_system_agent = $saved->getParameter('isSystemAgent');
$needs_approval = $saved->getParameter('needsApproval');
$is_admin = $this->getBoolFromQuery($saved, 'isAdmin');
$is_disabled = $this->getBoolFromQuery($saved, 'isDisabled');
$is_system_agent = $this->getBoolFromQuery($saved, 'isSystemAgent');
$needs_approval = $this->getBoolFromQuery($saved, 'needsApproval');
$form
->appendChild(
@ -125,28 +135,49 @@ final class PhabricatorPeopleSearchEngine
->setLabel(pht('Name Contains'))
->setValue($like))
->appendChild(
id(new AphrontFormCheckboxControl())
->setLabel('Role')
->addCheckbox(
'isAdmin',
1,
pht('Show only administrators.'),
$is_admin)
->addCheckbox(
'isDisabled',
1,
pht('Show only disabled users.'),
$is_disabled)
->addCheckbox(
'isSystemAgent',
1,
pht('Show only bots.'),
$is_system_agent)
->addCheckbox(
'needsApproval',
1,
pht('Show only users who need approval.'),
$needs_approval));
id(new AphrontFormSelectControl())
->setName('isAdmin')
->setLabel(pht('Administrators'))
->setValue($is_admin)
->setOptions(
array(
'' => pht('(Show All)'),
'true' => pht('Show Only Administrators'),
'false' => pht('Hide Administrators'),
)))
->appendChild(
id(new AphrontFormSelectControl())
->setName('isDisabled')
->setLabel(pht('Disabled'))
->setValue($is_disabled)
->setOptions(
array(
'' => pht('(Show All)'),
'true' => pht('Show Only Disabled Users'),
'false' => pht('Hide Disabled Users'),
)))
->appendChild(
id(new AphrontFormSelectControl())
->setName('isSystemAgent')
->setLabel(pht('Bots'))
->setValue($is_system_agent)
->setOptions(
array(
'' => pht('(Show All)'),
'true' => pht('Show Only Bots'),
'false' => pht('Hide Bots'),
)))
->appendChild(
id(new AphrontFormSelectControl())
->setName('needsApproval')
->setLabel(pht('Needs Approval'))
->setValue($needs_approval)
->setOptions(
array(
'' => pht('(Show All)'),
'true' => pht('Show Only Unapproved Users'),
'false' => pht('Hide Unapproved Users'),
)));
$this->appendCustomFieldsToForm($form, $saved);
@ -165,6 +196,7 @@ final class PhabricatorPeopleSearchEngine
protected function getBuiltinQueryNames() {
$names = array(
'active' => pht('Active'),
'all' => pht('All'),
);
@ -183,10 +215,13 @@ final class PhabricatorPeopleSearchEngine
switch ($query_key) {
case 'all':
return $query;
case 'active':
return $query
->setParameter('isDisabled', false);
case 'approval':
return $query
->setParameter('needsApproval', true)
->setParameter('noDisabled', true);
->setParameter('isDisabled', true);
}
return parent::buildSavedQueryFromBuiltin($query_key);
@ -240,7 +275,7 @@ final class PhabricatorPeopleSearchEngine
}
if ($user->getIsSystemAgent()) {
$item->addIcon('fa-desktop', pht('Bot/Script'));
$item->addIcon('fa-desktop', pht('Bot'));
}
if ($viewer->getIsAdmin()) {