@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
3final class PhabricatorPeopleProfileEditController
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 ->needProfileImage(true)
14 ->requireCapabilities(
15 array(
16 PhabricatorPolicyCapability::CAN_VIEW,
17 PhabricatorPolicyCapability::CAN_EDIT,
18 ))
19 ->executeOne();
20 if (!$user) {
21 return new Aphront404Response();
22 }
23
24 $this->setUser($user);
25
26 $done_uri = $this->getApplicationURI("manage/{$id}/");
27
28 $field_list = PhabricatorCustomField::getObjectFields(
29 $user,
30 PhabricatorCustomField::ROLE_EDIT);
31 $field_list
32 ->setViewer($viewer)
33 ->readFieldsFromStorage($user);
34
35 $validation_exception = null;
36 if ($request->isFormPost()) {
37 $xactions = $field_list->buildFieldTransactionsFromRequest(
38 new PhabricatorUserTransaction(),
39 $request);
40
41 $editor = id(new PhabricatorUserTransactionEditor())
42 ->setActor($viewer)
43 ->setContentSourceFromRequest($request)
44 ->setContinueOnNoEffect(true);
45
46 try {
47 $editor->applyTransactions($user, $xactions);
48 return id(new AphrontRedirectResponse())->setURI($done_uri);
49 } catch (PhabricatorApplicationTransactionValidationException $ex) {
50 $validation_exception = $ex;
51 }
52 }
53
54 $title = pht('Edit Profile');
55
56 $form = id(new AphrontFormView())
57 ->setUser($viewer);
58
59 $field_list->appendFieldsToForm($form);
60 $form
61 ->appendChild(
62 id(new AphrontFormSubmitControl())
63 ->addCancelButton($done_uri)
64 ->setValue(pht('Save Profile')));
65
66 $allow_public = PhabricatorEnv::getEnvConfig('policy.allow-public');
67 $note = null;
68 if ($allow_public) {
69 $note = id(new PHUIInfoView())
70 ->setSeverity(PHUIInfoView::SEVERITY_WARNING)
71 ->appendChild(pht(
72 'Information on user profiles on this install is publicly '.
73 'visible.'));
74 }
75
76 $form_box = id(new PHUIObjectBoxView())
77 ->setHeaderText(pht('Profile'))
78 ->setValidationException($validation_exception)
79 ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
80 ->setForm($form);
81
82 $crumbs = $this->buildApplicationCrumbs();
83 $crumbs->addTextCrumb(pht('Edit Profile'));
84 $crumbs->setBorder(true);
85
86 $nav = $this->newNavigation(
87 $user,
88 PhabricatorPeopleProfileMenuEngine::ITEM_MANAGE);
89
90 $header = id(new PHUIHeaderView())
91 ->setHeader(pht('Edit Profile: %s', $user->getFullName()))
92 ->setHeaderIcon('fa-pencil');
93
94 $view = id(new PHUITwoColumnView())
95 ->setHeader($header)
96 ->setFooter(array(
97 $note,
98 $form_box,
99 ));
100
101 return $this->newPage()
102 ->setTitle($title)
103 ->setCrumbs($crumbs)
104 ->setNavigation($nav)
105 ->appendChild($view);
106 }
107}