2011-02-06 07:36:21 +01:00
|
|
|
<?php
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Copyright 2011 Facebook, Inc.
|
|
|
|
*
|
|
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
* you may not use this file except in compliance with the License.
|
|
|
|
* You may obtain a copy of the License at
|
|
|
|
*
|
|
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
*
|
|
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
* See the License for the specific language governing permissions and
|
|
|
|
* limitations under the License.
|
|
|
|
*/
|
|
|
|
|
|
|
|
class PhabricatorUserSettingsController extends PhabricatorPeopleController {
|
|
|
|
|
|
|
|
private $page;
|
2011-07-18 17:02:00 +02:00
|
|
|
private $pages;
|
2011-02-06 07:36:21 +01:00
|
|
|
|
|
|
|
public function willProcessRequest(array $data) {
|
|
|
|
$this->page = idx($data, 'page');
|
|
|
|
}
|
|
|
|
|
|
|
|
public function processRequest() {
|
|
|
|
|
|
|
|
$request = $this->getRequest();
|
|
|
|
|
2011-07-24 20:02:08 +02:00
|
|
|
// TODO: Implement a password panel.
|
|
|
|
|
2011-07-18 17:02:00 +02:00
|
|
|
$this->pages = array(
|
2011-02-20 01:46:14 +01:00
|
|
|
'account' => 'Account',
|
|
|
|
'email' => 'Email',
|
2011-07-24 20:02:08 +02:00
|
|
|
'preferences' => 'Preferences',
|
2011-07-18 17:02:00 +02:00
|
|
|
'conduit' => 'Conduit Certificate',
|
2011-02-06 07:36:21 +01:00
|
|
|
);
|
|
|
|
|
2011-07-24 20:02:08 +02:00
|
|
|
if (PhabricatorUserSSHKeysSettingsPanelController::isEnabled()) {
|
|
|
|
$this->pages['sshkeys'] = 'SSH Public Keys';
|
|
|
|
}
|
|
|
|
|
2011-02-22 07:51:34 +01:00
|
|
|
$oauth_providers = PhabricatorOAuthProvider::getAllProviders();
|
|
|
|
foreach ($oauth_providers as $provider) {
|
|
|
|
if (!$provider->isProviderEnabled()) {
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
$key = $provider->getProviderKey();
|
|
|
|
$name = $provider->getProviderName();
|
2011-07-18 17:02:00 +02:00
|
|
|
$this->pages[$key] = $name.' Account';
|
2011-02-22 07:51:34 +01:00
|
|
|
}
|
|
|
|
|
2011-07-18 17:02:00 +02:00
|
|
|
if (empty($this->pages[$this->page])) {
|
|
|
|
$this->page = key($this->pages);
|
2011-02-06 07:36:21 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
switch ($this->page) {
|
2011-02-06 08:56:06 +01:00
|
|
|
case 'account':
|
2011-07-18 17:02:00 +02:00
|
|
|
$delegate = new PhabricatorUserAccountSettingsPanelController($request);
|
2011-02-06 08:56:06 +01:00
|
|
|
break;
|
2011-02-20 01:46:14 +01:00
|
|
|
case 'email':
|
2011-07-18 17:02:00 +02:00
|
|
|
$delegate = new PhabricatorUserEmailSettingsPanelController($request);
|
|
|
|
break;
|
|
|
|
case 'conduit':
|
|
|
|
$delegate = new PhabricatorUserConduitSettingsPanelController($request);
|
2011-02-20 01:46:14 +01:00
|
|
|
break;
|
2011-07-22 19:17:57 +02:00
|
|
|
case 'sshkeys':
|
|
|
|
$delegate = new PhabricatorUserSSHKeysSettingsPanelController($request);
|
|
|
|
break;
|
2011-07-24 20:02:08 +02:00
|
|
|
case 'preferences':
|
|
|
|
$delegate = new PhabricatorUserPreferenceSettingsPanelController(
|
|
|
|
$request);
|
|
|
|
break;
|
2011-02-06 07:36:21 +01:00
|
|
|
default:
|
2011-07-18 17:02:00 +02:00
|
|
|
if (empty($this->pages[$this->page])) {
|
2011-02-22 07:51:34 +01:00
|
|
|
return new Aphront404Response();
|
|
|
|
}
|
2011-07-18 17:02:00 +02:00
|
|
|
$delegate = new PhabricatorUserOAuthSettingsPanelController($request);
|
|
|
|
$delegate->setOAuthProvider($oauth_providers[$this->page]);
|
2011-02-06 07:36:21 +01:00
|
|
|
}
|
|
|
|
|
2011-07-18 17:02:00 +02:00
|
|
|
$response = $this->delegateToController($delegate);
|
2011-02-06 07:36:21 +01:00
|
|
|
|
2011-07-18 17:02:00 +02:00
|
|
|
if ($response instanceof AphrontView) {
|
|
|
|
$sidenav = $this->renderSideNav();
|
|
|
|
$sidenav->appendChild($response);
|
|
|
|
return $this->buildStandardPageResponse(
|
|
|
|
$sidenav,
|
|
|
|
array(
|
|
|
|
'title' => 'Account Settings',
|
|
|
|
));
|
|
|
|
} else {
|
|
|
|
return $response;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private function renderSideNav() {
|
2011-02-06 07:36:21 +01:00
|
|
|
$sidenav = new AphrontSideNavView();
|
2011-07-18 17:02:00 +02:00
|
|
|
foreach ($this->pages as $page => $name) {
|
2011-02-06 07:36:21 +01:00
|
|
|
$sidenav->addNavItem(
|
|
|
|
phutil_render_tag(
|
|
|
|
'a',
|
|
|
|
array(
|
|
|
|
'href' => '/settings/page/'.$page.'/',
|
|
|
|
'class' => ($page == $this->page)
|
|
|
|
? 'aphront-side-nav-selected'
|
|
|
|
: null,
|
|
|
|
),
|
|
|
|
phutil_escape_html($name)));
|
|
|
|
}
|
2011-07-18 17:02:00 +02:00
|
|
|
return $sidenav;
|
2011-02-22 07:51:34 +01:00
|
|
|
}
|
2011-06-18 22:07:02 +02:00
|
|
|
}
|