Page MenuHomePhabricator

D17492.id42066.diff
No OneTemporary

D17492.id42066.diff

diff --git a/resources/celerity/map.php b/resources/celerity/map.php
--- a/resources/celerity/map.php
+++ b/resources/celerity/map.php
@@ -9,7 +9,7 @@
'names' => array(
'conpherence.pkg.css' => '6875302f',
'conpherence.pkg.js' => '6249a1cf',
- 'core.pkg.css' => '35645dec',
+ 'core.pkg.css' => '1bacb84b',
'core.pkg.js' => '1fa7c0c5',
'darkconsole.pkg.js' => 'e7393ebb',
'differential.pkg.css' => '90b30783',
@@ -21,7 +21,7 @@
'maniphest.pkg.js' => '5ab2753f',
'rsrc/css/aphront/aphront-bars.css' => '231ac33c',
'rsrc/css/aphront/dark-console.css' => 'f54bf286',
- 'rsrc/css/aphront/dialog-view.css' => '5e5aa60b',
+ 'rsrc/css/aphront/dialog-view.css' => '685c7e2d',
'rsrc/css/aphront/list-filter-view.css' => '5d6f0526',
'rsrc/css/aphront/multi-column.css' => '84cc6640',
'rsrc/css/aphront/notification.css' => '3f6c89c9',
@@ -548,7 +548,7 @@
'almanac-css' => 'dbb9b3af',
'aphront-bars' => '231ac33c',
'aphront-dark-console-css' => 'f54bf286',
- 'aphront-dialog-view-css' => '5e5aa60b',
+ 'aphront-dialog-view-css' => '685c7e2d',
'aphront-list-filter-view-css' => '5d6f0526',
'aphront-multi-column-view-css' => '84cc6640',
'aphront-panel-view-css' => '8427b78d',
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,121 @@
+<?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().'/');
+
+ $install_option = array(
+ array(
+ 'admin' => false,
+ 'name' => pht('Personal Dashboard'),
+ 'value' => 'personal',
+ 'description' => pht('Places this dashboard as a menu item on home '.
+ 'as the a personal menu item. It will only be on your personal '.
+ 'home. You can change this after by editing your personal home '.
+ 'menu.'),
+ ),
+ array(
+ 'admin' => true,
+ 'name' => pht('Global Dashboard'),
+ 'value' => 'global',
+ 'description' => pht('Places this dashboard as a menu item on home '.
+ 'as the a global menu item. It will be the default home dashboard '.
+ 'for any user without a custom dashboard. You can change this '.
+ 'after by editing the global home menu.'),
+ ),
+ );
+
+
+ $errors = array();
+ if ($request->isFormPost()) {
+ $menuitem = new PhabricatorDashboardProfileMenuItem();
+ $dashboard_phid = $dashboard->getPHID();
+ $home = new PhabricatorHomeApplication();
+ $v_name = $request->getStr('name');
+ $v_home = $request->getStr('home');
+
+ $v_phid = $viewer->getPHID();
+ if ($v_home == 'global') {
+ $v_phid = null;
+ }
+
+ $install = PhabricatorProfileMenuItemConfiguration::initializeNewItem(
+ $home,
+ $menuitem,
+ $v_phid);
+
+ $install->setMenuItemProperty('dashboardPHID', $dashboard_phid);
+ $install->setMenuItemProperty('name', $v_name);
+ $install->setMenuItemOrder(1);
+
+ $xactions = array();
+
+ $editor = id(new PhabricatorProfileMenuEditor())
+ ->setActor($viewer)
+ ->setContinueOnNoEffect(true)
+ ->setContinueOnMissingFields(true)
+ ->setContentSourceFromRequest($request);
+
+ $editor->applyTransactions($install, $xactions);
+
+ $view_uri = $this->getApplicationURI(
+ 'view/'.$dashboard->getID().'/?installed='.$v_home);
+
+ return id(new AphrontRedirectResponse())->setURI($view_uri);
+ }
+
+ $form = id(new AphrontFormView())
+ ->setUser($viewer)
+ ->appendChild(
+ id(new AphrontFormTextControl())
+ ->setLabel(pht('Name'))
+ ->setName('name'));
+
+ $radio = id(new AphrontFormRadioButtonControl())
+ ->setLabel(pht('Home Menu'))
+ ->setName('home');
+
+ foreach ($install_option as $install) {
+ if ($install['admin']) {
+ if (!$viewer->getIsAdmin()) {
+ continue;
+ }
+ }
+ $radio->addButton(
+ $install['value'],
+ $install['name'],
+ $install['description']);
+ }
+
+ $form->appendChild($radio);
+
+ return $this->newDialog()
+ ->setTitle(pht('Install Dashboard'))
+ ->setErrors($errors)
+ ->setWidth(AphrontDialogView::WIDTH_FORM)
+ ->appendChild($form->buildLayoutView())
+ ->addCancelButton($cancel_uri)
+ ->addSubmitButton(pht('Install Dashboard'));
+ }
+
+}
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->getStr('installed');
$dashboard = id(new PhabricatorDashboardQuery())
->setViewer($viewer)
@@ -43,9 +44,31 @@
$navigation = $this->buildSideNavView('view');
$header = $this->buildHeaderView();
+ $install = null;
+ if ($installed) {
+ $text = pht(
+ 'This dashboard has been installed to the your personal home menu.');
+ if ($installed == 'global') {
+ $text = pht(
+ 'This dashboard has been installed to the global home menu.');
+ }
+ $install = id(new PHUIInfoView())
+ ->setSeverity(PHUIInfoView::SEVERITY_SUCCESS)
+ ->appendChild($text);
+ }
+
+ $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(
+ $install,
$content,
));
diff --git a/webroot/rsrc/css/aphront/dialog-view.css b/webroot/rsrc/css/aphront/dialog-view.css
--- a/webroot/rsrc/css/aphront/dialog-view.css
+++ b/webroot/rsrc/css/aphront/dialog-view.css
@@ -3,7 +3,7 @@
*/
.aphront-dialog-view {
- width: 540px;
+ width: 560px;
margin: 32px auto 16px;
border: 1px solid {$lightblueborder};
border-radius: 3px;
@@ -32,7 +32,7 @@
}
.aphront-dialog-view-width-form {
- width: 600px;
+ width: 640px;
}
.aphront-dialog-view-width-full {

File Metadata

Mime Type
text/plain
Expires
Fri, Apr 25, 2:58 AM (21 h, 5 m ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7825742
Default Alt Text
D17492.id42066.diff (9 KB)

Event Timeline