Skip to content

Commit 26d3d41

Browse files
author
Chad Little
committedMar 6, 2017
Update tasks/commits, remove diffs from Profile
Summary: Mostly a minor nit-pick, but I hate sending users off the profile and disorient them onto application search. These pages are pretty easy to maintain, I don't expect to need to do more here. I dropped Differential outright. Kept Tasks and Commits. Now you can browse everything about a user on their profile without leaving. Maybe add a link to ApplicationSearch? Not sure it's important. Test Plan: Review tasks and commits on mine and other user profiles. Reviewers: epriestley Reviewed By: epriestley Subscribers: Korvin Differential Revision: https://secure.phabricator.com/D17470
1 parent e091888 commit 26d3d41

7 files changed

+303
-34
lines changed
 

‎src/__phutil_library_map__.php

+8
Original file line numberDiff line numberDiff line change
@@ -3340,6 +3340,7 @@
33403340
'PhabricatorPeopleApplication' => 'applications/people/application/PhabricatorPeopleApplication.php',
33413341
'PhabricatorPeopleApproveController' => 'applications/people/controller/PhabricatorPeopleApproveController.php',
33423342
'PhabricatorPeopleBadgesProfileMenuItem' => 'applications/people/menuitem/PhabricatorPeopleBadgesProfileMenuItem.php',
3343+
'PhabricatorPeopleCommitsProfileMenuItem' => 'applications/people/menuitem/PhabricatorPeopleCommitsProfileMenuItem.php',
33433344
'PhabricatorPeopleController' => 'applications/people/controller/PhabricatorPeopleController.php',
33443345
'PhabricatorPeopleCreateController' => 'applications/people/controller/PhabricatorPeopleCreateController.php',
33453346
'PhabricatorPeopleCreateGuidanceContext' => 'applications/people/guidance/PhabricatorPeopleCreateGuidanceContext.php',
@@ -3365,16 +3366,19 @@
33653366
'PhabricatorPeopleOwnerDatasource' => 'applications/people/typeahead/PhabricatorPeopleOwnerDatasource.php',
33663367
'PhabricatorPeoplePictureProfileMenuItem' => 'applications/people/menuitem/PhabricatorPeoplePictureProfileMenuItem.php',
33673368
'PhabricatorPeopleProfileBadgesController' => 'applications/people/controller/PhabricatorPeopleProfileBadgesController.php',
3369+
'PhabricatorPeopleProfileCommitsController' => 'applications/people/controller/PhabricatorPeopleProfileCommitsController.php',
33683370
'PhabricatorPeopleProfileController' => 'applications/people/controller/PhabricatorPeopleProfileController.php',
33693371
'PhabricatorPeopleProfileEditController' => 'applications/people/controller/PhabricatorPeopleProfileEditController.php',
33703372
'PhabricatorPeopleProfileImageWorkflow' => 'applications/people/management/PhabricatorPeopleProfileImageWorkflow.php',
33713373
'PhabricatorPeopleProfileManageController' => 'applications/people/controller/PhabricatorPeopleProfileManageController.php',
33723374
'PhabricatorPeopleProfileMenuEngine' => 'applications/people/engine/PhabricatorPeopleProfileMenuEngine.php',
33733375
'PhabricatorPeopleProfilePictureController' => 'applications/people/controller/PhabricatorPeopleProfilePictureController.php',
3376+
'PhabricatorPeopleProfileTasksController' => 'applications/people/controller/PhabricatorPeopleProfileTasksController.php',
33743377
'PhabricatorPeopleProfileViewController' => 'applications/people/controller/PhabricatorPeopleProfileViewController.php',
33753378
'PhabricatorPeopleQuery' => 'applications/people/query/PhabricatorPeopleQuery.php',
33763379
'PhabricatorPeopleRenameController' => 'applications/people/controller/PhabricatorPeopleRenameController.php',
33773380
'PhabricatorPeopleSearchEngine' => 'applications/people/query/PhabricatorPeopleSearchEngine.php',
3381+
'PhabricatorPeopleTasksProfileMenuItem' => 'applications/people/menuitem/PhabricatorPeopleTasksProfileMenuItem.php',
33783382
'PhabricatorPeopleTestDataGenerator' => 'applications/people/lipsum/PhabricatorPeopleTestDataGenerator.php',
33793383
'PhabricatorPeopleTransactionQuery' => 'applications/people/query/PhabricatorPeopleTransactionQuery.php',
33803384
'PhabricatorPeopleUserFunctionDatasource' => 'applications/people/typeahead/PhabricatorPeopleUserFunctionDatasource.php',
@@ -8528,6 +8532,7 @@
85288532
'PhabricatorPeopleApplication' => 'PhabricatorApplication',
85298533
'PhabricatorPeopleApproveController' => 'PhabricatorPeopleController',
85308534
'PhabricatorPeopleBadgesProfileMenuItem' => 'PhabricatorProfileMenuItem',
8535+
'PhabricatorPeopleCommitsProfileMenuItem' => 'PhabricatorProfileMenuItem',
85318536
'PhabricatorPeopleController' => 'PhabricatorController',
85328537
'PhabricatorPeopleCreateController' => 'PhabricatorPeopleController',
85338538
'PhabricatorPeopleCreateGuidanceContext' => 'PhabricatorGuidanceContext',
@@ -8553,16 +8558,19 @@
85538558
'PhabricatorPeopleOwnerDatasource' => 'PhabricatorTypeaheadCompositeDatasource',
85548559
'PhabricatorPeoplePictureProfileMenuItem' => 'PhabricatorProfileMenuItem',
85558560
'PhabricatorPeopleProfileBadgesController' => 'PhabricatorPeopleProfileController',
8561+
'PhabricatorPeopleProfileCommitsController' => 'PhabricatorPeopleProfileController',
85568562
'PhabricatorPeopleProfileController' => 'PhabricatorPeopleController',
85578563
'PhabricatorPeopleProfileEditController' => 'PhabricatorPeopleProfileController',
85588564
'PhabricatorPeopleProfileImageWorkflow' => 'PhabricatorPeopleManagementWorkflow',
85598565
'PhabricatorPeopleProfileManageController' => 'PhabricatorPeopleProfileController',
85608566
'PhabricatorPeopleProfileMenuEngine' => 'PhabricatorProfileMenuEngine',
85618567
'PhabricatorPeopleProfilePictureController' => 'PhabricatorPeopleProfileController',
8568+
'PhabricatorPeopleProfileTasksController' => 'PhabricatorPeopleProfileController',
85628569
'PhabricatorPeopleProfileViewController' => 'PhabricatorPeopleProfileController',
85638570
'PhabricatorPeopleQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
85648571
'PhabricatorPeopleRenameController' => 'PhabricatorPeopleController',
85658572
'PhabricatorPeopleSearchEngine' => 'PhabricatorApplicationSearchEngine',
8573+
'PhabricatorPeopleTasksProfileMenuItem' => 'PhabricatorProfileMenuItem',
85668574
'PhabricatorPeopleTestDataGenerator' => 'PhabricatorTestDataGenerator',
85678575
'PhabricatorPeopleTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
85688576
'PhabricatorPeopleUserFunctionDatasource' => 'PhabricatorTypeaheadCompositeDatasource',

‎src/applications/people/application/PhabricatorPeopleApplication.php

+4
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,10 @@ public function getRoutes() {
6666
'PhabricatorPeopleProfileEditController',
6767
'badges/(?P<id>[1-9]\d*)/' =>
6868
'PhabricatorPeopleProfileBadgesController',
69+
'tasks/(?P<id>[1-9]\d*)/' =>
70+
'PhabricatorPeopleProfileTasksController',
71+
'commits/(?P<id>[1-9]\d*)/' =>
72+
'PhabricatorPeopleProfileCommitsController',
6973
'picture/(?P<id>[1-9]\d*)/' =>
7074
'PhabricatorPeopleProfilePictureController',
7175
'manage/(?P<id>[1-9]\d*)/' =>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
<?php
2+
3+
final class PhabricatorPeopleProfileCommitsController
4+
extends PhabricatorPeopleProfileController {
5+
6+
public function handleRequest(AphrontRequest $request) {
7+
$viewer = $this->getViewer();
8+
$id = $request->getURIData('id');
9+
10+
$user = id(new PhabricatorPeopleQuery())
11+
->setViewer($viewer)
12+
->withIDs(array($id))
13+
->needProfile(true)
14+
->needProfileImage(true)
15+
->needAvailability(true)
16+
->requireCapabilities(
17+
array(
18+
PhabricatorPolicyCapability::CAN_VIEW,
19+
))
20+
->executeOne();
21+
if (!$user) {
22+
return new Aphront404Response();
23+
}
24+
25+
$class = 'PhabricatorDiffusionApplication';
26+
if (!PhabricatorApplication::isClassInstalledForViewer($class, $viewer)) {
27+
return new Aphront404Response();
28+
}
29+
30+
$this->setUser($user);
31+
$title = array(pht('Recent Commits'), $user->getUsername());
32+
$header = $this->buildProfileHeader();
33+
$commits = $this->buildCommitsView($user);
34+
35+
$crumbs = $this->buildApplicationCrumbs();
36+
$crumbs->addTextCrumb(pht('Recent Commits'));
37+
$crumbs->setBorder(true);
38+
39+
$nav = $this->getProfileMenu();
40+
$nav->selectFilter(PhabricatorPeopleProfileMenuEngine::ITEM_COMMITS);
41+
42+
$view = id(new PHUITwoColumnView())
43+
->setHeader($header)
44+
->addClass('project-view-home')
45+
->addClass('project-view-people-home')
46+
->setFooter(array(
47+
$commits,
48+
));
49+
50+
return $this->newPage()
51+
->setTitle($title)
52+
->setCrumbs($crumbs)
53+
->setNavigation($nav)
54+
->appendChild($view);
55+
}
56+
57+
private function buildCommitsView(PhabricatorUser $user) {
58+
$viewer = $this->getViewer();
59+
60+
$commits = id(new DiffusionCommitQuery())
61+
->setViewer($viewer)
62+
->requireCapabilities(
63+
array(
64+
PhabricatorPolicyCapability::CAN_VIEW,
65+
))
66+
->setLimit(100)
67+
->execute();
68+
69+
$list = id(new PhabricatorAuditListView())
70+
->setViewer($viewer)
71+
->setCommits($commits)
72+
->setNoDataString(pht('No recent commits.'));
73+
74+
$view = id(new PHUIObjectBoxView())
75+
->setHeaderText(pht('Recent Commits'))
76+
->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
77+
->appendChild($list);
78+
79+
return $view;
80+
}
81+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
<?php
2+
3+
final class PhabricatorPeopleProfileTasksController
4+
extends PhabricatorPeopleProfileController {
5+
6+
public function handleRequest(AphrontRequest $request) {
7+
$viewer = $this->getViewer();
8+
$id = $request->getURIData('id');
9+
10+
$user = id(new PhabricatorPeopleQuery())
11+
->setViewer($viewer)
12+
->withIDs(array($id))
13+
->needProfile(true)
14+
->needProfileImage(true)
15+
->needAvailability(true)
16+
->requireCapabilities(
17+
array(
18+
PhabricatorPolicyCapability::CAN_VIEW,
19+
))
20+
->executeOne();
21+
if (!$user) {
22+
return new Aphront404Response();
23+
}
24+
25+
$class = 'PhabricatorManiphestApplication';
26+
if (!PhabricatorApplication::isClassInstalledForViewer($class, $viewer)) {
27+
return new Aphront404Response();
28+
}
29+
30+
$this->setUser($user);
31+
$title = array(pht('Assigned Tasks'), $user->getUsername());
32+
$header = $this->buildProfileHeader();
33+
$tasks = $this->buildTasksView($user);
34+
35+
$crumbs = $this->buildApplicationCrumbs();
36+
$crumbs->addTextCrumb(pht('Assigned Tasks'));
37+
$crumbs->setBorder(true);
38+
39+
$nav = $this->getProfileMenu();
40+
$nav->selectFilter(PhabricatorPeopleProfileMenuEngine::ITEM_TASKS);
41+
42+
$view = id(new PHUITwoColumnView())
43+
->setHeader($header)
44+
->addClass('project-view-home')
45+
->addClass('project-view-people-home')
46+
->setFooter(array(
47+
$tasks,
48+
));
49+
50+
return $this->newPage()
51+
->setTitle($title)
52+
->setCrumbs($crumbs)
53+
->setNavigation($nav)
54+
->appendChild($view);
55+
}
56+
57+
private function buildTasksView(PhabricatorUser $user) {
58+
$viewer = $this->getViewer();
59+
60+
$tasks = id(new ManiphestTaskQuery())
61+
->setViewer($viewer)
62+
->withOwners(array($user->getPHID()))
63+
->needProjectPHIDs(true)
64+
->requireCapabilities(
65+
array(
66+
PhabricatorPolicyCapability::CAN_VIEW,
67+
))
68+
->setLimit(100)
69+
->execute();
70+
71+
$handles = ManiphestTaskListView::loadTaskHandles($viewer, $tasks);
72+
73+
$list = id(new ManiphestTaskListView())
74+
->setUser($viewer)
75+
->setHandles($handles)
76+
->setTasks($tasks)
77+
->setNoDataString(pht('No assigned tasks.'));
78+
79+
$view = id(new PHUIObjectBoxView())
80+
->setHeaderText(pht('Assigned Tasks'))
81+
->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
82+
->appendChild($list);
83+
84+
return $view;
85+
}
86+
}

‎src/applications/people/engine/PhabricatorPeopleProfileMenuEngine.php

+6-34
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ final class PhabricatorPeopleProfileMenuEngine
77
const ITEM_MANAGE = 'people.manage';
88
const ITEM_PICTURE = 'people.picture';
99
const ITEM_BADGES = 'people.badges';
10+
const ITEM_TASKS = 'people.tasks';
11+
const ITEM_COMMITS = 'people.commits';
1012

1113
protected function isMenuEngineConfigurable() {
1214
return false;
@@ -45,48 +47,18 @@ protected function getBuiltinProfileItems($object) {
4547
'PhabricatorManiphestApplication',
4648
$viewer);
4749
if ($have_maniphest) {
48-
$uri = urisprintf(
49-
'/maniphest/?statuses=open()&assigned=%s#R',
50-
$object->getPHID());
51-
5250
$items[] = $this->newItem()
53-
->setBuiltinKey('tasks')
54-
->setMenuItemKey(PhabricatorLinkProfileMenuItem::MENUITEMKEY)
55-
->setMenuItemProperty('icon', 'maniphest')
56-
->setMenuItemProperty('name', pht('Open Tasks'))
57-
->setMenuItemProperty('uri', $uri);
58-
}
59-
60-
$have_differential = PhabricatorApplication::isClassInstalledForViewer(
61-
'PhabricatorDifferentialApplication',
62-
$viewer);
63-
if ($have_differential) {
64-
$uri = urisprintf(
65-
'/differential/?authors=%s#R',
66-
$object->getPHID());
67-
68-
$items[] = $this->newItem()
69-
->setBuiltinKey('revisions')
70-
->setMenuItemKey(PhabricatorLinkProfileMenuItem::MENUITEMKEY)
71-
->setMenuItemProperty('icon', 'differential')
72-
->setMenuItemProperty('name', pht('Revisions'))
73-
->setMenuItemProperty('uri', $uri);
51+
->setBuiltinKey(self::ITEM_TASKS)
52+
->setMenuItemKey(PhabricatorPeopleTasksProfileMenuItem::MENUITEMKEY);
7453
}
7554

7655
$have_diffusion = PhabricatorApplication::isClassInstalledForViewer(
7756
'PhabricatorDiffusionApplication',
7857
$viewer);
7958
if ($have_diffusion) {
80-
$uri = urisprintf(
81-
'/diffusion/commit/?authors=%s#R',
82-
$object->getPHID());
83-
8459
$items[] = $this->newItem()
85-
->setBuiltinKey('commits')
86-
->setMenuItemKey(PhabricatorLinkProfileMenuItem::MENUITEMKEY)
87-
->setMenuItemProperty('icon', 'diffusion')
88-
->setMenuItemProperty('name', pht('Commits'))
89-
->setMenuItemProperty('uri', $uri);
60+
->setBuiltinKey(self::ITEM_COMMITS)
61+
->setMenuItemKey(PhabricatorPeopleCommitsProfileMenuItem::MENUITEMKEY);
9062
}
9163

9264
$items[] = $this->newItem()
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
<?php
2+
3+
final class PhabricatorPeopleCommitsProfileMenuItem
4+
extends PhabricatorProfileMenuItem {
5+
6+
const MENUITEMKEY = 'people.commits';
7+
8+
public function getMenuItemTypeName() {
9+
return pht('Commits');
10+
}
11+
12+
private function getDefaultName() {
13+
return pht('Commits');
14+
}
15+
16+
public function canHideMenuItem(
17+
PhabricatorProfileMenuItemConfiguration $config) {
18+
return true;
19+
}
20+
21+
public function getDisplayName(
22+
PhabricatorProfileMenuItemConfiguration $config) {
23+
$name = $config->getMenuItemProperty('name');
24+
25+
if (strlen($name)) {
26+
return $name;
27+
}
28+
29+
return $this->getDefaultName();
30+
}
31+
32+
public function buildEditEngineFields(
33+
PhabricatorProfileMenuItemConfiguration $config) {
34+
return array(
35+
id(new PhabricatorTextEditField())
36+
->setKey('name')
37+
->setLabel(pht('Name'))
38+
->setPlaceholder($this->getDefaultName())
39+
->setValue($config->getMenuItemProperty('name')),
40+
);
41+
}
42+
43+
protected function newNavigationMenuItems(
44+
PhabricatorProfileMenuItemConfiguration $config) {
45+
46+
$user = $config->getProfileObject();
47+
$id = $user->getID();
48+
49+
$item = $this->newItem()
50+
->setHref("/people/commits/{$id}/")
51+
->setName($this->getDisplayName($config))
52+
->setIcon('fa-code');
53+
54+
return array(
55+
$item,
56+
);
57+
}
58+
59+
}

0 commit comments

Comments
 (0)
Failed to load comments.