Page MenuHomePhabricator

D17492.id42065.diff
No OneTemporary

D17492.id42065.diff

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
@@ -2495,6 +2495,7 @@
'PhabricatorDashboardEditController' => 'applications/dashboard/controller/PhabricatorDashboardEditController.php',
'PhabricatorDashboardIconSet' => 'applications/dashboard/icon/PhabricatorDashboardIconSet.php',
'PhabricatorDashboardInstall' => 'applications/dashboard/storage/PhabricatorDashboardInstall.php',
+ 'PhabricatorDashboardInstallController' => 'applications/dashboard/controller/PhabricatorDashboardInstallController.php',
'PhabricatorDashboardLayoutConfig' => 'applications/dashboard/layoutconfig/PhabricatorDashboardLayoutConfig.php',
'PhabricatorDashboardListController' => 'applications/dashboard/controller/PhabricatorDashboardListController.php',
'PhabricatorDashboardManageController' => 'applications/dashboard/controller/PhabricatorDashboardManageController.php',
@@ -7560,6 +7561,7 @@
'PhabricatorDashboardEditController' => 'PhabricatorDashboardController',
'PhabricatorDashboardIconSet' => 'PhabricatorIconSet',
'PhabricatorDashboardInstall' => 'PhabricatorDashboardDAO',
+ 'PhabricatorDashboardInstallController' => 'PhabricatorDashboardController',
'PhabricatorDashboardLayoutConfig' => 'Phobject',
'PhabricatorDashboardListController' => 'PhabricatorDashboardController',
'PhabricatorDashboardManageController' => 'PhabricatorDashboardProfileController',
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
@@ -30,6 +30,7 @@
'arrange/(?P<id>\d+)/' => 'PhabricatorDashboardArrangeController',
'create/' => 'PhabricatorDashboardEditController',
'edit/(?:(?P<id>\d+)/)?' => 'PhabricatorDashboardEditController',
+ 'install/(?:(?P<id>\d+)/)?' => 'PhabricatorDashboardInstallController',
'addpanel/(?P<id>\d+)/' => 'PhabricatorDashboardAddPanelController',
'movepanel/(?P<id>\d+)/' => 'PhabricatorDashboardMovePanelController',
'removepanel/(?P<id>\d+)/'
diff --git a/src/applications/dashboard/controller/PhabricatorDashboardInstallController.php b/src/applications/dashboard/controller/PhabricatorDashboardInstallController.php
new file mode 100644
--- /dev/null
+++ b/src/applications/dashboard/controller/PhabricatorDashboardInstallController.php
@@ -0,0 +1,71 @@
+<?php
+
+final class PhabricatorDashboardInstallController
+ extends PhabricatorDashboardController {
+
+ public function handleRequest(AphrontRequest $request) {
+ $viewer = $request->getViewer();
+ $id = $request->getURIData('id');
+
+ $dashboard = id(new PhabricatorDashboardQuery())
+ ->setViewer($viewer)
+ ->withIDs(array($id))
+ ->needPanels(true)
+ ->requireCapabilities(
+ array(
+ PhabricatorPolicyCapability::CAN_VIEW,
+ PhabricatorPolicyCapability::CAN_EDIT,
+ ))
+ ->executeOne();
+ if (!$dashboard) {
+ return new Aphront404Response();
+ }
+
+ $cancel_uri = $this->getApplicationURI(
+ 'view/'.$dashboard->getID().'/');
+
+ $view_uri = $this->getApplicationURI(
+ 'view/'.$dashboard->getID().'/?installed');
+
+ $errors = array();
+ if ($request->isFormPost()) {
+ $menuitem = new PhabricatorDashboardProfileMenuItem();
+ $dashboard_phid = $dashboard->getPHID();
+ $home = new PhabricatorHomeApplication();
+
+ $install = PhabricatorProfileMenuItemConfiguration::initializeNewItem(
+ $home,
+ $menuitem,
+ $viewer->getPHID());
+
+ $install->setMenuItemProperty('dashboardPHID', $dashboard_phid);
+ $install->setMenuItemProperty('name', '');
+
+ $xactions = array();
+
+ $editor = id(new PhabricatorProfileMenuEditor())
+ ->setActor($viewer)
+ ->setContinueOnNoEffect(true)
+ ->setContinueOnMissingFields(true)
+ ->setContentSourceFromRequest($request);
+
+ $editor->applyTransactions($install, $xactions);
+
+ return id(new AphrontRedirectResponse())->setURI($view_uri);
+ }
+
+ $form = id(new AphrontFormView())
+ ->setUser($viewer)
+ ->appendRemarkupInstructions(
+ pht('Clicking **install dashboard** will add this dashboard to your '.
+ 'personal home menu list, making it your default.'));
+
+ return $this->newDialog()
+ ->setTitle(pht('Install Dashboard'))
+ ->setErrors($errors)
+ ->appendChild($form->buildLayoutView())
+ ->addCancelButton($cancel_uri)
+ ->addSubmitButton(pht('Install Dashboard'));
+ }
+
+}
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
@@ -35,12 +35,20 @@
PhabricatorDashboard::getStatusNameMap(),
$dashboard->getStatus());
+ $install = id(new PHUIButtonView())
+ ->setTag('a')
+ ->setText('Install Dashboard')
+ ->setIcon('fa-plus')
+ ->setWorkflow(true)
+ ->setHref($this->getApplicationURI("/install/{$id}/"));
+
return id(new PHUIHeaderView())
->setUser($viewer)
->setHeader($dashboard->getName())
->setPolicyObject($dashboard)
->setStatus($status_icon, $status_color, $status_name)
- ->setHeaderIcon($dashboard->getIcon());
+ ->setHeaderIcon($dashboard->getIcon())
+ ->addActionLink($install);
}
protected function buildApplicationCrumbs() {
diff --git a/src/applications/dashboard/controller/PhabricatorDashboardViewController.php b/src/applications/dashboard/controller/PhabricatorDashboardViewController.php
--- a/src/applications/dashboard/controller/PhabricatorDashboardViewController.php
+++ b/src/applications/dashboard/controller/PhabricatorDashboardViewController.php
@@ -10,6 +10,7 @@
public function handleRequest(AphrontRequest $request) {
$viewer = $request->getViewer();
$id = $request->getURIData('id');
+ $installed = $request->getExists('installed');
$dashboard = id(new PhabricatorDashboardQuery())
->setViewer($viewer)
@@ -43,9 +44,18 @@
$navigation = $this->buildSideNavView('view');
$header = $this->buildHeaderView();
+ $install = null;
+ if ($installed) {
+ $install = id(new PHUIInfoView())
+ ->setSeverity(PHUIInfoView::SEVERITY_SUCCESS)
+ ->appendChild(pht(
+ 'This dashboard has been installed to your home menu.'));
+ }
+
$view = id(new PHUITwoColumnView())
->setHeader($header)
->setFooter(array(
+ $install,
$content,
));

File Metadata

Mime Type
text/plain
Expires
Sun, Mar 16, 3:38 AM (1 w, 1 h ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7705519
Default Alt Text
D17492.id42065.diff (6 KB)

Event Timeline