Page MenuHomePhabricator

D17470.id42012.diff
No OneTemporary

D17470.id42012.diff

diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -3340,6 +3340,7 @@
'PhabricatorPeopleApplication' => 'applications/people/application/PhabricatorPeopleApplication.php',
'PhabricatorPeopleApproveController' => 'applications/people/controller/PhabricatorPeopleApproveController.php',
'PhabricatorPeopleBadgesProfileMenuItem' => 'applications/people/menuitem/PhabricatorPeopleBadgesProfileMenuItem.php',
+ 'PhabricatorPeopleCommitsProfileMenuItem' => 'applications/people/menuitem/PhabricatorPeopleCommitsProfileMenuItem.php',
'PhabricatorPeopleController' => 'applications/people/controller/PhabricatorPeopleController.php',
'PhabricatorPeopleCreateController' => 'applications/people/controller/PhabricatorPeopleCreateController.php',
'PhabricatorPeopleCreateGuidanceContext' => 'applications/people/guidance/PhabricatorPeopleCreateGuidanceContext.php',
@@ -3365,16 +3366,19 @@
'PhabricatorPeopleOwnerDatasource' => 'applications/people/typeahead/PhabricatorPeopleOwnerDatasource.php',
'PhabricatorPeoplePictureProfileMenuItem' => 'applications/people/menuitem/PhabricatorPeoplePictureProfileMenuItem.php',
'PhabricatorPeopleProfileBadgesController' => 'applications/people/controller/PhabricatorPeopleProfileBadgesController.php',
+ 'PhabricatorPeopleProfileCommitsController' => 'applications/people/controller/PhabricatorPeopleProfileCommitsController.php',
'PhabricatorPeopleProfileController' => 'applications/people/controller/PhabricatorPeopleProfileController.php',
'PhabricatorPeopleProfileEditController' => 'applications/people/controller/PhabricatorPeopleProfileEditController.php',
'PhabricatorPeopleProfileImageWorkflow' => 'applications/people/management/PhabricatorPeopleProfileImageWorkflow.php',
'PhabricatorPeopleProfileManageController' => 'applications/people/controller/PhabricatorPeopleProfileManageController.php',
'PhabricatorPeopleProfileMenuEngine' => 'applications/people/engine/PhabricatorPeopleProfileMenuEngine.php',
'PhabricatorPeopleProfilePictureController' => 'applications/people/controller/PhabricatorPeopleProfilePictureController.php',
+ 'PhabricatorPeopleProfileTasksController' => 'applications/people/controller/PhabricatorPeopleProfileTasksController.php',
'PhabricatorPeopleProfileViewController' => 'applications/people/controller/PhabricatorPeopleProfileViewController.php',
'PhabricatorPeopleQuery' => 'applications/people/query/PhabricatorPeopleQuery.php',
'PhabricatorPeopleRenameController' => 'applications/people/controller/PhabricatorPeopleRenameController.php',
'PhabricatorPeopleSearchEngine' => 'applications/people/query/PhabricatorPeopleSearchEngine.php',
+ 'PhabricatorPeopleTasksProfileMenuItem' => 'applications/people/menuitem/PhabricatorPeopleTasksProfileMenuItem.php',
'PhabricatorPeopleTestDataGenerator' => 'applications/people/lipsum/PhabricatorPeopleTestDataGenerator.php',
'PhabricatorPeopleTransactionQuery' => 'applications/people/query/PhabricatorPeopleTransactionQuery.php',
'PhabricatorPeopleUserFunctionDatasource' => 'applications/people/typeahead/PhabricatorPeopleUserFunctionDatasource.php',
@@ -8528,6 +8532,7 @@
'PhabricatorPeopleApplication' => 'PhabricatorApplication',
'PhabricatorPeopleApproveController' => 'PhabricatorPeopleController',
'PhabricatorPeopleBadgesProfileMenuItem' => 'PhabricatorProfileMenuItem',
+ 'PhabricatorPeopleCommitsProfileMenuItem' => 'PhabricatorProfileMenuItem',
'PhabricatorPeopleController' => 'PhabricatorController',
'PhabricatorPeopleCreateController' => 'PhabricatorPeopleController',
'PhabricatorPeopleCreateGuidanceContext' => 'PhabricatorGuidanceContext',
@@ -8553,16 +8558,19 @@
'PhabricatorPeopleOwnerDatasource' => 'PhabricatorTypeaheadCompositeDatasource',
'PhabricatorPeoplePictureProfileMenuItem' => 'PhabricatorProfileMenuItem',
'PhabricatorPeopleProfileBadgesController' => 'PhabricatorPeopleProfileController',
+ 'PhabricatorPeopleProfileCommitsController' => 'PhabricatorPeopleProfileController',
'PhabricatorPeopleProfileController' => 'PhabricatorPeopleController',
'PhabricatorPeopleProfileEditController' => 'PhabricatorPeopleProfileController',
'PhabricatorPeopleProfileImageWorkflow' => 'PhabricatorPeopleManagementWorkflow',
'PhabricatorPeopleProfileManageController' => 'PhabricatorPeopleProfileController',
'PhabricatorPeopleProfileMenuEngine' => 'PhabricatorProfileMenuEngine',
'PhabricatorPeopleProfilePictureController' => 'PhabricatorPeopleProfileController',
+ 'PhabricatorPeopleProfileTasksController' => 'PhabricatorPeopleProfileController',
'PhabricatorPeopleProfileViewController' => 'PhabricatorPeopleProfileController',
'PhabricatorPeopleQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorPeopleRenameController' => 'PhabricatorPeopleController',
'PhabricatorPeopleSearchEngine' => 'PhabricatorApplicationSearchEngine',
+ 'PhabricatorPeopleTasksProfileMenuItem' => 'PhabricatorProfileMenuItem',
'PhabricatorPeopleTestDataGenerator' => 'PhabricatorTestDataGenerator',
'PhabricatorPeopleTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
'PhabricatorPeopleUserFunctionDatasource' => 'PhabricatorTypeaheadCompositeDatasource',
diff --git a/src/applications/people/application/PhabricatorPeopleApplication.php b/src/applications/people/application/PhabricatorPeopleApplication.php
--- a/src/applications/people/application/PhabricatorPeopleApplication.php
+++ b/src/applications/people/application/PhabricatorPeopleApplication.php
@@ -66,6 +66,10 @@
'PhabricatorPeopleProfileEditController',
'badges/(?P<id>[1-9]\d*)/' =>
'PhabricatorPeopleProfileBadgesController',
+ 'tasks/(?P<id>[1-9]\d*)/' =>
+ 'PhabricatorPeopleProfileTasksController',
+ 'commits/(?P<id>[1-9]\d*)/' =>
+ 'PhabricatorPeopleProfileCommitsController',
'picture/(?P<id>[1-9]\d*)/' =>
'PhabricatorPeopleProfilePictureController',
'manage/(?P<id>[1-9]\d*)/' =>
diff --git a/src/applications/people/controller/PhabricatorPeopleProfileCommitsController.php b/src/applications/people/controller/PhabricatorPeopleProfileCommitsController.php
new file mode 100644
--- /dev/null
+++ b/src/applications/people/controller/PhabricatorPeopleProfileCommitsController.php
@@ -0,0 +1,81 @@
+<?php
+
+final class PhabricatorPeopleProfileCommitsController
+ extends PhabricatorPeopleProfileController {
+
+ public function handleRequest(AphrontRequest $request) {
+ $viewer = $this->getViewer();
+ $id = $request->getURIData('id');
+
+ $user = id(new PhabricatorPeopleQuery())
+ ->setViewer($viewer)
+ ->withIDs(array($id))
+ ->needProfile(true)
+ ->needProfileImage(true)
+ ->needAvailability(true)
+ ->requireCapabilities(
+ array(
+ PhabricatorPolicyCapability::CAN_VIEW,
+ ))
+ ->executeOne();
+ if (!$user) {
+ return new Aphront404Response();
+ }
+
+ $class = 'PhabricatorDiffusionApplication';
+ if (!PhabricatorApplication::isClassInstalledForViewer($class, $viewer)) {
+ return new Aphront404Response();
+ }
+
+ $this->setUser($user);
+ $title = array(pht('Recent Commits'), $user->getUsername());
+ $header = $this->buildProfileHeader();
+ $commits = $this->buildCommitsView($user);
+
+ $crumbs = $this->buildApplicationCrumbs();
+ $crumbs->addTextCrumb(pht('Recent Commits'));
+ $crumbs->setBorder(true);
+
+ $nav = $this->getProfileMenu();
+ $nav->selectFilter(PhabricatorPeopleProfileMenuEngine::ITEM_COMMITS);
+
+ $view = id(new PHUITwoColumnView())
+ ->setHeader($header)
+ ->addClass('project-view-home')
+ ->addClass('project-view-people-home')
+ ->setFooter(array(
+ $commits,
+ ));
+
+ return $this->newPage()
+ ->setTitle($title)
+ ->setCrumbs($crumbs)
+ ->setNavigation($nav)
+ ->appendChild($view);
+ }
+
+ private function buildCommitsView(PhabricatorUser $user) {
+ $viewer = $this->getViewer();
+
+ $commits = id(new DiffusionCommitQuery())
+ ->setViewer($viewer)
+ ->requireCapabilities(
+ array(
+ PhabricatorPolicyCapability::CAN_VIEW,
+ ))
+ ->setLimit(100)
+ ->execute();
+
+ $list = id(new PhabricatorAuditListView())
+ ->setViewer($viewer)
+ ->setCommits($commits)
+ ->setNoDataString(pht('No recent commits.'));
+
+ $view = id(new PHUIObjectBoxView())
+ ->setHeaderText(pht('Recent Commits'))
+ ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
+ ->appendChild($list);
+
+ return $view;
+ }
+}
diff --git a/src/applications/people/controller/PhabricatorPeopleProfileTasksController.php b/src/applications/people/controller/PhabricatorPeopleProfileTasksController.php
new file mode 100644
--- /dev/null
+++ b/src/applications/people/controller/PhabricatorPeopleProfileTasksController.php
@@ -0,0 +1,86 @@
+<?php
+
+final class PhabricatorPeopleProfileTasksController
+ extends PhabricatorPeopleProfileController {
+
+ public function handleRequest(AphrontRequest $request) {
+ $viewer = $this->getViewer();
+ $id = $request->getURIData('id');
+
+ $user = id(new PhabricatorPeopleQuery())
+ ->setViewer($viewer)
+ ->withIDs(array($id))
+ ->needProfile(true)
+ ->needProfileImage(true)
+ ->needAvailability(true)
+ ->requireCapabilities(
+ array(
+ PhabricatorPolicyCapability::CAN_VIEW,
+ ))
+ ->executeOne();
+ if (!$user) {
+ return new Aphront404Response();
+ }
+
+ $class = 'PhabricatorManiphestApplication';
+ if (!PhabricatorApplication::isClassInstalledForViewer($class, $viewer)) {
+ return new Aphront404Response();
+ }
+
+ $this->setUser($user);
+ $title = array(pht('Assigned Tasks'), $user->getUsername());
+ $header = $this->buildProfileHeader();
+ $tasks = $this->buildTasksView($user);
+
+ $crumbs = $this->buildApplicationCrumbs();
+ $crumbs->addTextCrumb(pht('Assigned Tasks'));
+ $crumbs->setBorder(true);
+
+ $nav = $this->getProfileMenu();
+ $nav->selectFilter(PhabricatorPeopleProfileMenuEngine::ITEM_TASKS);
+
+ $view = id(new PHUITwoColumnView())
+ ->setHeader($header)
+ ->addClass('project-view-home')
+ ->addClass('project-view-people-home')
+ ->setFooter(array(
+ $tasks,
+ ));
+
+ return $this->newPage()
+ ->setTitle($title)
+ ->setCrumbs($crumbs)
+ ->setNavigation($nav)
+ ->appendChild($view);
+ }
+
+ private function buildTasksView(PhabricatorUser $user) {
+ $viewer = $this->getViewer();
+
+ $tasks = id(new ManiphestTaskQuery())
+ ->setViewer($viewer)
+ ->withOwners(array($user->getPHID()))
+ ->needProjectPHIDs(true)
+ ->requireCapabilities(
+ array(
+ PhabricatorPolicyCapability::CAN_VIEW,
+ ))
+ ->setLimit(100)
+ ->execute();
+
+ $handles = ManiphestTaskListView::loadTaskHandles($viewer, $tasks);
+
+ $list = id(new ManiphestTaskListView())
+ ->setUser($viewer)
+ ->setHandles($handles)
+ ->setTasks($tasks)
+ ->setNoDataString(pht('No assigned tasks.'));
+
+ $view = id(new PHUIObjectBoxView())
+ ->setHeaderText(pht('Assigned Tasks'))
+ ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
+ ->appendChild($list);
+
+ return $view;
+ }
+}
diff --git a/src/applications/people/engine/PhabricatorPeopleProfileMenuEngine.php b/src/applications/people/engine/PhabricatorPeopleProfileMenuEngine.php
--- a/src/applications/people/engine/PhabricatorPeopleProfileMenuEngine.php
+++ b/src/applications/people/engine/PhabricatorPeopleProfileMenuEngine.php
@@ -7,6 +7,8 @@
const ITEM_MANAGE = 'people.manage';
const ITEM_PICTURE = 'people.picture';
const ITEM_BADGES = 'people.badges';
+ const ITEM_TASKS = 'people.tasks';
+ const ITEM_COMMITS = 'people.commits';
protected function isMenuEngineConfigurable() {
return false;
@@ -45,48 +47,18 @@
'PhabricatorManiphestApplication',
$viewer);
if ($have_maniphest) {
- $uri = urisprintf(
- '/maniphest/?statuses=open()&assigned=%s#R',
- $object->getPHID());
-
$items[] = $this->newItem()
- ->setBuiltinKey('tasks')
- ->setMenuItemKey(PhabricatorLinkProfileMenuItem::MENUITEMKEY)
- ->setMenuItemProperty('icon', 'maniphest')
- ->setMenuItemProperty('name', pht('Open Tasks'))
- ->setMenuItemProperty('uri', $uri);
- }
-
- $have_differential = PhabricatorApplication::isClassInstalledForViewer(
- 'PhabricatorDifferentialApplication',
- $viewer);
- if ($have_differential) {
- $uri = urisprintf(
- '/differential/?authors=%s#R',
- $object->getPHID());
-
- $items[] = $this->newItem()
- ->setBuiltinKey('revisions')
- ->setMenuItemKey(PhabricatorLinkProfileMenuItem::MENUITEMKEY)
- ->setMenuItemProperty('icon', 'differential')
- ->setMenuItemProperty('name', pht('Revisions'))
- ->setMenuItemProperty('uri', $uri);
+ ->setBuiltinKey(self::ITEM_TASKS)
+ ->setMenuItemKey(PhabricatorPeopleTasksProfileMenuItem::MENUITEMKEY);
}
$have_diffusion = PhabricatorApplication::isClassInstalledForViewer(
'PhabricatorDiffusionApplication',
$viewer);
if ($have_diffusion) {
- $uri = urisprintf(
- '/diffusion/commit/?authors=%s#R',
- $object->getPHID());
-
$items[] = $this->newItem()
- ->setBuiltinKey('commits')
- ->setMenuItemKey(PhabricatorLinkProfileMenuItem::MENUITEMKEY)
- ->setMenuItemProperty('icon', 'diffusion')
- ->setMenuItemProperty('name', pht('Commits'))
- ->setMenuItemProperty('uri', $uri);
+ ->setBuiltinKey(self::ITEM_COMMITS)
+ ->setMenuItemKey(PhabricatorPeopleCommitsProfileMenuItem::MENUITEMKEY);
}
$items[] = $this->newItem()
diff --git a/src/applications/people/menuitem/PhabricatorPeopleCommitsProfileMenuItem.php b/src/applications/people/menuitem/PhabricatorPeopleCommitsProfileMenuItem.php
new file mode 100644
--- /dev/null
+++ b/src/applications/people/menuitem/PhabricatorPeopleCommitsProfileMenuItem.php
@@ -0,0 +1,59 @@
+<?php
+
+final class PhabricatorPeopleCommitsProfileMenuItem
+ extends PhabricatorProfileMenuItem {
+
+ const MENUITEMKEY = 'people.commits';
+
+ public function getMenuItemTypeName() {
+ return pht('Commits');
+ }
+
+ private function getDefaultName() {
+ return pht('Commits');
+ }
+
+ public function canHideMenuItem(
+ PhabricatorProfileMenuItemConfiguration $config) {
+ return true;
+ }
+
+ public function getDisplayName(
+ PhabricatorProfileMenuItemConfiguration $config) {
+ $name = $config->getMenuItemProperty('name');
+
+ if (strlen($name)) {
+ return $name;
+ }
+
+ return $this->getDefaultName();
+ }
+
+ public function buildEditEngineFields(
+ PhabricatorProfileMenuItemConfiguration $config) {
+ return array(
+ id(new PhabricatorTextEditField())
+ ->setKey('name')
+ ->setLabel(pht('Name'))
+ ->setPlaceholder($this->getDefaultName())
+ ->setValue($config->getMenuItemProperty('name')),
+ );
+ }
+
+ protected function newNavigationMenuItems(
+ PhabricatorProfileMenuItemConfiguration $config) {
+
+ $user = $config->getProfileObject();
+ $id = $user->getID();
+
+ $item = $this->newItem()
+ ->setHref("/people/commits/{$id}/")
+ ->setName($this->getDisplayName($config))
+ ->setIcon('fa-code');
+
+ return array(
+ $item,
+ );
+ }
+
+}
diff --git a/src/applications/people/menuitem/PhabricatorPeopleTasksProfileMenuItem.php b/src/applications/people/menuitem/PhabricatorPeopleTasksProfileMenuItem.php
new file mode 100644
--- /dev/null
+++ b/src/applications/people/menuitem/PhabricatorPeopleTasksProfileMenuItem.php
@@ -0,0 +1,59 @@
+<?php
+
+final class PhabricatorPeopleTasksProfileMenuItem
+ extends PhabricatorProfileMenuItem {
+
+ const MENUITEMKEY = 'people.tasks';
+
+ public function getMenuItemTypeName() {
+ return pht('Tasks');
+ }
+
+ private function getDefaultName() {
+ return pht('Tasks');
+ }
+
+ public function canHideMenuItem(
+ PhabricatorProfileMenuItemConfiguration $config) {
+ return true;
+ }
+
+ public function getDisplayName(
+ PhabricatorProfileMenuItemConfiguration $config) {
+ $name = $config->getMenuItemProperty('name');
+
+ if (strlen($name)) {
+ return $name;
+ }
+
+ return $this->getDefaultName();
+ }
+
+ public function buildEditEngineFields(
+ PhabricatorProfileMenuItemConfiguration $config) {
+ return array(
+ id(new PhabricatorTextEditField())
+ ->setKey('name')
+ ->setLabel(pht('Name'))
+ ->setPlaceholder($this->getDefaultName())
+ ->setValue($config->getMenuItemProperty('name')),
+ );
+ }
+
+ protected function newNavigationMenuItems(
+ PhabricatorProfileMenuItemConfiguration $config) {
+
+ $user = $config->getProfileObject();
+ $id = $user->getID();
+
+ $item = $this->newItem()
+ ->setHref("/people/tasks/{$id}/")
+ ->setName($this->getDisplayName($config))
+ ->setIcon('fa-anchor');
+
+ return array(
+ $item,
+ );
+ }
+
+}

File Metadata

Mime Type
text/plain
Expires
Sun, Aug 3, 6:13 PM (3 w, 22 h ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
8799561
Default Alt Text
D17470.id42012.diff (17 KB)

Event Timeline