page = idx($data, 'page'); } public function processRequest() { $request = $this->getRequest(); $oauth_providers = PhabricatorOAuthProvider::getAllProviders(); $sidenav = $this->renderSideNav($oauth_providers); $this->page = $sidenav->selectFilter($this->page, 'account'); switch ($this->page) { case 'account': $delegate = new PhabricatorUserAccountSettingsPanelController($request); break; case 'profile': $delegate = new PhabricatorUserProfileSettingsPanelController($request); break; case 'email': $delegate = new PhabricatorUserEmailSettingsPanelController($request); break; case 'emailpref': $delegate = new PhabricatorUserEmailPreferenceSettingsPanelController( $request); break; case 'password': $delegate = new PhabricatorUserPasswordSettingsPanelController( $request); break; case 'conduit': $delegate = new PhabricatorUserConduitSettingsPanelController($request); break; case 'sshkeys': $delegate = new PhabricatorUserSSHKeysSettingsPanelController($request); break; case 'preferences': $delegate = new PhabricatorUserPreferenceSettingsPanelController( $request); break; default: $delegate = new PhabricatorUserOAuthSettingsPanelController($request); $delegate->setOAuthProvider($oauth_providers[$this->page]); break; } $response = $this->delegateToController($delegate); if ($response instanceof AphrontView) { $sidenav->appendChild($response); return $this->buildStandardPageResponse( $sidenav, array( 'title' => 'Account Settings', )); } else { return $response; } } private function renderSideNav($oauth_providers) { $sidenav = new AphrontSideNavFilterView(); $sidenav ->setBaseURI(new PhutilURI('/settings/page/')) ->addLabel('Account Information') ->addFilter('account', 'Account') ->addFilter('profile', 'Profile') ->addSpacer() ->addLabel('Email') ->addFilter('email', 'Email Address') ->addFilter('emailpref', 'Email Preferences') ->addSpacer() ->addLabel('Authentication'); if (PhabricatorEnv::getEnvConfig('account.editable') && PhabricatorEnv::getEnvConfig('auth.password-auth-enabled')) { $sidenav->addFilter('password', 'Password'); } $sidenav->addFilter('conduit', 'Conduit Certificate'); if (PhabricatorUserSSHKeysSettingsPanelController::isEnabled()) { $sidenav->addFilter('sshkeys', 'SSH Public Keys'); } $sidenav->addSpacer(); $sidenav->addLabel('Application Settings'); $sidenav->addFilter('preferences', 'Display Preferences'); $items = array(); foreach ($oauth_providers as $provider) { if (!$provider->isProviderEnabled()) { continue; } $key = $provider->getProviderKey(); $name = $provider->getProviderName(); $items[$key] = $name.' Account'; } if ($items) { $sidenav->addSpacer(); $sidenav->addLabel('Linked Accounts'); foreach ($items as $key => $name) { $sidenav->addFilter($key, $name); } } return $sidenav; } }