Skip to content

Commit 59cea9b

Browse files
author
epriestley
committed
Implement ApplicationSearch in People
Summary: Ref T2625. Fixes T2812. Implement ApplicationSearch in People. {F44788} Test Plan: Made People queries. Used Conduit. Used `@mentions`. Reviewers: btrahan, chad Reviewed By: chad CC: aran Maniphest Tasks: T2625, T2812 Differential Revision: https://secure.phabricator.com/D6092
1 parent 3aae972 commit 59cea9b

12 files changed

+365
-98
lines changed

src/__phutil_library_map__.php

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1255,7 +1255,8 @@
12551255
'PhabricatorPeopleListController' => 'applications/people/controller/PhabricatorPeopleListController.php',
12561256
'PhabricatorPeopleLogsController' => 'applications/people/controller/PhabricatorPeopleLogsController.php',
12571257
'PhabricatorPeopleProfileController' => 'applications/people/controller/PhabricatorPeopleProfileController.php',
1258-
'PhabricatorPeopleQuery' => 'applications/people/PhabricatorPeopleQuery.php',
1258+
'PhabricatorPeopleQuery' => 'applications/people/query/PhabricatorPeopleQuery.php',
1259+
'PhabricatorPeopleSearchEngine' => 'applications/people/query/PhabricatorPeopleSearchEngine.php',
12591260
'PhabricatorPeopleTestDataGenerator' => 'applications/people/lipsum/PhabricatorPeopleTestDataGenerator.php',
12601261
'PhabricatorPhabricatorOAuthConfigOptions' => 'applications/config/option/PhabricatorPhabricatorOAuthConfigOptions.php',
12611262
'PhabricatorPhameConfigOptions' => 'applications/phame/config/PhabricatorPhameConfigOptions.php',
@@ -3052,10 +3053,15 @@
30523053
'PhabricatorPeopleEditController' => 'PhabricatorPeopleController',
30533054
'PhabricatorPeopleHovercardEventListener' => 'PhutilEventListener',
30543055
'PhabricatorPeopleLdapController' => 'PhabricatorPeopleController',
3055-
'PhabricatorPeopleListController' => 'PhabricatorPeopleController',
3056+
'PhabricatorPeopleListController' =>
3057+
array(
3058+
0 => 'PhabricatorPeopleController',
3059+
1 => 'PhabricatorApplicationSearchResultsControllerInterface',
3060+
),
30563061
'PhabricatorPeopleLogsController' => 'PhabricatorPeopleController',
30573062
'PhabricatorPeopleProfileController' => 'PhabricatorPeopleController',
3058-
'PhabricatorPeopleQuery' => 'PhabricatorOffsetPagedQuery',
3063+
'PhabricatorPeopleQuery' => 'PhabricatorPolicyAwareCursorPagedQuery',
3064+
'PhabricatorPeopleSearchEngine' => 'PhabricatorApplicationSearchEngine',
30593065
'PhabricatorPeopleTestDataGenerator' => 'PhabricatorTestDataGenerator',
30603066
'PhabricatorPhabricatorOAuthConfigOptions' => 'PhabricatorApplicationConfigOptions',
30613067
'PhabricatorPhameConfigOptions' => 'PhabricatorApplicationConfigOptions',
@@ -3307,6 +3313,7 @@
33073313
array(
33083314
0 => 'PhabricatorUserDAO',
33093315
1 => 'PhutilPerson',
3316+
2 => 'PhabricatorPolicyInterface',
33103317
),
33113318
'PhabricatorUserDAO' => 'PhabricatorLiskDAO',
33123319
'PhabricatorUserEditor' => 'PhabricatorEditor',

src/applications/metamta/replyhandler/PhabricatorMailReplyHandler.php

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -285,9 +285,10 @@ protected function getDefaultPrivateReplyHandlerEmailAddress(
285285
return null;
286286
}
287287

288-
$user = head(id(new PhabricatorPeopleQuery())
289-
->withPhids(array($handle->getPHID()))
290-
->execute());
288+
$user = id(new PhabricatorPeopleQuery())
289+
->setViewer(PhabricatorUser::getOmnipotentUser())
290+
->withPHIDs(array($handle->getPHID()))
291+
->executeOne();
291292

292293
$receiver = $this->getMailReceiver();
293294
$receiver_id = $receiver->getID();

src/applications/people/application/PhabricatorApplicationPeople.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public function getFlavorText() {
2323
}
2424

2525
public function getApplicationGroup() {
26-
return self::GROUP_ADMIN;
26+
return self::GROUP_ORGANIZATION;
2727
}
2828

2929
public function canUninstall() {
@@ -39,7 +39,7 @@ public function getEventListeners() {
3939
public function getRoutes() {
4040
return array(
4141
'/people/' => array(
42-
'' => 'PhabricatorPeopleListController',
42+
'(query/(?P<key>[^/]+)/)?' => 'PhabricatorPeopleListController',
4343
'logs/' => 'PhabricatorPeopleLogsController',
4444
'edit/(?:(?P<id>[1-9]\d*)/(?:(?P<view>\w+)/)?)?'
4545
=> 'PhabricatorPeopleEditController',

src/applications/people/conduit/ConduitAPI_user_query_Method.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ protected function execute(ConduitAPIRequest $request) {
4444
$limit = $request->getValue('limit', 100);
4545

4646
$query = new PhabricatorPeopleQuery();
47+
$query->setViewer($request->getUser());
48+
4749
if ($usernames) {
4850
$query->withUsernames($usernames);
4951
}

src/applications/people/controller/PhabricatorPeopleController.php

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,20 @@ public function buildSideNavView() {
1010
$nav = new AphrontSideNavFilterView();
1111
$nav->setBaseURI(new PhutilURI($this->getApplicationURI()));
1212

13-
$nav->addLabel(pht('User Administration'));
14-
$nav->addFilter('edit', pht('Create New User'));
15-
if (PhabricatorEnv::getEnvConfig('ldap.auth-enabled') === true) {
16-
$nav->addFilter('ldap', pht('Import from LDAP'));
17-
}
13+
$viewer = $this->getRequest()->getUser();
14+
15+
id(new PhabricatorPeopleSearchEngine())
16+
->setViewer($viewer)
17+
->addNavigationItems($nav->getMenu());
1818

19-
$nav->addFilter('people',
20-
pht('User Directory'),
21-
$this->getApplicationURI());
19+
if ($viewer->getIsAdmin()) {
20+
$nav->addLabel(pht('User Administration'));
21+
if (PhabricatorEnv::getEnvConfig('ldap.auth-enabled') === true) {
22+
$nav->addFilter('ldap', pht('Import from LDAP'));
23+
}
2224

23-
$nav->addFilter('logs', pht('Activity Logs'));
25+
$nav->addFilter('logs', pht('Activity Logs'));
26+
}
2427

2528
return $nav;
2629
}
@@ -32,11 +35,15 @@ public function buildApplicationMenu() {
3235
public function buildApplicationCrumbs() {
3336
$crumbs = parent::buildApplicationCrumbs();
3437

35-
$crumbs->addAction(
36-
id(new PhabricatorMenuItemView())
37-
->setName(pht('Create New User'))
38-
->setHref($this->getApplicationURI('edit'))
39-
->setIcon('create'));
38+
$viewer = $this->getRequest()->getUser();
39+
40+
if ($viewer->getIsAdmin()) {
41+
$crumbs->addAction(
42+
id(new PhabricatorMenuItemView())
43+
->setName(pht('Create New User'))
44+
->setHref($this->getApplicationURI('edit'))
45+
->setIcon('create'));
46+
}
4047

4148
return $crumbs;
4249
}
Lines changed: 36 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,37 @@
11
<?php
22

3-
final class PhabricatorPeopleListController
4-
extends PhabricatorPeopleController {
3+
final class PhabricatorPeopleListController extends PhabricatorPeopleController
4+
implements PhabricatorApplicationSearchResultsControllerInterface {
5+
6+
private $key;
7+
8+
public function shouldAllowPublic() {
9+
return true;
10+
}
11+
12+
public function shouldRequireAdmin() {
13+
return false;
14+
}
15+
16+
public function willProcessRequest(array $data) {
17+
$this->key = idx($data, 'key', 'all');
18+
}
519

620
public function processRequest() {
721
$request = $this->getRequest();
8-
$viewer = $request->getUser();
9-
$is_admin = $viewer->getIsAdmin();
10-
11-
$user = new PhabricatorUser();
22+
$controller = id(new PhabricatorApplicationSearchController($request))
23+
->setQueryKey($this->key)
24+
->setSearchEngine(new PhabricatorPeopleSearchEngine())
25+
->setNavigation($this->buildSideNavView());
1226

13-
$count = queryfx_one(
14-
$user->establishConnection('r'),
15-
'SELECT COUNT(*) N FROM %T',
16-
$user->getTableName());
17-
$count = idx($count, 'N', 0);
27+
return $this->delegateToController($controller);
28+
}
1829

19-
$pager = new AphrontPagerView();
20-
$pager->setOffset($request->getInt('page', 0));
21-
$pager->setCount($count);
22-
$pager->setURI($request->getRequestURI(), 'page');
30+
public function renderResultsList(array $users) {
31+
assert_instances_of($users, 'PhabricatorUser');
2332

24-
$users = id(new PhabricatorPeopleQuery())
25-
->needPrimaryEmail(true)
26-
->executeWithOffsetPager($pager);
33+
$request = $this->getRequest();
34+
$viewer = $request->getUser();
2735

2836
$list = new PhabricatorObjectItemListView();
2937

@@ -40,7 +48,7 @@ public function processRequest() {
4048

4149
$item = new PhabricatorObjectItemView();
4250
$item->setHeader($user->getFullName())
43-
->setHref('/people/edit/'.$user->getID().'/')
51+
->setHref('/p/'.$user->getUsername().'/')
4452
->addAttribute(hsprintf('%s %s',
4553
phabricator_date($user->getDateCreated(), $viewer),
4654
phabricator_time($user->getDateCreated(), $viewer)))
@@ -58,31 +66,17 @@ public function processRequest() {
5866
$item->addIcon('computer', pht('System Agent'));
5967
}
6068

69+
if ($viewer->getIsAdmin()) {
70+
$uid = $user->getID();
71+
$item->addAction(
72+
id(new PhabricatorMenuItemView())
73+
->setIcon('edit')
74+
->setHref($this->getApplicationURI('edit/'.$uid.'/')));
75+
}
76+
6177
$list->addItem($item);
6278
}
6379

64-
$header = new PhabricatorHeaderView();
65-
$header->setHeader(pht('People (%d)', number_format($count)));
66-
67-
$crumbs = $this->buildApplicationCrumbs();
68-
$crumbs->addCrumb(
69-
id(new PhabricatorCrumbView())
70-
->setName(pht('User Directory'))
71-
->setHref('/people/'));
72-
73-
$nav = $this->buildSideNavView();
74-
$nav->selectFilter('people');
75-
$nav->appendChild($header);
76-
$nav->appendChild($list);
77-
$nav->appendChild($pager);
78-
$nav->setCrumbs($crumbs);
79-
80-
return $this->buildApplicationPage(
81-
$nav,
82-
array(
83-
'title' => pht('People'),
84-
'device' => true,
85-
'dust' => true,
86-
));
80+
return $list;
8781
}
8882
}

0 commit comments

Comments
 (0)