Path: blob/master/src/applications/fact/controller/PhabricatorFactChartController.php
12256 views
<?php12final class PhabricatorFactChartController3extends PhabricatorFactController {45public function handleRequest(AphrontRequest $request) {6$viewer = $request->getViewer();78$chart_key = $request->getURIData('chartKey');9if (!$chart_key) {10return new Aphront404Response();11}1213$engine = id(new PhabricatorChartRenderingEngine())14->setViewer($viewer);1516$chart = $engine->loadChart($chart_key);17if (!$chart) {18return new Aphront404Response();19}2021// When drawing a chart, we send down a placeholder piece of HTML first,22// then fetch the data via async request. Determine if we're drawing23// the structure or actually pulling the data.24$mode = $request->getURIData('mode');25$is_draw_mode = ($mode === 'draw');2627$want_data = $is_draw_mode;2829// In developer mode, always pull the data in the main request. We'll30// throw it away if we're just drawing the chart frame, but this currently31// makes errors quite a bit easier to debug.32if (PhabricatorEnv::getEnvConfig('phabricator.developer-mode')) {33$want_data = true;34}3536if ($want_data) {37$chart_data = $engine->newChartData();38if ($is_draw_mode) {39return id(new AphrontAjaxResponse())->setContent($chart_data);40}41}4243$chart_view = $engine->newChartView();4445return $this->newChartResponse($chart_view);46}4748private function newChartResponse($chart_view) {49$box = id(new PHUIObjectBoxView())50->setHeaderText(pht('Chart'))51->appendChild($chart_view);5253$crumbs = $this->buildApplicationCrumbs()54->addTextCrumb(pht('Chart'))55->setBorder(true);5657$title = pht('Chart');5859return $this->newPage()60->setTitle($title)61->setCrumbs($crumbs)62->appendChild(63array(64$box,65));66}6768}697071