diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -2905,21 +2905,19 @@ 'PhabricatorDashboard' => 'applications/dashboard/storage/PhabricatorDashboard.php', 'PhabricatorDashboardAddPanelController' => 'applications/dashboard/controller/PhabricatorDashboardAddPanelController.php', 'PhabricatorDashboardApplication' => 'applications/dashboard/application/PhabricatorDashboardApplication.php', - 'PhabricatorDashboardArchiveController' => 'applications/dashboard/controller/PhabricatorDashboardArchiveController.php', - 'PhabricatorDashboardArrangeController' => 'applications/dashboard/controller/PhabricatorDashboardArrangeController.php', + 'PhabricatorDashboardArchiveController' => 'applications/dashboard/controller/dashboard/PhabricatorDashboardArchiveController.php', 'PhabricatorDashboardConsoleController' => 'applications/dashboard/controller/PhabricatorDashboardConsoleController.php', 'PhabricatorDashboardController' => 'applications/dashboard/controller/PhabricatorDashboardController.php', 'PhabricatorDashboardDAO' => 'applications/dashboard/storage/PhabricatorDashboardDAO.php', 'PhabricatorDashboardDashboardHasPanelEdgeType' => 'applications/dashboard/edge/PhabricatorDashboardDashboardHasPanelEdgeType.php', 'PhabricatorDashboardDashboardPHIDType' => 'applications/dashboard/phid/PhabricatorDashboardDashboardPHIDType.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', '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', 'PhabricatorDashboardListController' => 'applications/dashboard/controller/PhabricatorDashboardListController.php', - 'PhabricatorDashboardManageController' => 'applications/dashboard/controller/PhabricatorDashboardManageController.php', 'PhabricatorDashboardMovePanelController' => 'applications/dashboard/controller/PhabricatorDashboardMovePanelController.php', 'PhabricatorDashboardNgrams' => 'applications/dashboard/storage/PhabricatorDashboardNgrams.php', 'PhabricatorDashboardPanel' => 'applications/dashboard/storage/PhabricatorDashboardPanel.php', @@ -2981,7 +2979,7 @@ 'PhabricatorDashboardTransaction' => 'applications/dashboard/storage/PhabricatorDashboardTransaction.php', 'PhabricatorDashboardTransactionEditor' => 'applications/dashboard/editor/PhabricatorDashboardTransactionEditor.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', 'PhabricatorDataNotAttachedException' => 'infrastructure/storage/lisk/PhabricatorDataNotAttachedException.php', 'PhabricatorDatabaseRef' => 'infrastructure/cluster/PhabricatorDatabaseRef.php', @@ -8868,7 +8866,6 @@ 'PhabricatorDashboardAddPanelController' => 'PhabricatorDashboardController', 'PhabricatorDashboardApplication' => 'PhabricatorApplication', 'PhabricatorDashboardArchiveController' => 'PhabricatorDashboardController', - 'PhabricatorDashboardArrangeController' => 'PhabricatorDashboardProfileController', 'PhabricatorDashboardConsoleController' => 'PhabricatorDashboardController', 'PhabricatorDashboardController' => 'PhabricatorController', 'PhabricatorDashboardDAO' => 'PhabricatorLiskDAO', @@ -8881,7 +8878,6 @@ 'PhabricatorDashboardInstallController' => 'PhabricatorDashboardController', 'PhabricatorDashboardLayoutConfig' => 'Phobject', 'PhabricatorDashboardListController' => 'PhabricatorDashboardController', - 'PhabricatorDashboardManageController' => 'PhabricatorDashboardProfileController', 'PhabricatorDashboardMovePanelController' => 'PhabricatorDashboardController', 'PhabricatorDashboardNgrams' => 'PhabricatorSearchNgrams', 'PhabricatorDashboardPanel' => array( diff --git a/src/applications/dashboard/application/PhabricatorDashboardApplication.php b/src/applications/dashboard/application/PhabricatorDashboardApplication.php --- a/src/applications/dashboard/application/PhabricatorDashboardApplication.php +++ b/src/applications/dashboard/application/PhabricatorDashboardApplication.php @@ -41,8 +41,6 @@ => 'PhabricatorDashboardListController', 'view/(?P\d+)/' => 'PhabricatorDashboardViewController', 'archive/(?P\d+)/' => 'PhabricatorDashboardArchiveController', - 'manage/(?P\d+)/' => 'PhabricatorDashboardManageController', - 'arrange/(?P\d+)/' => 'PhabricatorDashboardArrangeController', 'create/' => 'PhabricatorDashboardEditController', 'edit/(?:(?P\d+)/)?' => 'PhabricatorDashboardEditController', 'install/(?:(?P\d+)/)?' => 'PhabricatorDashboardInstallController', diff --git a/src/applications/dashboard/controller/PhabricatorDashboardArrangeController.php b/src/applications/dashboard/controller/PhabricatorDashboardArrangeController.php deleted file mode 100644 --- a/src/applications/dashboard/controller/PhabricatorDashboardArrangeController.php +++ /dev/null @@ -1,79 +0,0 @@ -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); - - } - -} diff --git a/src/applications/dashboard/controller/PhabricatorDashboardProfileController.php b/src/applications/dashboard/controller/PhabricatorDashboardProfileController.php --- a/src/applications/dashboard/controller/PhabricatorDashboardProfileController.php +++ b/src/applications/dashboard/controller/PhabricatorDashboardProfileController.php @@ -14,10 +14,6 @@ return $this->dashboard; } - public function buildApplicationMenu() { - return $this->buildSideNavView()->getMenu(); - } - protected function buildHeaderView() { $viewer = $this->getViewer(); $dashboard = $this->getDashboard(); @@ -49,50 +45,10 @@ $dashboard = $this->getDashboard(); if ($dashboard) { - $id = $dashboard->getID(); - $dashboard_uri = $this->getApplicationURI("/view/{$id}/"); - $crumbs->addTextCrumb($dashboard->getName(), $dashboard_uri); + $crumbs->addTextCrumb($dashboard->getName(), $dashboard->getURI()); } 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; - } - } diff --git a/src/applications/dashboard/controller/PhabricatorDashboardQueryPanelInstallController.php b/src/applications/dashboard/controller/PhabricatorDashboardQueryPanelInstallController.php --- a/src/applications/dashboard/controller/PhabricatorDashboardQueryPanelInstallController.php +++ b/src/applications/dashboard/controller/PhabricatorDashboardQueryPanelInstallController.php @@ -75,7 +75,7 @@ } if (!$errors) { - $redirect_uri = "/dashboard/arrange/{$v_dashboard}/"; + $redirect_uri = "/dashboard/view/{$v_dashboard}/"; $panel_type = id(new PhabricatorDashboardQueryPanelType()) ->getPanelTypeKey(); diff --git a/src/applications/dashboard/controller/PhabricatorDashboardViewController.php b/src/applications/dashboard/controller/PhabricatorDashboardViewController.php deleted file mode 100644 --- a/src/applications/dashboard/controller/PhabricatorDashboardViewController.php +++ /dev/null @@ -1,68 +0,0 @@ -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); - } - -} diff --git a/src/applications/dashboard/controller/PhabricatorDashboardArchiveController.php b/src/applications/dashboard/controller/dashboard/PhabricatorDashboardArchiveController.php rename from src/applications/dashboard/controller/PhabricatorDashboardArchiveController.php rename to src/applications/dashboard/controller/dashboard/PhabricatorDashboardArchiveController.php --- a/src/applications/dashboard/controller/PhabricatorDashboardArchiveController.php +++ b/src/applications/dashboard/controller/dashboard/PhabricatorDashboardArchiveController.php @@ -20,7 +20,7 @@ return new Aphront404Response(); } - $view_uri = $this->getApplicationURI('manage/'.$dashboard->getID().'/'); + $view_uri = $dashboard->getURI(); if ($request->isFormPost()) { if ($dashboard->isArchived()) { diff --git a/src/applications/dashboard/controller/PhabricatorDashboardEditController.php b/src/applications/dashboard/controller/dashboard/PhabricatorDashboardEditController.php rename from src/applications/dashboard/controller/PhabricatorDashboardEditController.php rename to src/applications/dashboard/controller/dashboard/PhabricatorDashboardEditController.php --- a/src/applications/dashboard/controller/PhabricatorDashboardEditController.php +++ b/src/applications/dashboard/controller/dashboard/PhabricatorDashboardEditController.php @@ -55,8 +55,7 @@ $crumbs->addTextCrumb(pht('Create Dashboard')); } else { - $id = $dashboard->getID(); - $cancel_uri = $this->getApplicationURI('manage/'.$id.'/'); + $cancel_uri = $dashboard->getURI(); $title = pht('Edit Dashboard: %s', $dashboard->getName()); $header_icon = 'fa-pencil'; @@ -117,9 +116,7 @@ ->setContentSourceFromRequest($request) ->applyTransactions($dashboard, $xactions); - $uri = $this->getApplicationURI('arrange/'.$dashboard->getID().'/'); - - return id(new AphrontRedirectResponse())->setURI($uri); + return id(new AphrontRedirectResponse())->setURI($dashboard->getURI()); } catch (PhabricatorApplicationTransactionValidationException $ex) { $validation_exception = $ex; @@ -346,10 +343,8 @@ ->setContentSourceFromRequest($request) ->applyTransactions($dashboard, $xactions); - $manage_uri = $this->getApplicationURI('arrange/'.$dashboard->getID().'/'); - return id(new AphrontRedirectResponse()) - ->setURI($manage_uri); + ->setURI($dashboard->getURI()); } private function newPanel( diff --git a/src/applications/dashboard/controller/PhabricatorDashboardInstallController.php b/src/applications/dashboard/controller/dashboard/PhabricatorDashboardInstallController.php rename from src/applications/dashboard/controller/PhabricatorDashboardInstallController.php rename to src/applications/dashboard/controller/dashboard/PhabricatorDashboardInstallController.php --- a/src/applications/dashboard/controller/PhabricatorDashboardInstallController.php +++ b/src/applications/dashboard/controller/dashboard/PhabricatorDashboardInstallController.php @@ -15,8 +15,7 @@ return new Aphront404Response(); } - $cancel_uri = $this->getApplicationURI( - 'view/'.$dashboard->getID().'/'); + $cancel_uri = $dashboard->getURI(); $home_app = new PhabricatorHomeApplication(); diff --git a/src/applications/dashboard/controller/PhabricatorDashboardManageController.php b/src/applications/dashboard/controller/dashboard/PhabricatorDashboardViewController.php rename from src/applications/dashboard/controller/PhabricatorDashboardManageController.php rename to src/applications/dashboard/controller/dashboard/PhabricatorDashboardViewController.php --- a/src/applications/dashboard/controller/PhabricatorDashboardManageController.php +++ b/src/applications/dashboard/controller/dashboard/PhabricatorDashboardViewController.php @@ -1,6 +1,6 @@ getViewer(); $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()) ->setViewer($viewer) ->withIDs(array($id)) @@ -31,44 +27,38 @@ PhabricatorPolicyCapability::CAN_EDIT); $title = $dashboard->getName(); - $crumbs = $this->buildApplicationCrumbs(); - $crumbs->addTextCrumb(pht('Manage')); - $header = $this->buildHeaderView(); + $curtain = $this->buildCurtainView($dashboard); - $properties = $this->buildPropertyView($dashboard); $timeline = $this->buildTransactionTimeline( $dashboard, new PhabricatorDashboardTransactionQuery()); $timeline->setShouldTerminate(true); - $info_view = null; - if (!$can_edit) { - $no_edit = pht( - 'You do not have permission to edit this dashboard.'); + $rendered_dashboard = id(new PhabricatorDashboardRenderingEngine()) + ->setViewer($viewer) + ->setDashboard($dashboard) + ->setArrangeMode($can_edit) + ->renderDashboard(); - $info_view = id(new PHUIInfoView()) - ->setSeverity(PHUIInfoView::SEVERITY_NOTICE) - ->setErrors(array($no_edit)); - } + $dashboard_box = id(new PHUIBoxView()) + ->addClass('dashboard-preview-box') + ->appendChild($rendered_dashboard); $view = id(new PHUITwoColumnView()) ->setHeader($header) ->setCurtain($curtain) - ->setMainColumn(array( - $info_view, - $properties, - $timeline, - )); - - $navigation = $this->buildSideNavView('manage'); + ->setMainColumn( + array( + $dashboard_box, + $timeline, + )); return $this->newPage() ->setTitle($title) ->setCrumbs($crumbs) - ->setNavigation($navigation) ->appendChild($view); } @@ -91,6 +81,13 @@ ->setHref($this->getApplicationURI("edit/{$id}/")) ->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()) { $curtain->addAction( id(new PhabricatorActionView()) @@ -112,28 +109,5 @@ 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); - } } diff --git a/src/applications/dashboard/query/PhabricatorDashboardSearchEngine.php b/src/applications/dashboard/query/PhabricatorDashboardSearchEngine.php --- a/src/applications/dashboard/query/PhabricatorDashboardSearchEngine.php +++ b/src/applications/dashboard/query/PhabricatorDashboardSearchEngine.php @@ -123,15 +123,14 @@ $handles = $viewer->loadHandles($phids); $list = id(new PHUIObjectItemListView()) - ->setUser($viewer); + ->setViewer($viewer); foreach ($dashboards as $dashboard) { - $id = $dashboard->getID(); - $item = id(new PHUIObjectItemView()) - ->setUser($viewer) + ->setViewer($viewer) + ->setObjectName($dashboard->getObjectName()) ->setHeader($dashboard->getName()) - ->setHref($this->getApplicationURI("view/{$id}/")) + ->setHref($dashboard->getURI()) ->setObject($dashboard); $bg_color = 'bg-dark'; diff --git a/src/applications/dashboard/storage/PhabricatorDashboard.php b/src/applications/dashboard/storage/PhabricatorDashboard.php --- a/src/applications/dashboard/storage/PhabricatorDashboard.php +++ b/src/applications/dashboard/storage/PhabricatorDashboard.php @@ -118,10 +118,13 @@ return ($this->getStatus() == self::STATUS_ARCHIVED); } - public function getViewURI() { - return '/dashboard/view/'.$this->getID().'/'; + public function getURI() { + return urisprintf('/dashboard/view/%d/', $this->getID()); } + public function getObjectName() { + return pht('Dashboard %d', $this->getID()); + } /* -( PhabricatorApplicationTransactionInterface )------------------------- */ diff --git a/src/applications/search/menuitem/PhabricatorDashboardProfileMenuItem.php b/src/applications/search/menuitem/PhabricatorDashboardProfileMenuItem.php --- a/src/applications/search/menuitem/PhabricatorDashboardProfileMenuItem.php +++ b/src/applications/search/menuitem/PhabricatorDashboardProfileMenuItem.php @@ -153,7 +153,7 @@ $icon = $dashboard->getIcon(); $name = $this->getDisplayName($config); $is_disabled = false; - $action_uri = '/dashboard/arrange/'.$dashboard->getID().'/'; + $action_uri = $dashboard->getURI(); } } else { $icon = 'fa-ban';