Page MenuHomePhabricator

D9651.id23174.diff
No OneTemporary

D9651.id23174.diff

diff --git a/src/applications/dashboard/controller/PhabricatorDashboardEditController.php b/src/applications/dashboard/controller/PhabricatorDashboardEditController.php
--- a/src/applications/dashboard/controller/PhabricatorDashboardEditController.php
+++ b/src/applications/dashboard/controller/PhabricatorDashboardEditController.php
@@ -30,6 +30,19 @@
$is_new = false;
} else {
+ if (!$request->getStr('edit')) {
+ if ($request->isFormPost()) {
+ switch ($request->getStr('template')) {
+ case 'empty':
+ break;
+ default:
+ return $this->processBuildTemplateRequest($request);
+ }
+ } else {
+ return $this->processTemplateRequest($request);
+ }
+ }
+
$dashboard = PhabricatorDashboard::initializeNewDashboard($viewer);
$is_new = true;
@@ -61,7 +74,7 @@
$e_name = true;
$validation_exception = null;
- if ($request->isFormPost()) {
+ if ($request->isFormPost() && $request->getStr('edit')) {
$v_name = $request->getStr('name');
$v_layout_mode = $request->getStr('layout_mode');
$v_view_policy = $request->getStr('viewPolicy');
@@ -116,6 +129,7 @@
PhabricatorDashboardLayoutConfig::getLayoutModeSelectOptions();
$form = id(new AphrontFormView())
->setUser($viewer)
+ ->addHiddenInput('edit', true)
->appendChild(
id(new AphrontFormTextControl())
->setLabel(pht('Name'))
@@ -161,4 +175,172 @@
));
}
+ private function processTemplateRequest(AphrontRequest $request) {
+ $viewer = $request->getUser();
+
+ $template_control = id(new AphrontFormRadioButtonControl())
+ ->setName(pht('template'))
+ ->setValue($request->getStr('template', 'empty'))
+ ->addButton(
+ 'empty',
+ pht('Empty'),
+ pht('Start with a blank canvas.'))
+ ->addButton(
+ 'simple',
+ pht('Simple Template'),
+ pht(
+ 'Start with a simple dashboard with a welcome message, a feed of '.
+ 'recent events, and a few starter panels.'));
+
+ $form = id(new AphrontFormView())
+ ->setUser($viewer)
+ ->appendRemarkupInstructions(
+ pht('Choose a dashboard template to start with.'))
+ ->appendChild($template_control);
+
+ return $this->newDialog()
+ ->setTitle(pht('Create Dashboard'))
+ ->setWidth(AphrontDialogView::WIDTH_FORM)
+ ->appendChild($form->buildLayoutView())
+ ->addCancelButton('/dashboard/')
+ ->addSubmitButton(pht('Continue'));
+ }
+
+ private function processBuildTemplateRequest(AphrontRequest $request) {
+ $viewer = $request->getUser();
+ $template = $request->getStr('template');
+
+ $bare_panel = PhabricatorDashboardPanel::initializeNewPanel($viewer);
+ $panel_phids = array();
+
+ switch ($template) {
+ case 'simple':
+ $v_name = pht('New Simple Dashboard');
+
+ $welcome_panel = $this->newPanel(
+ $request,
+ $viewer,
+ 'text',
+ pht('Welcome'),
+ array(
+ 'text' => pht(
+ "This is a simple template dashboard. You can edit this panel ".
+ "to change this text and replace it with a welcome message, or ".
+ "leave this placeholder text as-is to give your dashboard a ".
+ "rustic, authentic feel.".
+ "\n\n".
+ "You can drag, remove, add, and edit panels to customize the ".
+ "rest of this dashboard to show the information you want.".
+ "\n\n".
+ "To install this dashboard on the home page, use the ".
+ "**Install Dashboard** action link above."),
+ ));
+ $panel_phids[] = $welcome_panel->getPHID();
+
+ $feed_panel = $this->newPanel(
+ $request,
+ $viewer,
+ 'query',
+ pht('Recent Activity'),
+ array(
+ 'class' => 'PhabricatorFeedSearchEngine',
+ 'key' => 'all',
+ ));
+ $panel_phids[] = $feed_panel->getPHID();
+
+ $task_panel = $this->newPanel(
+ $request,
+ $viewer,
+ 'query',
+ pht('Recent Tasks'),
+ array(
+ 'class' => 'ManiphestTaskSearchEngine',
+ 'key' => 'all',
+ ));
+ $panel_phids[] = $task_panel->getPHID();
+
+ $commit_panel = $this->newPanel(
+ $request,
+ $viewer,
+ 'query',
+ pht('Recent Commits'),
+ array(
+ 'class' => 'PhabricatorCommitSearchEngine',
+ 'key' => 'all',
+ ));
+ $panel_phids[] = $commit_panel->getPHID();
+
+ $mode_2_and_1 = PhabricatorDashboardLayoutConfig::MODE_THIRDS_AND_THIRD;
+ $layout = id(new PhabricatorDashboardLayoutConfig())
+ ->setLayoutMode($mode_2_and_1)
+ ->setPanelLocation(0, $welcome_panel->getPHID())
+ ->setPanelLocation(0, $task_panel->getPHID())
+ ->setPanelLocation(0, $commit_panel->getPHID())
+ ->setPanelLocation(1, $feed_panel->getPHID());
+
+ break;
+ default:
+ throw new Exception(pht('Unknown dashboard template %s!', $template));
+ }
+
+ // Create the dashboard.
+
+ $dashboard = PhabricatorDashboard::initializeNewDashboard($viewer)
+ ->setLayoutConfigFromObject($layout);
+
+ $xactions = array();
+
+ $xactions[] = id(new PhabricatorDashboardTransaction())
+ ->setTransactionType(PhabricatorDashboardTransaction::TYPE_NAME)
+ ->setNewValue($v_name);
+
+ $xactions[] = id(new PhabricatorDashboardTransaction())
+ ->setTransactionType(PhabricatorTransactions::TYPE_EDGE)
+ ->setMetadataValue(
+ 'edge:type',
+ PhabricatorEdgeConfig::TYPE_DASHBOARD_HAS_PANEL)
+ ->setNewValue(
+ array(
+ '+' => array_fuse($panel_phids),
+ ));
+
+ $editor = id(new PhabricatorDashboardTransactionEditor())
+ ->setActor($viewer)
+ ->setContinueOnNoEffect(true)
+ ->setContentSourceFromRequest($request)
+ ->applyTransactions($dashboard, $xactions);
+
+ $manage_uri = $this->getApplicationURI('manage/'.$dashboard->getID().'/');
+
+ return id(new AphrontRedirectResponse())
+ ->setURI($manage_uri);
+ }
+
+ private function newPanel(
+ AphrontRequest $request,
+ PhabricatorUser $viewer,
+ $type,
+ $name,
+ array $properties) {
+
+ $panel = PhabricatorDashboardPanel::initializeNewPanel($viewer)
+ ->setPanelType($type)
+ ->setProperties($properties);
+
+ $xactions = array();
+
+ $xactions[] = id(new PhabricatorDashboardPanelTransaction())
+ ->setTransactionType(PhabricatorDashboardPanelTransaction::TYPE_NAME)
+ ->setNewValue($name);
+
+ $editor = id(new PhabricatorDashboardPanelTransactionEditor())
+ ->setActor($viewer)
+ ->setContinueOnNoEffect(true)
+ ->setContentSourceFromRequest($request)
+ ->applyTransactions($panel, $xactions);
+
+ return $panel;
+ }
+
+
}
diff --git a/src/applications/dashboard/controller/PhabricatorDashboardManageController.php b/src/applications/dashboard/controller/PhabricatorDashboardManageController.php
--- a/src/applications/dashboard/controller/PhabricatorDashboardManageController.php
+++ b/src/applications/dashboard/controller/PhabricatorDashboardManageController.php
@@ -103,6 +103,12 @@
$actions->addAction(
id(new PhabricatorActionView())
+ ->setName(pht('View Dashboard'))
+ ->setIcon('fa-columns')
+ ->setHref($this->getApplicationURI("view/{$id}/")));
+
+ $actions->addAction(
+ id(new PhabricatorActionView())
->setName(pht('Edit Dashboard'))
->setIcon('fa-pencil')
->setHref($this->getApplicationURI("edit/{$id}/"))

File Metadata

Mime Type
text/plain
Expires
Sun, Mar 9, 6:33 AM (2 w, 3 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7335096
Default Alt Text
D9651.id23174.diff (7 KB)

Event Timeline