private function buildPanels(PhabricatorUserPreferences $preferences) { $viewer = $this->getViewer(); $panels = PhabricatorSettingsPanel::getAllDisplayPanels(); $result = array(); foreach ($panels as $key => $panel) { $panel->setPreferences($preferences)->setViewer($viewer); if ($this->user) { $panel->setUser($this->user); } if (!$panel->isEnabled()) { continue; } if ($this->isTemplate()) { if (!$panel->isTemplatePanel()) { continue; } } else { if (!$this->isSelf() && !$panel->isManagementPanel()) { continue; } if ($this->isSelf() && !$panel->isUserPanel()) { continue; } } if (!empty($result[$key])) { throw new Exception(pht("Two settings panels share the same panel key ('%s'): %s, %s.", $key, get_class($panel), get_class($result[$key]))); } $result[$key] = $panel; } if (!$result) { throw new Exception(pht('No settings panels are available.')); } return $result; }
public static final function getAllPanelGroupsWithPanels() { $groups = self::getAllPanelGroups(); $panels = PhabricatorSettingsPanel::getAllPanels(); $panels = mgroup($panels, 'getPanelGroupKey'); foreach ($groups as $key => $group) { $group->panels = idx($panels, $key, array()); } return $groups; }
protected function newPages($object) { $viewer = $this->getViewer(); $user = $object->getUser(); $panels = PhabricatorSettingsPanel::getAllPanels(); foreach ($panels as $key => $panel) { if (!$panel instanceof PhabricatorEditEngineSettingsPanel) { unset($panels[$key]); continue; } $panel->setViewer($viewer); if ($user) { $panel->setUser($user); } } $pages = array(); $uris = array(); foreach ($panels as $key => $panel) { $uris[$key] = $panel->getPanelURI(); $page = $panel->newEditEnginePage(); if (!$page) { continue; } $pages[] = $page; } $more_pages = array(id(new PhabricatorEditPage())->setKey('extra')->setLabel(pht('Extra Settings'))->setIsDefault(true)); foreach ($more_pages as $page) { $pages[] = $page; } return $pages; }