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 @@ -2747,11 +2747,13 @@ 'PhabricatorPeopleLogSearchEngine' => 'applications/people/query/PhabricatorPeopleLogSearchEngine.php', 'PhabricatorPeopleLogsController' => 'applications/people/controller/PhabricatorPeopleLogsController.php', 'PhabricatorPeopleMainMenuBarExtension' => 'applications/people/extension/PhabricatorPeopleMainMenuBarExtension.php', + 'PhabricatorPeopleManageProfilePanel' => 'applications/people/profilepanel/PhabricatorPeopleManageProfilePanel.php', 'PhabricatorPeopleNewController' => 'applications/people/controller/PhabricatorPeopleNewController.php', 'PhabricatorPeopleNoOwnerDatasource' => 'applications/people/typeahead/PhabricatorPeopleNoOwnerDatasource.php', 'PhabricatorPeopleOwnerDatasource' => 'applications/people/typeahead/PhabricatorPeopleOwnerDatasource.php', 'PhabricatorPeopleProfileController' => 'applications/people/controller/PhabricatorPeopleProfileController.php', 'PhabricatorPeopleProfileEditController' => 'applications/people/controller/PhabricatorPeopleProfileEditController.php', + 'PhabricatorPeopleProfileManageController' => 'applications/people/controller/PhabricatorPeopleProfileManageController.php', 'PhabricatorPeopleProfilePanelEngine' => 'applications/people/engine/PhabricatorPeopleProfilePanelEngine.php', 'PhabricatorPeopleProfilePictureController' => 'applications/people/controller/PhabricatorPeopleProfilePictureController.php', 'PhabricatorPeopleProfileViewController' => 'applications/people/controller/PhabricatorPeopleProfileViewController.php', @@ -7114,11 +7116,13 @@ 'PhabricatorPeopleLogSearchEngine' => 'PhabricatorApplicationSearchEngine', 'PhabricatorPeopleLogsController' => 'PhabricatorPeopleController', 'PhabricatorPeopleMainMenuBarExtension' => 'PhabricatorMainMenuBarExtension', + 'PhabricatorPeopleManageProfilePanel' => 'PhabricatorProfilePanel', 'PhabricatorPeopleNewController' => 'PhabricatorPeopleController', 'PhabricatorPeopleNoOwnerDatasource' => 'PhabricatorTypeaheadDatasource', 'PhabricatorPeopleOwnerDatasource' => 'PhabricatorTypeaheadCompositeDatasource', 'PhabricatorPeopleProfileController' => 'PhabricatorPeopleController', 'PhabricatorPeopleProfileEditController' => 'PhabricatorPeopleProfileController', + 'PhabricatorPeopleProfileManageController' => 'PhabricatorPeopleProfileController', 'PhabricatorPeopleProfilePanelEngine' => 'PhabricatorProfilePanelEngine', 'PhabricatorPeopleProfilePictureController' => 'PhabricatorPeopleProfileController', 'PhabricatorPeopleProfileViewController' => 'PhabricatorPeopleProfileController', 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 @@ -62,6 +62,8 @@ 'PhabricatorPeopleProfileEditController', 'picture/(?P[1-9]\d*)/' => 'PhabricatorPeopleProfilePictureController', + 'manage/(?P[1-9]\d*)/' => + 'PhabricatorPeopleProfileManageController', ), '/p/(?P[\w._-]+)/' => array( '' => 'PhabricatorPeopleProfileViewController', diff --git a/src/applications/people/controller/PhabricatorPeopleDeleteController.php b/src/applications/people/controller/PhabricatorPeopleDeleteController.php --- a/src/applications/people/controller/PhabricatorPeopleDeleteController.php +++ b/src/applications/people/controller/PhabricatorPeopleDeleteController.php @@ -3,28 +3,22 @@ final class PhabricatorPeopleDeleteController extends PhabricatorPeopleController { - private $id; - - public function willProcessRequest(array $data) { - $this->id = $data['id']; - } - - public function processRequest() { - $request = $this->getRequest(); - $admin = $request->getUser(); + public function handleRequest(AphrontRequest $request) { + $viewer = $request->getUser(); + $id = $request->getURIData('id'); $user = id(new PhabricatorPeopleQuery()) - ->setViewer($admin) - ->withIDs(array($this->id)) + ->setViewer($viewer) + ->withIDs(array($id)) ->executeOne(); if (!$user) { return new Aphront404Response(); } - $profile_uri = '/p/'.$user->getUsername().'/'; + $manage_uri = $this->getApplicationURI("manage/{$id}/"); - if ($user->getPHID() == $admin->getPHID()) { - return $this->buildDeleteSelfResponse($profile_uri); + if ($user->getPHID() == $viewer->getPHID()) { + return $this->buildDeleteSelfResponse($manage_uri); } $str1 = pht( @@ -47,7 +41,7 @@ $str4 = pht('To permanently destroy this user, run this command:'); $form = id(new AphrontFormView()) - ->setUser($admin) + ->setUser($viewer) ->appendRemarkupInstructions( csprintf( " phabricator/ $ ./bin/remove destroy %R\n", @@ -62,10 +56,10 @@ ->appendParagraph($str3) ->appendParagraph($str4) ->appendChild($form->buildLayoutView()) - ->addCancelButton($profile_uri, pht('Close')); + ->addCancelButton($manage_uri, pht('Close')); } - private function buildDeleteSelfResponse($profile_uri) { + private function buildDeleteSelfResponse($cancel_uri) { return $this->newDialog() ->setTitle(pht('You Shall Journey No Farther')) ->appendParagraph( @@ -73,7 +67,7 @@ 'As you stare into the gaping maw of the abyss, something '. 'holds you back.')) ->appendParagraph(pht('You can not delete your own account.')) - ->addCancelButton($profile_uri, pht('Turn Back')); + ->addCancelButton($cancel_uri, pht('Turn Back')); } diff --git a/src/applications/people/controller/PhabricatorPeopleDisableController.php b/src/applications/people/controller/PhabricatorPeopleDisableController.php --- a/src/applications/people/controller/PhabricatorPeopleDisableController.php +++ b/src/applications/people/controller/PhabricatorPeopleDisableController.php @@ -3,21 +3,14 @@ final class PhabricatorPeopleDisableController extends PhabricatorPeopleController { - private $id; - private $via; - - public function willProcessRequest(array $data) { - $this->id = $data['id']; - $this->via = $data['via']; - } - - public function processRequest() { - $request = $this->getRequest(); - $admin = $request->getUser(); + public function handleRequest(AphrontRequest $request) { + $viewer = $this->getViewer(); + $id = $request->getURIData('id'); + $via = $request->getURIData('id'); $user = id(new PhabricatorPeopleQuery()) - ->setViewer($admin) - ->withIDs(array($this->id)) + ->setViewer($viewer) + ->withIDs(array($id)) ->executeOne(); if (!$user) { return new Aphront404Response(); @@ -27,16 +20,16 @@ // on profiles and also via the "X" action on the approval queue. We do // things slightly differently depending on the context the actor is in. - $is_disapprove = ($this->via == 'disapprove'); + $is_disapprove = ($via == 'disapprove'); if ($is_disapprove) { $done_uri = $this->getApplicationURI('query/approval/'); $should_disable = true; } else { - $done_uri = '/p/'.$user->getUsername().'/'; + $done_uri = $this->getApplicationURI("manage/{$id}/"); $should_disable = !$user->getIsDisabled(); } - if ($admin->getPHID() == $user->getPHID()) { + if ($viewer->getPHID() == $user->getPHID()) { return $this->newDialog() ->setTitle(pht('Something Stays Your Hand')) ->appendParagraph( @@ -47,7 +40,7 @@ if ($request->isFormPost()) { id(new PhabricatorUserEditor()) - ->setActor($admin) + ->setActor($viewer) ->disableUser($user, $should_disable); return id(new AphrontRedirectResponse())->setURI($done_uri); diff --git a/src/applications/people/controller/PhabricatorPeopleEmpowerController.php b/src/applications/people/controller/PhabricatorPeopleEmpowerController.php --- a/src/applications/people/controller/PhabricatorPeopleEmpowerController.php +++ b/src/applications/people/controller/PhabricatorPeopleEmpowerController.php @@ -3,47 +3,41 @@ final class PhabricatorPeopleEmpowerController extends PhabricatorPeopleController { - private $id; - - public function willProcessRequest(array $data) { - $this->id = $data['id']; - } - - public function processRequest() { - $request = $this->getRequest(); - $admin = $request->getUser(); + public function handleRequest(AphrontRequest $request) { + $viewer = $this->getViewer(); + $id = $request->getURIData('id'); $user = id(new PhabricatorPeopleQuery()) - ->setViewer($admin) - ->withIDs(array($this->id)) + ->setViewer($viewer) + ->withIDs(array($id)) ->executeOne(); if (!$user) { return new Aphront404Response(); } - $profile_uri = '/p/'.$user->getUsername().'/'; + $done_uri = $this->getApplicationURI("manage/{$id}/"); id(new PhabricatorAuthSessionEngine())->requireHighSecuritySession( - $admin, + $viewer, $request, - $profile_uri); + $done_uri); - if ($user->getPHID() == $admin->getPHID()) { + if ($user->getPHID() == $viewer->getPHID()) { return $this->newDialog() ->setTitle(pht('Your Way is Blocked')) ->appendParagraph( pht( 'After a time, your efforts fail. You can not adjust your own '. 'status as an administrator.')) - ->addCancelButton($profile_uri, pht('Accept Fate')); + ->addCancelButton($done_uri, pht('Accept Fate')); } if ($request->isFormPost()) { id(new PhabricatorUserEditor()) - ->setActor($admin) + ->setActor($viewer) ->makeAdminUser($user, !$user->getIsAdmin()); - return id(new AphrontRedirectResponse())->setURI($profile_uri); + return id(new AphrontRedirectResponse())->setURI($done_uri); } if ($user->getIsAdmin()) { @@ -69,7 +63,7 @@ ->setTitle($title) ->setShortTitle($short) ->appendParagraph($body) - ->addCancelButton($profile_uri) + ->addCancelButton($done_uri) ->addSubmitButton($submit); } diff --git a/src/applications/people/controller/PhabricatorPeopleProfileEditController.php b/src/applications/people/controller/PhabricatorPeopleProfileEditController.php --- a/src/applications/people/controller/PhabricatorPeopleProfileEditController.php +++ b/src/applications/people/controller/PhabricatorPeopleProfileEditController.php @@ -23,7 +23,7 @@ $this->setUser($user); - $profile_uri = '/p/'.$user->getUsername().'/'; + $done_uri = $this->getApplicationURI("manage/{$id}/"); $field_list = PhabricatorCustomField::getObjectFields( $user, @@ -46,7 +46,7 @@ try { $editor->applyTransactions($user, $xactions); - return id(new AphrontRedirectResponse())->setURI($profile_uri); + return id(new AphrontRedirectResponse())->setURI($done_uri); } catch (PhabricatorApplicationTransactionValidationException $ex) { $validation_exception = $ex; } @@ -61,7 +61,7 @@ $form ->appendChild( id(new AphrontFormSubmitControl()) - ->addCancelButton($profile_uri) + ->addCancelButton($done_uri) ->setValue(pht('Save Profile'))); $allow_public = PhabricatorEnv::getEnvConfig('policy.allow-public'); diff --git a/src/applications/people/controller/PhabricatorPeopleProfileManageController.php b/src/applications/people/controller/PhabricatorPeopleProfileManageController.php new file mode 100644 --- /dev/null +++ b/src/applications/people/controller/PhabricatorPeopleProfileManageController.php @@ -0,0 +1,185 @@ +getViewer(); + $id = $request->getURIData('id'); + + $user = id(new PhabricatorPeopleQuery()) + ->setViewer($viewer) + ->withIDs(array($id)) + ->needProfile(true) + ->needProfileImage(true) + ->executeOne(); + if (!$user) { + return new Aphront404Response(); + } + + $this->setUser($user); + + $profile = $user->loadUserProfile(); + $picture = $user->getProfileImageURI(); + + $profile_icon = PhabricatorPeopleIconSet::getIconIcon($profile->getIcon()); + $profile_icon = id(new PHUIIconView()) + ->setIconFont($profile_icon.' grey'); + $profile_title = $profile->getDisplayTitle(); + + $header = id(new PHUIHeaderView()) + ->setHeader($user->getFullName()) + ->setSubheader(array($profile_icon, $profile_title)) + ->setImage($picture); + + $actions = $this->buildActionList($user); + $properties = $this->buildPropertyView($user); + $properties->setActionList($actions); + $name = $user->getUsername(); + + $object_box = id(new PHUIObjectBoxView()) + ->setHeader($header) + ->addPropertyList($properties); + + $nav = $this->getProfileMenu(); + $nav->selectFilter(PhabricatorPeopleProfilePanelEngine::PANEL_MANAGE); + + $timeline = $this->buildTransactionTimeline( + $user, + new PhabricatorPeopleTransactionQuery()); + $timeline->setShouldTerminate(true); + + $crumbs = $this->buildApplicationCrumbs(); + $crumbs->addTextCrumb(pht('Manage')); + + return $this->newPage() + ->setTitle( + array( + pht('Manage User'), + $user->getUsername(), + )) + ->setNavigation($nav) + ->setCrumbs($crumbs) + ->appendChild( + array( + $object_box, + $timeline, + )); + } + + private function buildPropertyView(PhabricatorUser $user) { + + $viewer = $this->getRequest()->getUser(); + $view = id(new PHUIPropertyListView()) + ->setUser($viewer) + ->setObject($user); + + return $view; + } + + private function buildActionList(PhabricatorUser $user) { + $viewer = $this->getViewer(); + + $actions = id(new PhabricatorActionListView()) + ->setUser($viewer); + + $can_edit = PhabricatorPolicyFilter::hasCapability( + $viewer, + $user, + PhabricatorPolicyCapability::CAN_EDIT); + + $actions->addAction( + id(new PhabricatorActionView()) + ->setIcon('fa-pencil') + ->setName(pht('Edit Profile')) + ->setHref($this->getApplicationURI('editprofile/'.$user->getID().'/')) + ->setDisabled(!$can_edit) + ->setWorkflow(!$can_edit)); + + $actions->addAction( + id(new PhabricatorActionView()) + ->setIcon('fa-picture-o') + ->setName(pht('Edit Profile Picture')) + ->setHref($this->getApplicationURI('picture/'.$user->getID().'/')) + ->setDisabled(!$can_edit) + ->setWorkflow(!$can_edit)); + + $actions->addAction( + id(new PhabricatorActionView()) + ->setIcon('fa-wrench') + ->setName(pht('Edit Settings')) + ->setDisabled(!$can_edit) + ->setWorkflow(!$can_edit) + ->setHref('/settings/'.$user->getID().'/')); + + if ($user->getIsAdmin()) { + $empower_icon = 'fa-arrow-circle-o-down'; + $empower_name = pht('Remove Administrator'); + } else { + $empower_icon = 'fa-arrow-circle-o-up'; + $empower_name = pht('Make Administrator'); + } + + $is_admin = $viewer->getIsAdmin(); + $is_self = ($user->getPHID() === $viewer->getPHID()); + $can_admin = ($is_admin && !$is_self); + + $actions->addAction( + id(new PhabricatorActionView()) + ->setIcon($empower_icon) + ->setName($empower_name) + ->setDisabled(!$can_admin) + ->setWorkflow(true) + ->setHref($this->getApplicationURI('empower/'.$user->getID().'/'))); + + $actions->addAction( + id(new PhabricatorActionView()) + ->setIcon('fa-tag') + ->setName(pht('Change Username')) + ->setDisabled(!$is_admin) + ->setWorkflow(true) + ->setHref($this->getApplicationURI('rename/'.$user->getID().'/'))); + + if ($user->getIsDisabled()) { + $disable_icon = 'fa-check-circle-o'; + $disable_name = pht('Enable User'); + } else { + $disable_icon = 'fa-ban'; + $disable_name = pht('Disable User'); + } + + $actions->addAction( + id(new PhabricatorActionView()) + ->setIcon($disable_icon) + ->setName($disable_name) + ->setDisabled(!$can_admin) + ->setWorkflow(true) + ->setHref($this->getApplicationURI('disable/'.$user->getID().'/'))); + + $actions->addAction( + id(new PhabricatorActionView()) + ->setIcon('fa-times') + ->setName(pht('Delete User')) + ->setDisabled(!$can_admin) + ->setWorkflow(true) + ->setHref($this->getApplicationURI('delete/'.$user->getID().'/'))); + + $can_welcome = ($is_admin && $user->canEstablishWebSessions()); + + $actions->addAction( + id(new PhabricatorActionView()) + ->setIcon('fa-envelope') + ->setName(pht('Send Welcome Email')) + ->setWorkflow(true) + ->setDisabled(!$can_welcome) + ->setHref($this->getApplicationURI('welcome/'.$user->getID().'/'))); + + return $actions; + } + + +} diff --git a/src/applications/people/controller/PhabricatorPeopleProfilePictureController.php b/src/applications/people/controller/PhabricatorPeopleProfilePictureController.php --- a/src/applications/people/controller/PhabricatorPeopleProfilePictureController.php +++ b/src/applications/people/controller/PhabricatorPeopleProfilePictureController.php @@ -23,7 +23,7 @@ $this->setUser($user); - $profile_uri = '/p/'.$user->getUsername().'/'; + $done_uri = $this->getApplicationURI("manage/{$id}/"); $supported_formats = PhabricatorFile::getTransformableImageFormats(); $e_file = true; @@ -76,7 +76,7 @@ $xformed->attachToObject($user->getPHID()); } $user->save(); - return id(new AphrontRedirectResponse())->setURI($profile_uri); + return id(new AphrontRedirectResponse())->setURI($done_uri); } } @@ -241,7 +241,7 @@ pht('Supported formats: %s', implode(', ', $supported_formats)))) ->appendChild( id(new AphrontFormSubmitControl()) - ->addCancelButton($profile_uri) + ->addCancelButton($done_uri) ->setValue(pht('Upload Picture'))); $upload_box = id(new PHUIObjectBoxView()) diff --git a/src/applications/people/controller/PhabricatorPeopleProfileViewController.php b/src/applications/people/controller/PhabricatorPeopleProfileViewController.php --- a/src/applications/people/controller/PhabricatorPeopleProfileViewController.php +++ b/src/applications/people/controller/PhabricatorPeopleProfileViewController.php @@ -41,27 +41,6 @@ ->setObject($user) ->setUser($viewer); - $can_edit = PhabricatorPolicyFilter::hasCapability( - $viewer, - $user, - PhabricatorPolicyCapability::CAN_EDIT); - - $actions->addAction( - id(new PhabricatorActionView()) - ->setIcon('fa-pencil') - ->setName(pht('Edit Profile')) - ->setHref($this->getApplicationURI('editprofile/'.$user->getID().'/')) - ->setDisabled(!$can_edit) - ->setWorkflow(!$can_edit)); - - $actions->addAction( - id(new PhabricatorActionView()) - ->setIcon('fa-picture-o') - ->setName(pht('Edit Profile Picture')) - ->setHref($this->getApplicationURI('picture/'.$user->getID().'/')) - ->setDisabled(!$can_edit) - ->setWorkflow(!$can_edit)); - $class = 'PhabricatorConpherenceApplication'; if (PhabricatorApplication::isClassInstalledForViewer($class, $viewer)) { $href = id(new PhutilURI('/conpherence/new/')) @@ -78,79 +57,10 @@ ->setHref($href)); } - if ($viewer->getIsAdmin()) { - $actions->addAction( - id(new PhabricatorActionView()) - ->setIcon('fa-wrench') - ->setName(pht('Edit Settings')) - ->setDisabled(!$can_edit) - ->setWorkflow(!$can_edit) - ->setHref('/settings/'.$user->getID().'/')); - - if ($user->getIsAdmin()) { - $empower_icon = 'fa-arrow-circle-o-down'; - $empower_name = pht('Remove Administrator'); - } else { - $empower_icon = 'fa-arrow-circle-o-up'; - $empower_name = pht('Make Administrator'); - } - - $actions->addAction( - id(new PhabricatorActionView()) - ->setIcon($empower_icon) - ->setName($empower_name) - ->setDisabled(($user->getPHID() == $viewer->getPHID())) - ->setWorkflow(true) - ->setHref($this->getApplicationURI('empower/'.$user->getID().'/'))); - - $actions->addAction( - id(new PhabricatorActionView()) - ->setIcon('fa-tag') - ->setName(pht('Change Username')) - ->setWorkflow(true) - ->setHref($this->getApplicationURI('rename/'.$user->getID().'/'))); - - if ($user->getIsDisabled()) { - $disable_icon = 'fa-check-circle-o'; - $disable_name = pht('Enable User'); - } else { - $disable_icon = 'fa-ban'; - $disable_name = pht('Disable User'); - } - - $actions->addAction( - id(new PhabricatorActionView()) - ->setIcon($disable_icon) - ->setName($disable_name) - ->setDisabled(($user->getPHID() == $viewer->getPHID())) - ->setWorkflow(true) - ->setHref($this->getApplicationURI('disable/'.$user->getID().'/'))); - - $actions->addAction( - id(new PhabricatorActionView()) - ->setIcon('fa-times') - ->setName(pht('Delete User')) - ->setDisabled(($user->getPHID() == $viewer->getPHID())) - ->setWorkflow(true) - ->setHref($this->getApplicationURI('delete/'.$user->getID().'/'))); - - $can_welcome = $user->canEstablishWebSessions(); - - $actions->addAction( - id(new PhabricatorActionView()) - ->setIcon('fa-envelope') - ->setName(pht('Send Welcome Email')) - ->setWorkflow(true) - ->setDisabled(!$can_welcome) - ->setHref($this->getApplicationURI('welcome/'.$user->getID().'/'))); - } $properties = $this->buildPropertyView($user, $actions); $name = $user->getUsername(); - $crumbs = $this->buildApplicationCrumbs(); - $crumbs->addTextCrumb($name); - $object_box = id(new PHUIObjectBoxView()) ->setHeader($header) ->addPropertyList($properties); @@ -225,8 +135,9 @@ $box = id(new PHUIObjectBoxView()) ->setHeaderText(pht('Badges')) ->appendChild($flex); - } } + } + return $box; } diff --git a/src/applications/people/controller/PhabricatorPeopleRenameController.php b/src/applications/people/controller/PhabricatorPeopleRenameController.php --- a/src/applications/people/controller/PhabricatorPeopleRenameController.php +++ b/src/applications/people/controller/PhabricatorPeopleRenameController.php @@ -3,30 +3,24 @@ final class PhabricatorPeopleRenameController extends PhabricatorPeopleController { - private $id; - - public function willProcessRequest(array $data) { - $this->id = $data['id']; - } - - public function processRequest() { - $request = $this->getRequest(); - $admin = $request->getUser(); + public function handleRequest(AphrontRequest $request) { + $viewer = $this->getViewer(); + $id = $request->getURIData('id'); $user = id(new PhabricatorPeopleQuery()) - ->setViewer($admin) - ->withIDs(array($this->id)) + ->setViewer($viewer) + ->withIDs(array($id)) ->executeOne(); if (!$user) { return new Aphront404Response(); } - $profile_uri = '/p/'.$user->getUsername().'/'; + $done_uri = $this->getApplicationURI("manage/{$id}/"); id(new PhabricatorAuthSessionEngine())->requireHighSecuritySession( - $admin, + $viewer, $request, - $profile_uri); + $done_uri); $errors = array(); @@ -35,7 +29,6 @@ if ($request->isFormPost()) { $v_username = $request->getStr('username'); - if (!strlen($v_username)) { $e_username = pht('Required'); $errors[] = pht('New username is required.'); @@ -50,12 +43,10 @@ if (!$errors) { try { id(new PhabricatorUserEditor()) - ->setActor($admin) + ->setActor($viewer) ->changeUsername($user, $v_username); - $new_uri = '/p/'.$v_username.'/'; - - return id(new AphrontRedirectResponse())->setURI($new_uri); + return id(new AphrontRedirectResponse())->setURI($done_uri); } catch (AphrontDuplicateKeyQueryException $ex) { $e_username = pht('Not Unique'); $errors[] = pht('Another user already has that username.'); @@ -88,7 +79,7 @@ 'password if necessary.'); $form = id(new AphrontFormView()) - ->setUser($admin) + ->setUser($viewer) ->appendChild( id(new AphrontFormStaticControl()) ->setLabel(pht('Old Username')) @@ -114,9 +105,9 @@ ->appendParagraph($inst4) ->appendParagraph($inst5) ->appendParagraph(null) - ->appendChild($form->buildLayoutView()) + ->appendForm($form) ->addSubmitButton(pht('Rename User')) - ->addCancelButton($profile_uri); + ->addCancelButton($done_uri); } } diff --git a/src/applications/people/engine/PhabricatorPeopleProfilePanelEngine.php b/src/applications/people/engine/PhabricatorPeopleProfilePanelEngine.php --- a/src/applications/people/engine/PhabricatorPeopleProfilePanelEngine.php +++ b/src/applications/people/engine/PhabricatorPeopleProfilePanelEngine.php @@ -4,6 +4,7 @@ extends PhabricatorProfilePanelEngine { const PANEL_PROFILE = 'people.profile'; + const PANEL_MANAGE = 'people.manage'; protected function isPanelEngineConfigurable() { return false; @@ -90,6 +91,10 @@ ->setPanelProperty('uri', $uri); } + $panels[] = $this->newPanel() + ->setBuiltinKey(self::PANEL_MANAGE) + ->setPanelKey(PhabricatorPeopleManageProfilePanel::PANELKEY); + return $panels; } diff --git a/src/applications/people/profilepanel/PhabricatorPeopleManageProfilePanel.php b/src/applications/people/profilepanel/PhabricatorPeopleManageProfilePanel.php new file mode 100644 --- /dev/null +++ b/src/applications/people/profilepanel/PhabricatorPeopleManageProfilePanel.php @@ -0,0 +1,54 @@ +getPanelProperty('name'); + + if (strlen($name)) { + return $name; + } + + return $this->getDefaultName(); + } + + public function buildEditEngineFields( + PhabricatorProfilePanelConfiguration $config) { + return array( + id(new PhabricatorTextEditField()) + ->setKey('name') + ->setLabel(pht('Name')) + ->setPlaceholder($this->getDefaultName()) + ->setValue($config->getPanelProperty('name')), + ); + } + + protected function newNavigationMenuItems( + PhabricatorProfilePanelConfiguration $config) { + + $user = $config->getProfileObject(); + $id = $user->getID(); + + $item = $this->newItem() + ->setHref("/people/manage/{$id}/") + ->setName($this->getDisplayName($config)) + ->setIcon('fa-gears'); + + return array( + $item, + ); + } + +}