Differential D16017 Diff 38570 src/applications/settings/controller/PhabricatorSettingsMainController.php
Changeset View
Changeset View
Standalone View
Standalone View
src/applications/settings/controller/PhabricatorSettingsMainController.php
| <?php | <?php | ||||
| final class PhabricatorSettingsMainController | final class PhabricatorSettingsMainController | ||||
| extends PhabricatorController { | extends PhabricatorController { | ||||
| private $user; | private $user; | ||||
| private function getUser() { | private function getUser() { | ||||
| return $this->user; | return $this->user; | ||||
| } | } | ||||
| private function isSelf() { | private function isSelf() { | ||||
| $user = $this->getUser(); | |||||
| if (!$user) { | |||||
| return false; | |||||
| } | |||||
| $user_phid = $user->getPHID(); | |||||
| $viewer_phid = $this->getViewer()->getPHID(); | $viewer_phid = $this->getViewer()->getPHID(); | ||||
| $user_phid = $this->getUser()->getPHID(); | |||||
| return ($viewer_phid == $user_phid); | return ($viewer_phid == $user_phid); | ||||
| } | } | ||||
| public function handleRequest(AphrontRequest $request) { | public function handleRequest(AphrontRequest $request) { | ||||
| $viewer = $this->getViewer(); | $viewer = $this->getViewer(); | ||||
| $id = $request->getURIData('id'); | $id = $request->getURIData('id'); | ||||
| $key = $request->getURIData('key'); | $key = $request->getURIData('key'); | ||||
| Show All 17 Lines | if ($id) { | ||||
| $this->user = $viewer; | $this->user = $viewer; | ||||
| } | } | ||||
| $panels = $this->buildPanels(); | $panels = $this->buildPanels(); | ||||
| $nav = $this->renderSideNav($panels); | $nav = $this->renderSideNav($panels); | ||||
| $key = $nav->selectFilter($key, head($panels)->getPanelKey()); | $key = $nav->selectFilter($key, head($panels)->getPanelKey()); | ||||
| $panel = $panels[$key]; | $panel = $panels[$key] | ||||
| $panel->setUser($this->getUser()); | ->setUser($this->getUser()) | ||||
| $panel->setViewer($viewer); | ->setViewer($viewer) | ||||
| ->setController($this) | |||||
| ->setNavigation($nav); | |||||
| $response = $panel->processRequest($request); | $response = $panel->processRequest($request); | ||||
| if ($response instanceof AphrontResponse) { | if (($response instanceof AphrontResponse) || | ||||
| ($response instanceof AphrontResponseProducerInterface)) { | |||||
| return $response; | return $response; | ||||
| } | } | ||||
| $crumbs = $this->buildApplicationCrumbs(); | $crumbs = $this->buildApplicationCrumbs(); | ||||
| if (!$this->isSelf()) { | |||||
| $crumbs->addTextCrumb( | |||||
| $this->getUser()->getUsername(), | |||||
| '/p/'.$this->getUser()->getUsername().'/'); | |||||
| } | |||||
| $crumbs->addTextCrumb($panel->getPanelName()); | $crumbs->addTextCrumb($panel->getPanelName()); | ||||
| $title = $panel->getPanelName(); | $title = $panel->getPanelName(); | ||||
| $view = id(new PHUITwoColumnView()) | $view = id(new PHUITwoColumnView()) | ||||
| ->setNavigation($nav) | ->setNavigation($nav) | ||||
| ->setMainColumn($response); | ->setMainColumn($response); | ||||
| return $this->newPage() | return $this->newPage() | ||||
| ->setTitle($title) | ->setTitle($title) | ||||
| ->setCrumbs($crumbs) | ->setCrumbs($crumbs) | ||||
| ->appendChild($view); | ->appendChild($view); | ||||
| } | } | ||||
| private function buildPanels() { | private function buildPanels() { | ||||
| $panels = id(new PhutilClassMapQuery()) | $panels = PhabricatorSettingsPanel::getAllPanels(); | ||||
| ->setAncestorClass('PhabricatorSettingsPanel') | |||||
| ->setExpandMethod('buildPanels') | |||||
| ->setUniqueMethod('getPanelKey') | |||||
| ->execute(); | |||||
| $result = array(); | $result = array(); | ||||
| foreach ($panels as $key => $panel) { | foreach ($panels as $key => $panel) { | ||||
| $panel->setUser($this->user); | $panel->setUser($this->user); | ||||
| if (!$panel->isEnabled()) { | if (!$panel->isEnabled()) { | ||||
| continue; | continue; | ||||
| } | } | ||||
| Show All 10 Lines | foreach ($panels as $key => $panel) { | ||||
| $key, | $key, | ||||
| get_class($panel), | get_class($panel), | ||||
| get_class($result[$key]))); | get_class($result[$key]))); | ||||
| } | } | ||||
| $result[$key] = $panel; | $result[$key] = $panel; | ||||
| } | } | ||||
| $result = msort($result, 'getPanelSortKey'); | |||||
| if (!$result) { | if (!$result) { | ||||
| throw new Exception(pht('No settings panels are available.')); | throw new Exception(pht('No settings panels are available.')); | ||||
| } | } | ||||
| return $result; | return $result; | ||||
| } | } | ||||
| private function renderSideNav(array $panels) { | private function renderSideNav(array $panels) { | ||||
| Show All 20 Lines | private function renderSideNav(array $panels) { | ||||
| return $nav; | return $nav; | ||||
| } | } | ||||
| public function buildApplicationMenu() { | public function buildApplicationMenu() { | ||||
| $panels = $this->buildPanels(); | $panels = $this->buildPanels(); | ||||
| return $this->renderSideNav($panels)->getMenu(); | return $this->renderSideNav($panels)->getMenu(); | ||||
| } | } | ||||
| protected function buildApplicationCrumbs() { | |||||
| $crumbs = parent::buildApplicationCrumbs(); | |||||
| $user = $this->getUser(); | |||||
| if (!$this->isSelf() && $user) { | |||||
| $username = $user->getUsername(); | |||||
| $crumbs->addTextCrumb($username, "/p/{$username}/"); | |||||
| } | |||||
| return $crumbs; | |||||
| } | |||||
| } | } | ||||