mirror of
https://we.phorge.it/source/phorge.git
synced 2025-04-11 11:58:33 +02:00
Combine the "View", "Arrange", and "Manage" modes of Dashboards into a single mode
Summary: Depends on D20361. Ref T13272. Currently, Dashboards have three separate modes: view, arrange, manage. With the advent of Portals, I think we can simplify this, and make the dashboard view a combined view/edit/manage page. To view it in a cleaner standalone way, you can add it to a portal/home/project. I'll also improve the "Install" workflow. Test Plan: Viewed a dashboard page, clicked through all the actions, grepped for affected URIs. {F6327027} Reviewers: amckinley Reviewed By: amckinley Maniphest Tasks: T13272 Differential Revision: https://secure.phabricator.com/D20362
This commit is contained in:
parent
7e1743a959
commit
eea093bec8
13 changed files with 43 additions and 270 deletions
|
@ -2905,21 +2905,19 @@ phutil_register_library_map(array(
|
||||||
'PhabricatorDashboard' => 'applications/dashboard/storage/PhabricatorDashboard.php',
|
'PhabricatorDashboard' => 'applications/dashboard/storage/PhabricatorDashboard.php',
|
||||||
'PhabricatorDashboardAddPanelController' => 'applications/dashboard/controller/PhabricatorDashboardAddPanelController.php',
|
'PhabricatorDashboardAddPanelController' => 'applications/dashboard/controller/PhabricatorDashboardAddPanelController.php',
|
||||||
'PhabricatorDashboardApplication' => 'applications/dashboard/application/PhabricatorDashboardApplication.php',
|
'PhabricatorDashboardApplication' => 'applications/dashboard/application/PhabricatorDashboardApplication.php',
|
||||||
'PhabricatorDashboardArchiveController' => 'applications/dashboard/controller/PhabricatorDashboardArchiveController.php',
|
'PhabricatorDashboardArchiveController' => 'applications/dashboard/controller/dashboard/PhabricatorDashboardArchiveController.php',
|
||||||
'PhabricatorDashboardArrangeController' => 'applications/dashboard/controller/PhabricatorDashboardArrangeController.php',
|
|
||||||
'PhabricatorDashboardConsoleController' => 'applications/dashboard/controller/PhabricatorDashboardConsoleController.php',
|
'PhabricatorDashboardConsoleController' => 'applications/dashboard/controller/PhabricatorDashboardConsoleController.php',
|
||||||
'PhabricatorDashboardController' => 'applications/dashboard/controller/PhabricatorDashboardController.php',
|
'PhabricatorDashboardController' => 'applications/dashboard/controller/PhabricatorDashboardController.php',
|
||||||
'PhabricatorDashboardDAO' => 'applications/dashboard/storage/PhabricatorDashboardDAO.php',
|
'PhabricatorDashboardDAO' => 'applications/dashboard/storage/PhabricatorDashboardDAO.php',
|
||||||
'PhabricatorDashboardDashboardHasPanelEdgeType' => 'applications/dashboard/edge/PhabricatorDashboardDashboardHasPanelEdgeType.php',
|
'PhabricatorDashboardDashboardHasPanelEdgeType' => 'applications/dashboard/edge/PhabricatorDashboardDashboardHasPanelEdgeType.php',
|
||||||
'PhabricatorDashboardDashboardPHIDType' => 'applications/dashboard/phid/PhabricatorDashboardDashboardPHIDType.php',
|
'PhabricatorDashboardDashboardPHIDType' => 'applications/dashboard/phid/PhabricatorDashboardDashboardPHIDType.php',
|
||||||
'PhabricatorDashboardDatasource' => 'applications/dashboard/typeahead/PhabricatorDashboardDatasource.php',
|
'PhabricatorDashboardDatasource' => 'applications/dashboard/typeahead/PhabricatorDashboardDatasource.php',
|
||||||
'PhabricatorDashboardEditController' => 'applications/dashboard/controller/PhabricatorDashboardEditController.php',
|
'PhabricatorDashboardEditController' => 'applications/dashboard/controller/dashboard/PhabricatorDashboardEditController.php',
|
||||||
'PhabricatorDashboardIconSet' => 'applications/dashboard/icon/PhabricatorDashboardIconSet.php',
|
'PhabricatorDashboardIconSet' => 'applications/dashboard/icon/PhabricatorDashboardIconSet.php',
|
||||||
'PhabricatorDashboardInstall' => 'applications/dashboard/storage/PhabricatorDashboardInstall.php',
|
'PhabricatorDashboardInstall' => 'applications/dashboard/storage/PhabricatorDashboardInstall.php',
|
||||||
'PhabricatorDashboardInstallController' => 'applications/dashboard/controller/PhabricatorDashboardInstallController.php',
|
'PhabricatorDashboardInstallController' => 'applications/dashboard/controller/dashboard/PhabricatorDashboardInstallController.php',
|
||||||
'PhabricatorDashboardLayoutConfig' => 'applications/dashboard/layoutconfig/PhabricatorDashboardLayoutConfig.php',
|
'PhabricatorDashboardLayoutConfig' => 'applications/dashboard/layoutconfig/PhabricatorDashboardLayoutConfig.php',
|
||||||
'PhabricatorDashboardListController' => 'applications/dashboard/controller/PhabricatorDashboardListController.php',
|
'PhabricatorDashboardListController' => 'applications/dashboard/controller/PhabricatorDashboardListController.php',
|
||||||
'PhabricatorDashboardManageController' => 'applications/dashboard/controller/PhabricatorDashboardManageController.php',
|
|
||||||
'PhabricatorDashboardMovePanelController' => 'applications/dashboard/controller/PhabricatorDashboardMovePanelController.php',
|
'PhabricatorDashboardMovePanelController' => 'applications/dashboard/controller/PhabricatorDashboardMovePanelController.php',
|
||||||
'PhabricatorDashboardNgrams' => 'applications/dashboard/storage/PhabricatorDashboardNgrams.php',
|
'PhabricatorDashboardNgrams' => 'applications/dashboard/storage/PhabricatorDashboardNgrams.php',
|
||||||
'PhabricatorDashboardPanel' => 'applications/dashboard/storage/PhabricatorDashboardPanel.php',
|
'PhabricatorDashboardPanel' => 'applications/dashboard/storage/PhabricatorDashboardPanel.php',
|
||||||
|
@ -2981,7 +2979,7 @@ phutil_register_library_map(array(
|
||||||
'PhabricatorDashboardTransaction' => 'applications/dashboard/storage/PhabricatorDashboardTransaction.php',
|
'PhabricatorDashboardTransaction' => 'applications/dashboard/storage/PhabricatorDashboardTransaction.php',
|
||||||
'PhabricatorDashboardTransactionEditor' => 'applications/dashboard/editor/PhabricatorDashboardTransactionEditor.php',
|
'PhabricatorDashboardTransactionEditor' => 'applications/dashboard/editor/PhabricatorDashboardTransactionEditor.php',
|
||||||
'PhabricatorDashboardTransactionQuery' => 'applications/dashboard/query/PhabricatorDashboardTransactionQuery.php',
|
'PhabricatorDashboardTransactionQuery' => 'applications/dashboard/query/PhabricatorDashboardTransactionQuery.php',
|
||||||
'PhabricatorDashboardViewController' => 'applications/dashboard/controller/PhabricatorDashboardViewController.php',
|
'PhabricatorDashboardViewController' => 'applications/dashboard/controller/dashboard/PhabricatorDashboardViewController.php',
|
||||||
'PhabricatorDataCacheSpec' => 'applications/cache/spec/PhabricatorDataCacheSpec.php',
|
'PhabricatorDataCacheSpec' => 'applications/cache/spec/PhabricatorDataCacheSpec.php',
|
||||||
'PhabricatorDataNotAttachedException' => 'infrastructure/storage/lisk/PhabricatorDataNotAttachedException.php',
|
'PhabricatorDataNotAttachedException' => 'infrastructure/storage/lisk/PhabricatorDataNotAttachedException.php',
|
||||||
'PhabricatorDatabaseRef' => 'infrastructure/cluster/PhabricatorDatabaseRef.php',
|
'PhabricatorDatabaseRef' => 'infrastructure/cluster/PhabricatorDatabaseRef.php',
|
||||||
|
@ -8868,7 +8866,6 @@ phutil_register_library_map(array(
|
||||||
'PhabricatorDashboardAddPanelController' => 'PhabricatorDashboardController',
|
'PhabricatorDashboardAddPanelController' => 'PhabricatorDashboardController',
|
||||||
'PhabricatorDashboardApplication' => 'PhabricatorApplication',
|
'PhabricatorDashboardApplication' => 'PhabricatorApplication',
|
||||||
'PhabricatorDashboardArchiveController' => 'PhabricatorDashboardController',
|
'PhabricatorDashboardArchiveController' => 'PhabricatorDashboardController',
|
||||||
'PhabricatorDashboardArrangeController' => 'PhabricatorDashboardProfileController',
|
|
||||||
'PhabricatorDashboardConsoleController' => 'PhabricatorDashboardController',
|
'PhabricatorDashboardConsoleController' => 'PhabricatorDashboardController',
|
||||||
'PhabricatorDashboardController' => 'PhabricatorController',
|
'PhabricatorDashboardController' => 'PhabricatorController',
|
||||||
'PhabricatorDashboardDAO' => 'PhabricatorLiskDAO',
|
'PhabricatorDashboardDAO' => 'PhabricatorLiskDAO',
|
||||||
|
@ -8881,7 +8878,6 @@ phutil_register_library_map(array(
|
||||||
'PhabricatorDashboardInstallController' => 'PhabricatorDashboardController',
|
'PhabricatorDashboardInstallController' => 'PhabricatorDashboardController',
|
||||||
'PhabricatorDashboardLayoutConfig' => 'Phobject',
|
'PhabricatorDashboardLayoutConfig' => 'Phobject',
|
||||||
'PhabricatorDashboardListController' => 'PhabricatorDashboardController',
|
'PhabricatorDashboardListController' => 'PhabricatorDashboardController',
|
||||||
'PhabricatorDashboardManageController' => 'PhabricatorDashboardProfileController',
|
|
||||||
'PhabricatorDashboardMovePanelController' => 'PhabricatorDashboardController',
|
'PhabricatorDashboardMovePanelController' => 'PhabricatorDashboardController',
|
||||||
'PhabricatorDashboardNgrams' => 'PhabricatorSearchNgrams',
|
'PhabricatorDashboardNgrams' => 'PhabricatorSearchNgrams',
|
||||||
'PhabricatorDashboardPanel' => array(
|
'PhabricatorDashboardPanel' => array(
|
||||||
|
|
|
@ -41,8 +41,6 @@ final class PhabricatorDashboardApplication extends PhabricatorApplication {
|
||||||
=> 'PhabricatorDashboardListController',
|
=> 'PhabricatorDashboardListController',
|
||||||
'view/(?P<id>\d+)/' => 'PhabricatorDashboardViewController',
|
'view/(?P<id>\d+)/' => 'PhabricatorDashboardViewController',
|
||||||
'archive/(?P<id>\d+)/' => 'PhabricatorDashboardArchiveController',
|
'archive/(?P<id>\d+)/' => 'PhabricatorDashboardArchiveController',
|
||||||
'manage/(?P<id>\d+)/' => 'PhabricatorDashboardManageController',
|
|
||||||
'arrange/(?P<id>\d+)/' => 'PhabricatorDashboardArrangeController',
|
|
||||||
'create/' => 'PhabricatorDashboardEditController',
|
'create/' => 'PhabricatorDashboardEditController',
|
||||||
'edit/(?:(?P<id>\d+)/)?' => 'PhabricatorDashboardEditController',
|
'edit/(?:(?P<id>\d+)/)?' => 'PhabricatorDashboardEditController',
|
||||||
'install/(?:(?P<id>\d+)/)?' => 'PhabricatorDashboardInstallController',
|
'install/(?:(?P<id>\d+)/)?' => 'PhabricatorDashboardInstallController',
|
||||||
|
|
|
@ -1,79 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
final class PhabricatorDashboardArrangeController
|
|
||||||
extends PhabricatorDashboardProfileController {
|
|
||||||
|
|
||||||
public function shouldAllowPublic() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function handleRequest(AphrontRequest $request) {
|
|
||||||
$viewer = $request->getViewer();
|
|
||||||
$id = $request->getURIData('id');
|
|
||||||
|
|
||||||
$dashboard = id(new PhabricatorDashboardQuery())
|
|
||||||
->setViewer($viewer)
|
|
||||||
->withIDs(array($id))
|
|
||||||
->needPanels(true)
|
|
||||||
->executeOne();
|
|
||||||
if (!$dashboard) {
|
|
||||||
return new Aphront404Response();
|
|
||||||
}
|
|
||||||
$this->setDashboard($dashboard);
|
|
||||||
|
|
||||||
$can_edit = PhabricatorPolicyFilter::hasCapability(
|
|
||||||
$viewer,
|
|
||||||
$dashboard,
|
|
||||||
PhabricatorPolicyCapability::CAN_EDIT);
|
|
||||||
|
|
||||||
$title = $dashboard->getName();
|
|
||||||
$crumbs = $this->buildApplicationCrumbs();
|
|
||||||
$crumbs->addTextCrumb(pht('Arrange'));
|
|
||||||
$header = $this->buildHeaderView();
|
|
||||||
|
|
||||||
$info_view = null;
|
|
||||||
if (!$can_edit) {
|
|
||||||
$no_edit = pht(
|
|
||||||
'You do not have permission to edit this dashboard.');
|
|
||||||
|
|
||||||
$info_view = id(new PHUIInfoView())
|
|
||||||
->setSeverity(PHUIInfoView::SEVERITY_NOTICE)
|
|
||||||
->setErrors(array($no_edit));
|
|
||||||
}
|
|
||||||
|
|
||||||
$rendered_dashboard = id(new PhabricatorDashboardRenderingEngine())
|
|
||||||
->setViewer($viewer)
|
|
||||||
->setDashboard($dashboard)
|
|
||||||
->setArrangeMode($can_edit)
|
|
||||||
->renderDashboard();
|
|
||||||
|
|
||||||
$dashboard_box = id(new PHUIBoxView())
|
|
||||||
->addClass('dashboard-preview-box')
|
|
||||||
->appendChild($rendered_dashboard);
|
|
||||||
|
|
||||||
$install_button = id(new PHUIButtonView())
|
|
||||||
->setTag('a')
|
|
||||||
->setText('Install Dashboard')
|
|
||||||
->setIcon('fa-plus')
|
|
||||||
->setWorkflow(true)
|
|
||||||
->setHref($this->getApplicationURI("/install/{$id}/"));
|
|
||||||
$header->addActionLink($install_button);
|
|
||||||
|
|
||||||
$view = id(new PHUITwoColumnView())
|
|
||||||
->setHeader($header)
|
|
||||||
->setFooter(array(
|
|
||||||
$info_view,
|
|
||||||
$dashboard_box,
|
|
||||||
));
|
|
||||||
|
|
||||||
$navigation = $this->buildSideNavView('arrange');
|
|
||||||
|
|
||||||
return $this->newPage()
|
|
||||||
->setTitle($title)
|
|
||||||
->setCrumbs($crumbs)
|
|
||||||
->setNavigation($navigation)
|
|
||||||
->appendChild($view);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -14,10 +14,6 @@ abstract class PhabricatorDashboardProfileController
|
||||||
return $this->dashboard;
|
return $this->dashboard;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function buildApplicationMenu() {
|
|
||||||
return $this->buildSideNavView()->getMenu();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function buildHeaderView() {
|
protected function buildHeaderView() {
|
||||||
$viewer = $this->getViewer();
|
$viewer = $this->getViewer();
|
||||||
$dashboard = $this->getDashboard();
|
$dashboard = $this->getDashboard();
|
||||||
|
@ -49,50 +45,10 @@ abstract class PhabricatorDashboardProfileController
|
||||||
|
|
||||||
$dashboard = $this->getDashboard();
|
$dashboard = $this->getDashboard();
|
||||||
if ($dashboard) {
|
if ($dashboard) {
|
||||||
$id = $dashboard->getID();
|
$crumbs->addTextCrumb($dashboard->getName(), $dashboard->getURI());
|
||||||
$dashboard_uri = $this->getApplicationURI("/view/{$id}/");
|
|
||||||
$crumbs->addTextCrumb($dashboard->getName(), $dashboard_uri);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return $crumbs;
|
return $crumbs;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function buildSideNavView($filter = null) {
|
|
||||||
$viewer = $this->getViewer();
|
|
||||||
$dashboard = $this->getDashboard();
|
|
||||||
$id = $dashboard->getID();
|
|
||||||
|
|
||||||
$can_edit = PhabricatorPolicyFilter::hasCapability(
|
|
||||||
$viewer,
|
|
||||||
$dashboard,
|
|
||||||
PhabricatorPolicyCapability::CAN_EDIT);
|
|
||||||
|
|
||||||
$nav = id(new AphrontSideNavFilterView())
|
|
||||||
->setBaseURI(new PhutilURI($this->getApplicationURI()));
|
|
||||||
|
|
||||||
$nav->addLabel(pht('Dashboard'));
|
|
||||||
|
|
||||||
$nav->addFilter(
|
|
||||||
'view',
|
|
||||||
pht('View Dashboard'),
|
|
||||||
$this->getApplicationURI("/view/{$id}/"),
|
|
||||||
'fa-dashboard');
|
|
||||||
|
|
||||||
$nav->addFilter(
|
|
||||||
'arrange',
|
|
||||||
pht('Arrange Panels'),
|
|
||||||
$this->getApplicationURI("/arrange/{$id}/"),
|
|
||||||
'fa-columns');
|
|
||||||
|
|
||||||
$nav->addFilter(
|
|
||||||
'manage',
|
|
||||||
pht('Manage Dashboard'),
|
|
||||||
$this->getApplicationURI("/manage/{$id}/"),
|
|
||||||
'fa-gears');
|
|
||||||
|
|
||||||
$nav->selectFilter($filter);
|
|
||||||
|
|
||||||
return $nav;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -75,7 +75,7 @@ final class PhabricatorDashboardQueryPanelInstallController
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$errors) {
|
if (!$errors) {
|
||||||
$redirect_uri = "/dashboard/arrange/{$v_dashboard}/";
|
$redirect_uri = "/dashboard/view/{$v_dashboard}/";
|
||||||
|
|
||||||
$panel_type = id(new PhabricatorDashboardQueryPanelType())
|
$panel_type = id(new PhabricatorDashboardQueryPanelType())
|
||||||
->getPanelTypeKey();
|
->getPanelTypeKey();
|
||||||
|
|
|
@ -1,68 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
final class PhabricatorDashboardViewController
|
|
||||||
extends PhabricatorDashboardProfileController {
|
|
||||||
|
|
||||||
public function shouldAllowPublic() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function handleRequest(AphrontRequest $request) {
|
|
||||||
$viewer = $request->getViewer();
|
|
||||||
$id = $request->getURIData('id');
|
|
||||||
|
|
||||||
$dashboard = id(new PhabricatorDashboardQuery())
|
|
||||||
->setViewer($viewer)
|
|
||||||
->withIDs(array($id))
|
|
||||||
->needPanels(true)
|
|
||||||
->executeOne();
|
|
||||||
if (!$dashboard) {
|
|
||||||
return new Aphront404Response();
|
|
||||||
}
|
|
||||||
$this->setDashboard($dashboard);
|
|
||||||
|
|
||||||
$dashboard_uri = $this->getApplicationURI("view/{$id}/");
|
|
||||||
$title = $dashboard->getName();
|
|
||||||
$crumbs = $this->buildApplicationCrumbs();
|
|
||||||
$crumbs->addTextCrumb(pht('View'));
|
|
||||||
|
|
||||||
if ($dashboard->getPanelPHIDs()) {
|
|
||||||
$rendered_dashboard = id(new PhabricatorDashboardRenderingEngine())
|
|
||||||
->setViewer($viewer)
|
|
||||||
->setDashboard($dashboard)
|
|
||||||
->renderDashboard();
|
|
||||||
$content = id(new PHUIBoxView())
|
|
||||||
->addClass('dashboard-preview-box')
|
|
||||||
->appendChild($rendered_dashboard);
|
|
||||||
} else {
|
|
||||||
$content = id(new PHUIInfoView())
|
|
||||||
->setSeverity(PHUIInfoView::SEVERITY_NOTICE)
|
|
||||||
->appendChild(pht('This dashboard has no panels yet.'));
|
|
||||||
}
|
|
||||||
|
|
||||||
$navigation = $this->buildSideNavView('view');
|
|
||||||
$header = $this->buildHeaderView();
|
|
||||||
|
|
||||||
$install_button = id(new PHUIButtonView())
|
|
||||||
->setTag('a')
|
|
||||||
->setText('Install Dashboard')
|
|
||||||
->setIcon('fa-plus')
|
|
||||||
->setColor(PHUIButtonView::GREEN)
|
|
||||||
->setWorkflow(true)
|
|
||||||
->setHref($this->getApplicationURI("/install/{$id}/"));
|
|
||||||
$header->addActionLink($install_button);
|
|
||||||
|
|
||||||
$view = id(new PHUITwoColumnView())
|
|
||||||
->setHeader($header)
|
|
||||||
->setFooter(array(
|
|
||||||
$content,
|
|
||||||
));
|
|
||||||
|
|
||||||
return $this->newPage()
|
|
||||||
->setTitle($title)
|
|
||||||
->setCrumbs($crumbs)
|
|
||||||
->setNavigation($navigation)
|
|
||||||
->appendChild($view);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -20,7 +20,7 @@ final class PhabricatorDashboardArchiveController
|
||||||
return new Aphront404Response();
|
return new Aphront404Response();
|
||||||
}
|
}
|
||||||
|
|
||||||
$view_uri = $this->getApplicationURI('manage/'.$dashboard->getID().'/');
|
$view_uri = $dashboard->getURI();
|
||||||
|
|
||||||
if ($request->isFormPost()) {
|
if ($request->isFormPost()) {
|
||||||
if ($dashboard->isArchived()) {
|
if ($dashboard->isArchived()) {
|
|
@ -55,8 +55,7 @@ final class PhabricatorDashboardEditController
|
||||||
|
|
||||||
$crumbs->addTextCrumb(pht('Create Dashboard'));
|
$crumbs->addTextCrumb(pht('Create Dashboard'));
|
||||||
} else {
|
} else {
|
||||||
$id = $dashboard->getID();
|
$cancel_uri = $dashboard->getURI();
|
||||||
$cancel_uri = $this->getApplicationURI('manage/'.$id.'/');
|
|
||||||
|
|
||||||
$title = pht('Edit Dashboard: %s', $dashboard->getName());
|
$title = pht('Edit Dashboard: %s', $dashboard->getName());
|
||||||
$header_icon = 'fa-pencil';
|
$header_icon = 'fa-pencil';
|
||||||
|
@ -117,9 +116,7 @@ final class PhabricatorDashboardEditController
|
||||||
->setContentSourceFromRequest($request)
|
->setContentSourceFromRequest($request)
|
||||||
->applyTransactions($dashboard, $xactions);
|
->applyTransactions($dashboard, $xactions);
|
||||||
|
|
||||||
$uri = $this->getApplicationURI('arrange/'.$dashboard->getID().'/');
|
return id(new AphrontRedirectResponse())->setURI($dashboard->getURI());
|
||||||
|
|
||||||
return id(new AphrontRedirectResponse())->setURI($uri);
|
|
||||||
} catch (PhabricatorApplicationTransactionValidationException $ex) {
|
} catch (PhabricatorApplicationTransactionValidationException $ex) {
|
||||||
$validation_exception = $ex;
|
$validation_exception = $ex;
|
||||||
|
|
||||||
|
@ -346,10 +343,8 @@ final class PhabricatorDashboardEditController
|
||||||
->setContentSourceFromRequest($request)
|
->setContentSourceFromRequest($request)
|
||||||
->applyTransactions($dashboard, $xactions);
|
->applyTransactions($dashboard, $xactions);
|
||||||
|
|
||||||
$manage_uri = $this->getApplicationURI('arrange/'.$dashboard->getID().'/');
|
|
||||||
|
|
||||||
return id(new AphrontRedirectResponse())
|
return id(new AphrontRedirectResponse())
|
||||||
->setURI($manage_uri);
|
->setURI($dashboard->getURI());
|
||||||
}
|
}
|
||||||
|
|
||||||
private function newPanel(
|
private function newPanel(
|
|
@ -15,8 +15,7 @@ final class PhabricatorDashboardInstallController
|
||||||
return new Aphront404Response();
|
return new Aphront404Response();
|
||||||
}
|
}
|
||||||
|
|
||||||
$cancel_uri = $this->getApplicationURI(
|
$cancel_uri = $dashboard->getURI();
|
||||||
'view/'.$dashboard->getID().'/');
|
|
||||||
|
|
||||||
$home_app = new PhabricatorHomeApplication();
|
$home_app = new PhabricatorHomeApplication();
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
final class PhabricatorDashboardManageController
|
final class PhabricatorDashboardViewController
|
||||||
extends PhabricatorDashboardProfileController {
|
extends PhabricatorDashboardProfileController {
|
||||||
|
|
||||||
public function shouldAllowPublic() {
|
public function shouldAllowPublic() {
|
||||||
|
@ -11,10 +11,6 @@ final class PhabricatorDashboardManageController
|
||||||
$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))
|
||||||
|
@ -31,44 +27,38 @@ final class PhabricatorDashboardManageController
|
||||||
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())
|
$dashboard_box = id(new PHUIBoxView())
|
||||||
->setSeverity(PHUIInfoView::SEVERITY_NOTICE)
|
->addClass('dashboard-preview-box')
|
||||||
->setErrors(array($no_edit));
|
->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);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -91,6 +81,13 @@ final class PhabricatorDashboardManageController
|
||||||
->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())
|
||||||
|
@ -112,28 +109,5 @@ final class PhabricatorDashboardManageController
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
|
@ -123,15 +123,14 @@ final class PhabricatorDashboardSearchEngine
|
||||||
$handles = $viewer->loadHandles($phids);
|
$handles = $viewer->loadHandles($phids);
|
||||||
|
|
||||||
$list = id(new PHUIObjectItemListView())
|
$list = id(new PHUIObjectItemListView())
|
||||||
->setUser($viewer);
|
->setViewer($viewer);
|
||||||
|
|
||||||
foreach ($dashboards as $dashboard) {
|
foreach ($dashboards as $dashboard) {
|
||||||
$id = $dashboard->getID();
|
|
||||||
|
|
||||||
$item = id(new PHUIObjectItemView())
|
$item = id(new PHUIObjectItemView())
|
||||||
->setUser($viewer)
|
->setViewer($viewer)
|
||||||
|
->setObjectName($dashboard->getObjectName())
|
||||||
->setHeader($dashboard->getName())
|
->setHeader($dashboard->getName())
|
||||||
->setHref($this->getApplicationURI("view/{$id}/"))
|
->setHref($dashboard->getURI())
|
||||||
->setObject($dashboard);
|
->setObject($dashboard);
|
||||||
|
|
||||||
$bg_color = 'bg-dark';
|
$bg_color = 'bg-dark';
|
||||||
|
|
|
@ -118,10 +118,13 @@ final class PhabricatorDashboard extends PhabricatorDashboardDAO
|
||||||
return ($this->getStatus() == self::STATUS_ARCHIVED);
|
return ($this->getStatus() == self::STATUS_ARCHIVED);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getViewURI() {
|
public function getURI() {
|
||||||
return '/dashboard/view/'.$this->getID().'/';
|
return urisprintf('/dashboard/view/%d/', $this->getID());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getObjectName() {
|
||||||
|
return pht('Dashboard %d', $this->getID());
|
||||||
|
}
|
||||||
|
|
||||||
/* -( PhabricatorApplicationTransactionInterface )------------------------- */
|
/* -( PhabricatorApplicationTransactionInterface )------------------------- */
|
||||||
|
|
||||||
|
|
|
@ -153,7 +153,7 @@ final class PhabricatorDashboardProfileMenuItem
|
||||||
$icon = $dashboard->getIcon();
|
$icon = $dashboard->getIcon();
|
||||||
$name = $this->getDisplayName($config);
|
$name = $this->getDisplayName($config);
|
||||||
$is_disabled = false;
|
$is_disabled = false;
|
||||||
$action_uri = '/dashboard/arrange/'.$dashboard->getID().'/';
|
$action_uri = $dashboard->getURI();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
$icon = 'fa-ban';
|
$icon = 'fa-ban';
|
||||||
|
|
Loading…
Add table
Reference in a new issue