Page MenuHomePhabricator

D17492.id42064.diff
No OneTemporary

D17492.id42064.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().'/');
+
+ $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 menu menu list.'));
+
+ 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() {

File Metadata

Mime Type
text/plain
Expires
Tue, Mar 18, 2:29 PM (1 d, 1 h ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7709986
Default Alt Text
D17492.id42064.diff (5 KB)

Event Timeline