@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<?php
2
3abstract class PhabricatorPeopleProfileController
4 extends PhabricatorPeopleController {
5
6 private $user;
7
8 public function shouldRequireAdmin() {
9 return false;
10 }
11
12 public function setUser(PhabricatorUser $user) {
13 $this->user = $user;
14 return $this;
15 }
16
17 public function getUser() {
18 return $this->user;
19 }
20
21 protected function buildApplicationCrumbs() {
22 $crumbs = parent::buildApplicationCrumbs();
23
24 $user = $this->getUser();
25 if ($user) {
26 $crumbs->addTextCrumb(
27 $user->getUsername(),
28 urisprintf('/p/%s/', $user->getUsername()));
29 }
30
31 return $crumbs;
32 }
33
34 public function buildProfileHeader() {
35 $user = $this->user;
36 $viewer = $this->getViewer();
37
38 $profile = $user->loadUserProfile();
39 $picture = $user->getProfileImageURI();
40
41 $profile_icon = PhabricatorPeopleIconSet::getIconIcon($profile->getIcon());
42 $profile_title = $profile->getDisplayTitle();
43
44
45 $tag = id(new PHUITagView())
46 ->setType(PHUITagView::TYPE_SHADE);
47
48 $tags = array();
49 if ($user->getIsAdmin()) {
50 $tags[] = id(clone $tag)
51 ->setName(pht('Administrator'))
52 ->setColor('blue');
53 }
54
55 // "Disabled" gets a stronger status tag below.
56
57 if (!$user->getIsApproved()) {
58 $tags[] = id(clone $tag)
59 ->setName('Not Approved')
60 ->setColor('yellow');
61 }
62
63 if ($user->getIsSystemAgent()) {
64 $tags[] = id(clone $tag)
65 ->setName(pht('Bot'))
66 ->setColor('orange');
67 }
68
69 if ($user->getIsMailingList()) {
70 $tags[] = id(clone $tag)
71 ->setName(pht('Mailing List'))
72 ->setColor('orange');
73 }
74
75 if (!$user->getIsEmailVerified()) {
76 $tags[] = id(clone $tag)
77 ->setName(pht('Email Not Verified'))
78 ->setColor('violet');
79 }
80
81 if ($viewer->getIsAdmin() && $user->getIsEnrolledInMultiFactor()) {
82 $tags[] = id(clone $tag)
83 ->setName(pht('Has MFA'))
84 ->setIcon('fa-lock')
85 ->setColor('green');
86 }
87
88 $header = id(new PHUIHeaderView())
89 ->setHeader($user->getFullName())
90 ->setImage($picture)
91 ->setProfileHeader(true)
92 ->addClass('people-profile-header');
93
94 foreach ($tags as $tag) {
95 $header->addTag($tag);
96 }
97
98 require_celerity_resource('project-view-css');
99
100 if ($user->getIsDisabled()) {
101 $header->setStatus('fa-ban', 'red', pht('Disabled'));
102 } else {
103 $header->setStatus($profile_icon, 'bluegrey', $profile_title);
104 }
105
106 $can_edit = PhabricatorPolicyFilter::hasCapability(
107 $viewer,
108 $user,
109 PhabricatorPolicyCapability::CAN_EDIT);
110
111 if ($can_edit) {
112 $id = $user->getID();
113 $header->setImageEditURL($this->getApplicationURI("picture/{$id}/"));
114 }
115
116 return $header;
117 }
118
119 final protected function newNavigation(
120 PhabricatorUser $user,
121 $item_identifier) {
122
123 $viewer = $this->getViewer();
124
125 $engine = id(new PhabricatorPeopleProfileMenuEngine())
126 ->setViewer($viewer)
127 ->setController($this)
128 ->setProfileObject($user);
129
130 $view_list = $engine->newProfileMenuItemViewList();
131
132 $view_list->setSelectedViewWithItemIdentifier($item_identifier);
133
134 $navigation = $view_list->newNavigationView();
135
136 return $navigation;
137 }
138
139}