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 @@ +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 @@ +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();