@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Add Revisions to User Profiles

Summary: Ref T12423. Adds back revisions as a user profile page. I don't want to think about custom profiles for a while.

Test Plan: Make some diffs, visit my profile, see diffs.

Reviewers: epriestley

Reviewed By: epriestley

Subscribers: Korvin

Maniphest Tasks: T12423

Differential Revision: https://secure.phabricator.com/D17987

+158 -12
+4
src/__phutil_library_map__.php
··· 3457 3457 'PhabricatorPeopleProfileManageController' => 'applications/people/controller/PhabricatorPeopleProfileManageController.php', 3458 3458 'PhabricatorPeopleProfileMenuEngine' => 'applications/people/engine/PhabricatorPeopleProfileMenuEngine.php', 3459 3459 'PhabricatorPeopleProfilePictureController' => 'applications/people/controller/PhabricatorPeopleProfilePictureController.php', 3460 + 'PhabricatorPeopleProfileRevisionsController' => 'applications/people/controller/PhabricatorPeopleProfileRevisionsController.php', 3460 3461 'PhabricatorPeopleProfileTasksController' => 'applications/people/controller/PhabricatorPeopleProfileTasksController.php', 3461 3462 'PhabricatorPeopleProfileViewController' => 'applications/people/controller/PhabricatorPeopleProfileViewController.php', 3462 3463 'PhabricatorPeopleQuery' => 'applications/people/query/PhabricatorPeopleQuery.php', 3463 3464 'PhabricatorPeopleRenameController' => 'applications/people/controller/PhabricatorPeopleRenameController.php', 3465 + 'PhabricatorPeopleRevisionsProfileMenuItem' => 'applications/people/menuitem/PhabricatorPeopleRevisionsProfileMenuItem.php', 3464 3466 'PhabricatorPeopleSearchEngine' => 'applications/people/query/PhabricatorPeopleSearchEngine.php', 3465 3467 'PhabricatorPeopleTasksProfileMenuItem' => 'applications/people/menuitem/PhabricatorPeopleTasksProfileMenuItem.php', 3466 3468 'PhabricatorPeopleTestDataGenerator' => 'applications/people/lipsum/PhabricatorPeopleTestDataGenerator.php', ··· 8825 8827 'PhabricatorPeopleProfileManageController' => 'PhabricatorPeopleProfileController', 8826 8828 'PhabricatorPeopleProfileMenuEngine' => 'PhabricatorProfileMenuEngine', 8827 8829 'PhabricatorPeopleProfilePictureController' => 'PhabricatorPeopleProfileController', 8830 + 'PhabricatorPeopleProfileRevisionsController' => 'PhabricatorPeopleProfileController', 8828 8831 'PhabricatorPeopleProfileTasksController' => 'PhabricatorPeopleProfileController', 8829 8832 'PhabricatorPeopleProfileViewController' => 'PhabricatorPeopleProfileController', 8830 8833 'PhabricatorPeopleQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', 8831 8834 'PhabricatorPeopleRenameController' => 'PhabricatorPeopleController', 8835 + 'PhabricatorPeopleRevisionsProfileMenuItem' => 'PhabricatorProfileMenuItem', 8832 8836 'PhabricatorPeopleSearchEngine' => 'PhabricatorApplicationSearchEngine', 8833 8837 'PhabricatorPeopleTasksProfileMenuItem' => 'PhabricatorProfileMenuItem', 8834 8838 'PhabricatorPeopleTestDataGenerator' => 'PhabricatorTestDataGenerator',
+2
src/applications/people/application/PhabricatorPeopleApplication.php
··· 70 70 'PhabricatorPeopleProfileTasksController', 71 71 'commits/(?P<id>[1-9]\d*)/' => 72 72 'PhabricatorPeopleProfileCommitsController', 73 + 'revisions/(?P<id>[1-9]\d*)/' => 74 + 'PhabricatorPeopleProfileRevisionsController', 73 75 'picture/(?P<id>[1-9]\d*)/' => 74 76 'PhabricatorPeopleProfilePictureController', 75 77 'manage/(?P<id>[1-9]\d*)/' =>
-8
src/applications/people/controller/PhabricatorPeopleProfileCommitsController.php
··· 13 13 ->needProfile(true) 14 14 ->needProfileImage(true) 15 15 ->needAvailability(true) 16 - ->requireCapabilities( 17 - array( 18 - PhabricatorPolicyCapability::CAN_VIEW, 19 - )) 20 16 ->executeOne(); 21 17 if (!$user) { 22 18 return new Aphront404Response(); ··· 63 59 ->needAuditRequests(true) 64 60 ->needCommitData(true) 65 61 ->needDrafts(true) 66 - ->requireCapabilities( 67 - array( 68 - PhabricatorPolicyCapability::CAN_VIEW, 69 - )) 70 62 ->setLimit(100) 71 63 ->execute(); 72 64
+82
src/applications/people/controller/PhabricatorPeopleProfileRevisionsController.php
··· 1 + <?php 2 + 3 + final class PhabricatorPeopleProfileRevisionsController 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 + ->executeOne(); 17 + if (!$user) { 18 + return new Aphront404Response(); 19 + } 20 + 21 + $class = 'PhabricatorDifferentialApplication'; 22 + if (!PhabricatorApplication::isClassInstalledForViewer($class, $viewer)) { 23 + return new Aphront404Response(); 24 + } 25 + 26 + $this->setUser($user); 27 + $title = array(pht('Recent Revisions'), $user->getUsername()); 28 + $header = $this->buildProfileHeader(); 29 + $commits = $this->buildRevisionsView($user); 30 + 31 + $crumbs = $this->buildApplicationCrumbs(); 32 + $crumbs->addTextCrumb(pht('Recent Revisions')); 33 + $crumbs->setBorder(true); 34 + 35 + $nav = $this->getProfileMenu(); 36 + $nav->selectFilter(PhabricatorPeopleProfileMenuEngine::ITEM_REVISIONS); 37 + 38 + $view = id(new PHUITwoColumnView()) 39 + ->setHeader($header) 40 + ->addClass('project-view-home') 41 + ->addClass('project-view-people-home') 42 + ->setFooter(array( 43 + $commits, 44 + )); 45 + 46 + return $this->newPage() 47 + ->setTitle($title) 48 + ->setCrumbs($crumbs) 49 + ->setNavigation($nav) 50 + ->appendChild($view); 51 + } 52 + 53 + private function buildRevisionsView(PhabricatorUser $user) { 54 + $viewer = $this->getViewer(); 55 + 56 + $revisions = id(new DifferentialRevisionQuery()) 57 + ->setViewer($viewer) 58 + ->withAuthors(array($user->getPHID())) 59 + ->needFlags(true) 60 + ->needDrafts(true) 61 + ->needReviewers(true) 62 + ->setLimit(100) 63 + ->execute(); 64 + 65 + $list = id(new DifferentialRevisionListView()) 66 + ->setUser($viewer) 67 + ->setNoBox(true) 68 + ->setRevisions($revisions) 69 + ->setNoDataString(pht('No recent revisions.')); 70 + 71 + $object_phids = $list->getRequiredHandlePHIDs(); 72 + $handles = $this->loadViewerHandles($object_phids); 73 + $list->setHandles($handles); 74 + 75 + $view = id(new PHUIObjectBoxView()) 76 + ->setHeaderText(pht('Recent Revisions')) 77 + ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) 78 + ->appendChild($list); 79 + 80 + return $view; 81 + } 82 + }
-4
src/applications/people/controller/PhabricatorPeopleProfileTasksController.php
··· 13 13 ->needProfile(true) 14 14 ->needProfileImage(true) 15 15 ->needAvailability(true) 16 - ->requireCapabilities( 17 - array( 18 - PhabricatorPolicyCapability::CAN_VIEW, 19 - )) 20 16 ->executeOne(); 21 17 if (!$user) { 22 18 return new Aphront404Response();
+11
src/applications/people/engine/PhabricatorPeopleProfileMenuEngine.php
··· 9 9 const ITEM_BADGES = 'people.badges'; 10 10 const ITEM_TASKS = 'people.tasks'; 11 11 const ITEM_COMMITS = 'people.commits'; 12 + const ITEM_REVISIONS = 'people.revisions'; 12 13 13 14 protected function isMenuEngineConfigurable() { 14 15 return false; ··· 50 51 $items[] = $this->newItem() 51 52 ->setBuiltinKey(self::ITEM_TASKS) 52 53 ->setMenuItemKey(PhabricatorPeopleTasksProfileMenuItem::MENUITEMKEY); 54 + } 55 + 56 + $have_differential = PhabricatorApplication::isClassInstalledForViewer( 57 + 'PhabricatorDifferentialApplication', 58 + $viewer); 59 + if ($have_differential) { 60 + $items[] = $this->newItem() 61 + ->setBuiltinKey(self::ITEM_REVISIONS) 62 + ->setMenuItemKey( 63 + PhabricatorPeopleRevisionsProfileMenuItem::MENUITEMKEY); 53 64 } 54 65 55 66 $have_diffusion = PhabricatorApplication::isClassInstalledForViewer(
+59
src/applications/people/menuitem/PhabricatorPeopleRevisionsProfileMenuItem.php
··· 1 + <?php 2 + 3 + final class PhabricatorPeopleRevisionsProfileMenuItem 4 + extends PhabricatorProfileMenuItem { 5 + 6 + const MENUITEMKEY = 'people.revisions'; 7 + 8 + public function getMenuItemTypeName() { 9 + return pht('Revisions'); 10 + } 11 + 12 + private function getDefaultName() { 13 + return pht('Revisions'); 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/revisions/{$id}/") 51 + ->setName($this->getDisplayName($config)) 52 + ->setIcon('fa-gear'); 53 + 54 + return array( 55 + $item, 56 + ); 57 + } 58 + 59 + }