Page MenuHomePhabricator

D17492.diff
No OneTemporary

D17492.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' => '32f2c040',
'conpherence.pkg.js' => '6249a1cf',
- 'core.pkg.css' => '35645dec',
+ 'core.pkg.css' => 'c0c87dac',
'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',
@@ -146,7 +146,7 @@
'rsrc/css/phui/phui-document.css' => 'c32e8dec',
'rsrc/css/phui/phui-feed-story.css' => '44a9c8e9',
'rsrc/css/phui/phui-fontkit.css' => 'b78a0059',
- 'rsrc/css/phui/phui-form-view.css' => 'adca31ce',
+ 'rsrc/css/phui/phui-form-view.css' => 'cf198e10',
'rsrc/css/phui/phui-form.css' => 'b62c01d8',
'rsrc/css/phui/phui-head-thing.css' => 'fd311e5f',
'rsrc/css/phui/phui-header-view.css' => 'fef6a54e',
@@ -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',
@@ -859,7 +859,7 @@
'phui-font-icon-base-css' => '870a7360',
'phui-fontkit-css' => 'b78a0059',
'phui-form-css' => 'b62c01d8',
- 'phui-form-view-css' => 'adca31ce',
+ 'phui-form-view-css' => 'cf198e10',
'phui-head-thing-view-css' => 'fd311e5f',
'phui-header-view-css' => 'fef6a54e',
'phui-hovercard' => '1bd28176',
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
@@ -2496,6 +2496,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',
@@ -7562,6 +7563,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/PhabricatorDashboardArrangeController.php b/src/applications/dashboard/controller/PhabricatorDashboardArrangeController.php
--- a/src/applications/dashboard/controller/PhabricatorDashboardArrangeController.php
+++ b/src/applications/dashboard/controller/PhabricatorDashboardArrangeController.php
@@ -51,6 +51,14 @@
->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(
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,141 @@
+<?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))
+ ->executeOne();
+ if (!$dashboard) {
+ return new Aphront404Response();
+ }
+
+ $cancel_uri = $this->getApplicationURI(
+ 'view/'.$dashboard->getID().'/');
+
+ $home_app = new PhabricatorHomeApplication();
+
+ $options = array();
+ $options['home'] = array(
+ 'personal' =>
+ array(
+ 'capability' => PhabricatorPolicyCapability::CAN_VIEW,
+ 'application' => $home_app,
+ 'name' => pht('Personal Dashboard'),
+ 'value' => 'personal',
+ 'description' => pht('Places this dashboard as a menu item on home '.
+ 'as a personal menu item. It will only be on your personal '.
+ 'home.'),
+ ),
+ 'global' =>
+ array(
+ 'capability' => PhabricatorPolicyCapability::CAN_EDIT,
+ 'application' => $home_app,
+ 'name' => pht('Global Dashboard'),
+ 'value' => 'global',
+ 'description' => pht('Places this dashboard as a menu item on home '.
+ 'as a global menu item. It will be available to all users.'),
+ ),
+ );
+
+
+ $errors = array();
+ $v_name = null;
+ if ($request->isFormPost()) {
+ $menuitem = new PhabricatorDashboardProfileMenuItem();
+ $dashboard_phid = $dashboard->getPHID();
+ $home = new PhabricatorHomeApplication();
+ $v_name = $request->getStr('name');
+ $v_home = $request->getStr('home');
+
+ if ($v_home) {
+ $application = $options['home'][$v_home]['application'];
+ $capability = $options['home'][$v_home]['capability'];
+
+ $can_edit_home = PhabricatorPolicyFilter::hasCapability(
+ $viewer,
+ $application,
+ $capability);
+
+ if (!$can_edit_home) {
+ $errors[] = pht(
+ 'You do not have permission to install a dashboard on home.');
+ }
+ } else {
+ $errors[] = pht(
+ 'You must select a destination to install this dashboard.');
+ }
+
+ $v_phid = $viewer->getPHID();
+ if ($v_home == 'global') {
+ $v_phid = null;
+ }
+
+ if (!$errors) {
+ $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 = '/home/menu/view/'.$install->getID().'/';
+
+ return id(new AphrontRedirectResponse())->setURI($view_uri);
+ }
+ }
+
+ $form = id(new AphrontFormView())
+ ->setUser($viewer)
+ ->appendChild(
+ id(new AphrontFormTextControl())
+ ->setLabel(pht('Menu Label'))
+ ->setName('name')
+ ->setValue($v_name));
+
+ $radio = id(new AphrontFormRadioButtonControl())
+ ->setLabel(pht('Home Menu'))
+ ->setName('home');
+
+ foreach ($options['home'] as $type => $option) {
+ $can_edit = PhabricatorPolicyFilter::hasCapability(
+ $viewer,
+ $option['application'],
+ $option['capability']);
+ if ($can_edit) {
+ $radio->addButton(
+ $option['value'],
+ $option['name'],
+ $option['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
@@ -43,6 +43,14 @@
$navigation = $this->buildSideNavView('view');
$header = $this->buildHeaderView();
+ $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(
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 {
diff --git a/webroot/rsrc/css/phui/phui-form-view.css b/webroot/rsrc/css/phui/phui-form-view.css
--- a/webroot/rsrc/css/phui/phui-form-view.css
+++ b/webroot/rsrc/css/phui/phui-form-view.css
@@ -208,14 +208,13 @@
table.aphront-form-control-radio-layout,
table.aphront-form-control-checkbox-layout {
- margin-top: 3px;
+ margin-top: 4px !important;
font-size: {$normalfontsize};
}
table.aphront-form-control-radio-layout th {
- padding-top: 3px;
padding-left: 8px;
- padding-bottom: 4px;
+ padding-bottom: 8px;
font-weight: bold;
color: {$darkgreytext};
}

File Metadata

Mime Type
text/plain
Expires
Wed, May 8, 8:37 PM (3 w, 4 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
6272879
Default Alt Text
D17492.diff (11 KB)

Event Timeline