Differential D20362 Diff 48631 src/applications/dashboard/controller/dashboard/PhabricatorDashboardViewController.php
Changeset View
Changeset View
Standalone View
Standalone View
src/applications/dashboard/controller/dashboard/PhabricatorDashboardViewController.php
- This file was moved from src/applications/dashboard/controller/PhabricatorDashboardManageController.php.
<?php | <?php | ||||
final class PhabricatorDashboardManageController | final class PhabricatorDashboardViewController | ||||
extends PhabricatorDashboardProfileController { | extends PhabricatorDashboardProfileController { | ||||
public function shouldAllowPublic() { | public function shouldAllowPublic() { | ||||
return true; | return true; | ||||
} | } | ||||
public function handleRequest(AphrontRequest $request) { | public function handleRequest(AphrontRequest $request) { | ||||
$viewer = $request->getViewer(); | $viewer = $request->getViewer(); | ||||
$id = $request->getURIData('id'); | $id = $request->getURIData('id'); | ||||
// TODO: This UI should drop a lot of capabilities if the user can't | |||||
// edit the dashboard, but we should still let them in for "Install" and | |||||
// "View History". | |||||
$dashboard = id(new PhabricatorDashboardQuery()) | $dashboard = id(new PhabricatorDashboardQuery()) | ||||
->setViewer($viewer) | ->setViewer($viewer) | ||||
->withIDs(array($id)) | ->withIDs(array($id)) | ||||
->needPanels(true) | ->needPanels(true) | ||||
->executeOne(); | ->executeOne(); | ||||
if (!$dashboard) { | if (!$dashboard) { | ||||
return new Aphront404Response(); | return new Aphront404Response(); | ||||
} | } | ||||
$this->setDashboard($dashboard); | $this->setDashboard($dashboard); | ||||
$can_edit = PhabricatorPolicyFilter::hasCapability( | $can_edit = PhabricatorPolicyFilter::hasCapability( | ||||
$viewer, | $viewer, | ||||
$dashboard, | $dashboard, | ||||
PhabricatorPolicyCapability::CAN_EDIT); | PhabricatorPolicyCapability::CAN_EDIT); | ||||
$title = $dashboard->getName(); | $title = $dashboard->getName(); | ||||
$crumbs = $this->buildApplicationCrumbs(); | $crumbs = $this->buildApplicationCrumbs(); | ||||
$crumbs->addTextCrumb(pht('Manage')); | |||||
$header = $this->buildHeaderView(); | $header = $this->buildHeaderView(); | ||||
$curtain = $this->buildCurtainView($dashboard); | $curtain = $this->buildCurtainView($dashboard); | ||||
$properties = $this->buildPropertyView($dashboard); | |||||
$timeline = $this->buildTransactionTimeline( | $timeline = $this->buildTransactionTimeline( | ||||
$dashboard, | $dashboard, | ||||
new PhabricatorDashboardTransactionQuery()); | new PhabricatorDashboardTransactionQuery()); | ||||
$timeline->setShouldTerminate(true); | $timeline->setShouldTerminate(true); | ||||
$info_view = null; | $rendered_dashboard = id(new PhabricatorDashboardRenderingEngine()) | ||||
if (!$can_edit) { | ->setViewer($viewer) | ||||
$no_edit = pht( | ->setDashboard($dashboard) | ||||
'You do not have permission to edit this dashboard.'); | ->setArrangeMode($can_edit) | ||||
->renderDashboard(); | |||||
$info_view = id(new PHUIInfoView()) | |||||
->setSeverity(PHUIInfoView::SEVERITY_NOTICE) | $dashboard_box = id(new PHUIBoxView()) | ||||
->setErrors(array($no_edit)); | ->addClass('dashboard-preview-box') | ||||
} | ->appendChild($rendered_dashboard); | ||||
$view = id(new PHUITwoColumnView()) | $view = id(new PHUITwoColumnView()) | ||||
->setHeader($header) | ->setHeader($header) | ||||
->setCurtain($curtain) | ->setCurtain($curtain) | ||||
->setMainColumn(array( | ->setMainColumn( | ||||
$info_view, | array( | ||||
$properties, | $dashboard_box, | ||||
$timeline, | $timeline, | ||||
)); | )); | ||||
$navigation = $this->buildSideNavView('manage'); | |||||
return $this->newPage() | return $this->newPage() | ||||
->setTitle($title) | ->setTitle($title) | ||||
->setCrumbs($crumbs) | ->setCrumbs($crumbs) | ||||
->setNavigation($navigation) | |||||
->appendChild($view); | ->appendChild($view); | ||||
} | } | ||||
private function buildCurtainView(PhabricatorDashboard $dashboard) { | private function buildCurtainView(PhabricatorDashboard $dashboard) { | ||||
$viewer = $this->getViewer(); | $viewer = $this->getViewer(); | ||||
$id = $dashboard->getID(); | $id = $dashboard->getID(); | ||||
$curtain = $this->newCurtainView($dashboard); | $curtain = $this->newCurtainView($dashboard); | ||||
$can_edit = PhabricatorPolicyFilter::hasCapability( | $can_edit = PhabricatorPolicyFilter::hasCapability( | ||||
$viewer, | $viewer, | ||||
$dashboard, | $dashboard, | ||||
PhabricatorPolicyCapability::CAN_EDIT); | PhabricatorPolicyCapability::CAN_EDIT); | ||||
$curtain->addAction( | $curtain->addAction( | ||||
id(new PhabricatorActionView()) | id(new PhabricatorActionView()) | ||||
->setName(pht('Edit Dashboard')) | ->setName(pht('Edit Dashboard')) | ||||
->setIcon('fa-pencil') | ->setIcon('fa-pencil') | ||||
->setHref($this->getApplicationURI("edit/{$id}/")) | ->setHref($this->getApplicationURI("edit/{$id}/")) | ||||
->setDisabled(!$can_edit)); | ->setDisabled(!$can_edit)); | ||||
$curtain->addAction( | |||||
id(new PhabricatorActionView()) | |||||
->setName(pht('Install Dashboard')) | |||||
->setIcon('fa-wrench') | |||||
->setHref($this->getApplicationURI("/install/{$id}/")) | |||||
->setWorkflow(true)); | |||||
if ($dashboard->isArchived()) { | if ($dashboard->isArchived()) { | ||||
$curtain->addAction( | $curtain->addAction( | ||||
id(new PhabricatorActionView()) | id(new PhabricatorActionView()) | ||||
->setName(pht('Activate Dashboard')) | ->setName(pht('Activate Dashboard')) | ||||
->setIcon('fa-check') | ->setIcon('fa-check') | ||||
->setHref($this->getApplicationURI("archive/{$id}/")) | ->setHref($this->getApplicationURI("archive/{$id}/")) | ||||
->setDisabled(!$can_edit) | ->setDisabled(!$can_edit) | ||||
->setWorkflow($can_edit)); | ->setWorkflow($can_edit)); | ||||
} else { | } else { | ||||
$curtain->addAction( | $curtain->addAction( | ||||
id(new PhabricatorActionView()) | id(new PhabricatorActionView()) | ||||
->setName(pht('Archive Dashboard')) | ->setName(pht('Archive Dashboard')) | ||||
->setIcon('fa-ban') | ->setIcon('fa-ban') | ||||
->setHref($this->getApplicationURI("archive/{$id}/")) | ->setHref($this->getApplicationURI("archive/{$id}/")) | ||||
->setDisabled(!$can_edit) | ->setDisabled(!$can_edit) | ||||
->setWorkflow($can_edit)); | ->setWorkflow($can_edit)); | ||||
} | } | ||||
return $curtain; | return $curtain; | ||||
} | } | ||||
private function buildPropertyView(PhabricatorDashboard $dashboard) { | |||||
$viewer = $this->getViewer(); | |||||
$properties = id(new PHUIPropertyListView()) | |||||
->setUser($viewer); | |||||
$descriptions = PhabricatorPolicyQuery::renderPolicyDescriptions( | |||||
$viewer, | |||||
$dashboard); | |||||
$properties->addProperty( | |||||
pht('Editable By'), | |||||
$descriptions[PhabricatorPolicyCapability::CAN_EDIT]); | |||||
$properties->addProperty( | |||||
pht('Panels'), | |||||
$viewer->renderHandleList($dashboard->getPanelPHIDs())); | |||||
return id(new PHUIObjectBoxView()) | |||||
->setHeaderText(pht('Details')) | |||||
->setBackground(PHUIObjectBoxView::BLUE_PROPERTY) | |||||
->addPropertyList($properties); | |||||
} | |||||
} | } |