Path: blob/master/src/applications/diffusion/controller/DiffusionRepositoryManagePanelsController.php
12242 views
<?php12final class DiffusionRepositoryManagePanelsController3extends DiffusionRepositoryManageController {45private $navigation;67public function buildApplicationMenu() {8// TODO: This is messy for now; the mobile menu should be set automatically9// when the body content is a two-column view with navigation.10if ($this->navigation) {11return $this->navigation->getMenu();12}13return parent::buildApplicationMenu();14}151617public function handleRequest(AphrontRequest $request) {18$response = $this->loadDiffusionContext();19if ($response) {20return $response;21}2223$viewer = $this->getViewer();24$drequest = $this->getDiffusionRequest();25$repository = $drequest->getRepository();2627$panels = DiffusionRepositoryManagementPanel::getAllPanels();2829foreach ($panels as $key => $panel) {30$panel31->setViewer($viewer)32->setRepository($repository)33->setController($this);3435if (!$panel->shouldEnableForRepository($repository)) {36unset($panels[$key]);37continue;38}39}4041$selected = $request->getURIData('panel');42if ($selected === null || !strlen($selected)) {43$selected = head_key($panels);44}4546if (empty($panels[$selected])) {47return new Aphront404Response();48}4950$nav = $this->renderSideNav($repository, $panels, $selected);51$this->navigation = $nav;5253$panel = $panels[$selected];5455$crumbs = $this->buildApplicationCrumbs();56$crumbs->addTextCrumb($panel->getManagementPanelLabel());57$crumbs->setBorder(true);5859$content = $panel->buildManagementPanelContent();6061$title = array(62$panel->getManagementPanelLabel(),63$repository->getDisplayName(),64);6566$header = $this->buildHeaderView($repository->getDisplayName());6768$view = id(new PHUITwoColumnView())69->setHeader($header)70->setMainColumn($content);7172$curtain = $panel->buildManagementPanelCurtain();73if ($curtain) {74$view->setCurtain($curtain);75}7677return $this->newPage()78->setTitle($title)79->setCrumbs($crumbs)80->setNavigation($nav)81->appendChild($view);82}8384private function renderSideNav(85PhabricatorRepository $repository,86array $panels,87$selected) {8889$base_uri = $repository->getPathURI('manage/');90$base_uri = new PhutilURI($base_uri);9192$nav = id(new AphrontSideNavFilterView())93->setBaseURI($base_uri);9495$groups = DiffusionRepositoryManagementPanelGroup::getAllPanelGroups();96$panel_groups = mgroup($panels, 'getManagementPanelGroupKey');97$other_key = DiffusionRepositoryManagementOtherPanelGroup::PANELGROUPKEY;9899foreach ($groups as $group_key => $group) {100// If this is the "Other" group, include everything else that isn't in101// some actual group.102if ($group_key === $other_key) {103$group_panels = array_mergev($panel_groups);104$panel_groups = array();105} else {106$group_panels = idx($panel_groups, $group_key);107unset($panel_groups[$group_key]);108}109110if (!$group_panels) {111continue;112}113114$label = $group->getManagementPanelGroupLabel();115if ($label) {116$nav->addLabel($label);117}118119foreach ($group_panels as $panel) {120$key = $panel->getManagementPanelKey();121$label = $panel->getManagementPanelLabel();122$icon = $panel->getManagementPanelIcon();123$href = $panel->getPanelNavigationURI();124125$item = id(new PHUIListItemView())126->setKey($key)127->setName($label)128->setType(PHUIListItemView::TYPE_LINK)129->setHref($href)130->setIcon($icon);131132$nav->addMenuItem($item);133}134}135136$nav->selectFilter($selected);137138return $nav;139}140141public function buildHeaderView($title) {142$viewer = $this->getViewer();143144$drequest = $this->getDiffusionRequest();145$repository = $drequest->getRepository();146147$header = id(new PHUIHeaderView())148->setHeader($title)149->setProfileHeader(true)150->setHref($repository->getURI())151->setImage($repository->getProfileImageURI());152153if ($repository->isTracked()) {154$header->setStatus('fa-check', 'bluegrey', pht('Active'));155} else {156$header->setStatus('fa-ban', 'dark', pht('Inactive'));157}158159$doc_href = PhabricatorEnv::getDoclink(160'Diffusion User Guide: Managing Repositories');161162$header->addActionLink(163id(new PHUIButtonView())164->setTag('a')165->setText(pht('View Repository'))166->setHref($repository->getURI())167->setIcon('fa-code')168->setColor(PHUIButtonView::GREY));169170$header->addActionLink(171id(new PHUIButtonView())172->setTag('a')173->setIcon('fa-book')174->setHref($doc_href)175->setText(pht('Help'))176->setColor(PHUIButtonView::GREY));177178return $header;179}180181public function newTimeline(PhabricatorRepository $repository) {182$timeline = $this->buildTransactionTimeline(183$repository,184new PhabricatorRepositoryTransactionQuery());185$timeline->setShouldTerminate(true);186187return $timeline;188}189190191}192193194