Page MenuHomePhabricator

D20485.diff
No OneTemporary

D20485.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
@@ -2937,6 +2937,8 @@
'PhabricatorDashboardApplication' => 'applications/dashboard/application/PhabricatorDashboardApplication.php',
'PhabricatorDashboardApplicationInstallWorkflow' => 'applications/dashboard/install/PhabricatorDashboardApplicationInstallWorkflow.php',
'PhabricatorDashboardArchiveController' => 'applications/dashboard/controller/dashboard/PhabricatorDashboardArchiveController.php',
+ 'PhabricatorDashboardChartPanelChartTransaction' => 'applications/dashboard/xaction/panel/PhabricatorDashboardChartPanelChartTransaction.php',
+ 'PhabricatorDashboardChartPanelType' => 'applications/dashboard/paneltype/PhabricatorDashboardChartPanelType.php',
'PhabricatorDashboardColumn' => 'applications/dashboard/layoutconfig/PhabricatorDashboardColumn.php',
'PhabricatorDashboardConsoleController' => 'applications/dashboard/controller/PhabricatorDashboardConsoleController.php',
'PhabricatorDashboardController' => 'applications/dashboard/controller/PhabricatorDashboardController.php',
@@ -8983,6 +8985,8 @@
'PhabricatorDashboardApplication' => 'PhabricatorApplication',
'PhabricatorDashboardApplicationInstallWorkflow' => 'PhabricatorDashboardInstallWorkflow',
'PhabricatorDashboardArchiveController' => 'PhabricatorDashboardController',
+ 'PhabricatorDashboardChartPanelChartTransaction' => 'PhabricatorDashboardPanelPropertyTransaction',
+ 'PhabricatorDashboardChartPanelType' => 'PhabricatorDashboardPanelType',
'PhabricatorDashboardColumn' => 'Phobject',
'PhabricatorDashboardConsoleController' => 'PhabricatorDashboardController',
'PhabricatorDashboardController' => 'PhabricatorController',
diff --git a/src/applications/dashboard/paneltype/PhabricatorDashboardChartPanelType.php b/src/applications/dashboard/paneltype/PhabricatorDashboardChartPanelType.php
new file mode 100644
--- /dev/null
+++ b/src/applications/dashboard/paneltype/PhabricatorDashboardChartPanelType.php
@@ -0,0 +1,76 @@
+<?php
+
+final class PhabricatorDashboardChartPanelType
+ extends PhabricatorDashboardPanelType {
+
+ public function getPanelTypeKey() {
+ return 'chart';
+ }
+
+ public function getPanelTypeName() {
+ return pht('Chart Panel');
+ }
+
+ public function getIcon() {
+ return 'fa-area-chart';
+ }
+
+ public function getPanelTypeDescription() {
+ return pht('Show a chart.');
+ }
+
+ protected function newEditEngineFields(PhabricatorDashboardPanel $panel) {
+ $chart_field = id(new PhabricatorTextEditField())
+ ->setKey('chartKey')
+ ->setLabel(pht('Chart'))
+ ->setTransactionType(
+ PhabricatorDashboardChartPanelChartTransaction::TRANSACTIONTYPE)
+ ->setValue($panel->getProperty('chartKey', ''));
+
+ return array(
+ $chart_field,
+ );
+ }
+
+ public function renderPanelContent(
+ PhabricatorUser $viewer,
+ PhabricatorDashboardPanel $panel,
+ PhabricatorDashboardPanelRenderingEngine $engine) {
+
+ $engine = id(new PhabricatorChartEngine())
+ ->setViewer($viewer);
+
+ $chart = $engine->loadChart($panel->getProperty('chartKey'));
+ if (!$chart) {
+ return pht('no such chart!');
+ }
+
+ return $engine->newChartView();
+ }
+
+ public function adjustPanelHeader(
+ PhabricatorUser $viewer,
+ PhabricatorDashboardPanel $panel,
+ PhabricatorDashboardPanelRenderingEngine $engine,
+ PHUIHeaderView $header) {
+
+ $key = $panel->getProperty('chartKey');
+ $uri = PhabricatorChartEngine::getChartURI($key);
+
+ $icon = id(new PHUIIconView())
+ ->setIcon('fa-area-chart');
+
+ $button = id(new PHUIButtonView())
+ ->setTag('a')
+ ->setText(pht('View Chart'))
+ ->setIcon($icon)
+ ->setHref($uri)
+ ->setColor(PHUIButtonView::GREY);
+
+ $header->addActionLink($button);
+
+ return $header;
+ }
+
+
+}
diff --git a/src/applications/dashboard/xaction/panel/PhabricatorDashboardChartPanelChartTransaction.php b/src/applications/dashboard/xaction/panel/PhabricatorDashboardChartPanelChartTransaction.php
new file mode 100644
--- /dev/null
+++ b/src/applications/dashboard/xaction/panel/PhabricatorDashboardChartPanelChartTransaction.php
@@ -0,0 +1,12 @@
+<?php
+
+final class PhabricatorDashboardChartPanelChartTransaction
+ extends PhabricatorDashboardPanelPropertyTransaction {
+
+ const TRANSACTIONTYPE = 'chart.chartKey';
+
+ protected function getPropertyKey() {
+ return 'chartKey';
+ }
+
+}
diff --git a/src/applications/fact/controller/PhabricatorFactChartController.php b/src/applications/fact/controller/PhabricatorFactChartController.php
--- a/src/applications/fact/controller/PhabricatorFactChartController.php
+++ b/src/applications/fact/controller/PhabricatorFactChartController.php
@@ -10,17 +10,14 @@
return $this->newDemoChart();
}
- $chart = id(new PhabricatorFactChart())->loadOneWhere(
- 'chartKey = %s',
- $chart_key);
+ $engine = id(new PhabricatorChartEngine())
+ ->setViewer($viewer);
+
+ $chart = $engine->loadChart($chart_key);
if (!$chart) {
return new Aphront404Response();
}
- $engine = id(new PhabricatorChartEngine())
- ->setViewer($viewer)
- ->setChart($chart);
-
// When drawing a chart, we send down a placeholder piece of HTML first,
// then fetch the data via async request. Determine if we're drawing
// the structure or actually pulling the data.
diff --git a/src/applications/fact/engine/PhabricatorChartEngine.php b/src/applications/fact/engine/PhabricatorChartEngine.php
--- a/src/applications/fact/engine/PhabricatorChartEngine.php
+++ b/src/applications/fact/engine/PhabricatorChartEngine.php
@@ -25,6 +25,24 @@
return $this->chart;
}
+ public function loadChart($chart_key) {
+ $chart = id(new PhabricatorFactChart())->loadOneWhere(
+ 'chartKey = %s',
+ $chart_key);
+
+ if ($chart) {
+ $this->setChart($chart);
+ }
+
+ return $chart;
+ }
+
+ public static function getChartURI($chart_key) {
+ return id(new PhabricatorFactChart())
+ ->setChartKey($chart_key)
+ ->getURI();
+ }
+
public function getStoredChart() {
if (!$this->storedChart) {
$chart = $this->getChart();

File Metadata

Mime Type
text/plain
Expires
Mon, May 20, 4:37 AM (2 w, 11 h ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
6297087
Default Alt Text
D20485.diff (6 KB)

Event Timeline