2016-05-09 23:24:21 +02:00
|
|
|
<?php
|
|
|
|
|
|
|
|
final class DiffusionRepositoryManagePanelsController
|
|
|
|
extends DiffusionRepositoryManageController {
|
|
|
|
|
|
|
|
private $navigation;
|
|
|
|
|
|
|
|
public function buildApplicationMenu() {
|
|
|
|
// TODO: This is messy for now; the mobile menu should be set automatically
|
|
|
|
// when the body content is a two-column view with navigation.
|
|
|
|
if ($this->navigation) {
|
|
|
|
return $this->navigation->getMenu();
|
|
|
|
}
|
|
|
|
return parent::buildApplicationMenu();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public function handleRequest(AphrontRequest $request) {
|
|
|
|
$response = $this->loadDiffusionContext();
|
|
|
|
if ($response) {
|
|
|
|
return $response;
|
|
|
|
}
|
|
|
|
|
|
|
|
$viewer = $this->getViewer();
|
|
|
|
$drequest = $this->getDiffusionRequest();
|
|
|
|
$repository = $drequest->getRepository();
|
|
|
|
|
|
|
|
$panels = DiffusionRepositoryManagementPanel::getAllPanels();
|
|
|
|
|
2016-05-10 01:40:09 +02:00
|
|
|
foreach ($panels as $key => $panel) {
|
2016-05-09 23:24:21 +02:00
|
|
|
$panel
|
|
|
|
->setViewer($viewer)
|
|
|
|
->setRepository($repository)
|
|
|
|
->setController($this);
|
2016-05-10 01:40:09 +02:00
|
|
|
|
|
|
|
if (!$panel->shouldEnableForRepository($repository)) {
|
|
|
|
unset($panels[$key]);
|
|
|
|
continue;
|
|
|
|
}
|
2016-05-09 23:24:21 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
$selected = $request->getURIData('panel');
|
|
|
|
if (!strlen($selected)) {
|
|
|
|
$selected = head_key($panels);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (empty($panels[$selected])) {
|
|
|
|
return new Aphront404Response();
|
|
|
|
}
|
|
|
|
|
|
|
|
$nav = $this->renderSideNav($repository, $panels, $selected);
|
|
|
|
$this->navigation = $nav;
|
|
|
|
|
|
|
|
$panel = $panels[$selected];
|
|
|
|
|
|
|
|
$content = $panel->buildManagementPanelContent();
|
|
|
|
|
|
|
|
$title = array(
|
|
|
|
$panel->getManagementPanelLabel(),
|
|
|
|
$repository->getDisplayName(),
|
|
|
|
);
|
|
|
|
|
|
|
|
$crumbs = $this->buildApplicationCrumbs();
|
|
|
|
$crumbs->addTextCrumb($panel->getManagementPanelLabel());
|
2016-05-11 17:17:42 +02:00
|
|
|
$crumbs->setBorder(true);
|
2016-05-09 23:24:21 +02:00
|
|
|
|
|
|
|
$header_text = pht(
|
|
|
|
'%s: %s',
|
|
|
|
$repository->getDisplayName(),
|
|
|
|
$panel->getManagementPanelLabel());
|
|
|
|
|
|
|
|
$header = id(new PHUIHeaderView())
|
|
|
|
->setHeader($header_text)
|
|
|
|
->setHeaderIcon('fa-pencil');
|
|
|
|
if ($repository->isTracked()) {
|
|
|
|
$header->setStatus('fa-check', 'bluegrey', pht('Active'));
|
|
|
|
} else {
|
|
|
|
$header->setStatus('fa-ban', 'dark', pht('Inactive'));
|
|
|
|
}
|
|
|
|
|
2016-05-11 17:17:42 +02:00
|
|
|
$header->addActionLink(
|
|
|
|
id(new PHUIButtonView())
|
|
|
|
->setTag('a')
|
|
|
|
->setText(pht('View Repository'))
|
|
|
|
->setHref($repository->getURI())
|
|
|
|
->setIcon('fa-code'));
|
|
|
|
|
2016-05-09 23:24:21 +02:00
|
|
|
$view = id(new PHUITwoColumnView())
|
|
|
|
->setHeader($header)
|
|
|
|
->setNavigation($nav)
|
|
|
|
->setMainColumn($content);
|
|
|
|
|
|
|
|
$curtain = $panel->buildManagementPanelCurtain();
|
|
|
|
if ($curtain) {
|
|
|
|
$view->setCurtain($curtain);
|
|
|
|
}
|
|
|
|
|
|
|
|
return $this->newPage()
|
|
|
|
->setTitle($title)
|
|
|
|
->setCrumbs($crumbs)
|
|
|
|
->appendChild($view);
|
|
|
|
}
|
|
|
|
|
|
|
|
private function renderSideNav(
|
|
|
|
PhabricatorRepository $repository,
|
|
|
|
array $panels,
|
|
|
|
$selected) {
|
|
|
|
|
|
|
|
$base_uri = $repository->getPathURI('manage/');
|
|
|
|
$base_uri = new PhutilURI($base_uri);
|
|
|
|
|
|
|
|
$nav = id(new AphrontSideNavFilterView())
|
|
|
|
->setBaseURI($base_uri);
|
|
|
|
|
|
|
|
foreach ($panels as $panel) {
|
|
|
|
$key = $panel->getManagementPanelKey();
|
|
|
|
$label = $panel->getManagementPanelLabel();
|
|
|
|
$icon = $panel->getManagementPanelIcon();
|
|
|
|
$href = $panel->getPanelNavigationURI();
|
|
|
|
|
|
|
|
$item = id(new PHUIListItemView())
|
|
|
|
->setKey($key)
|
|
|
|
->setName($label)
|
|
|
|
->setType(PHUIListItemView::TYPE_LINK)
|
|
|
|
->setHref($href)
|
|
|
|
->setIcon($icon);
|
|
|
|
|
|
|
|
$nav->addMenuItem($item);
|
|
|
|
}
|
|
|
|
|
|
|
|
$nav->selectFilter($selected);
|
|
|
|
|
|
|
|
return $nav;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function newTimeline(PhabricatorRepository $repository) {
|
|
|
|
$timeline = $this->buildTransactionTimeline(
|
|
|
|
$repository,
|
|
|
|
new PhabricatorRepositoryTransactionQuery());
|
|
|
|
$timeline->setShouldTerminate(true);
|
|
|
|
|
|
|
|
return $timeline;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|