Changeset View
Changeset View
Standalone View
Standalone View
src/applications/fact/controller/PhabricatorFactChartController.php
Show All 18 Lines | public function handleRequest(AphrontRequest $request) { | ||||
$functions[] = id(new PhabricatorFactChartFunction()) | $functions[] = id(new PhabricatorFactChartFunction()) | ||||
->setArguments(array('tasks.open-count.create')); | ->setArguments(array('tasks.open-count.create')); | ||||
if ($is_chart_mode) { | if ($is_chart_mode) { | ||||
return $this->newChartResponse(); | return $this->newChartResponse(); | ||||
} | } | ||||
list($domain_min, $domain_max) = $this->getDomain($functions); | |||||
$axis = id(new PhabricatorChartAxis()) | |||||
->setMinimumValue($domain_min) | |||||
->setMaximumValue($domain_max); | |||||
$datasets = array(); | $datasets = array(); | ||||
foreach ($functions as $function) { | foreach ($functions as $function) { | ||||
$function->setXAxis($axis); | |||||
amckinley: No `setYAxis`? | |||||
Done Inline ActionsWhat, you think I'm just made of axes over here? That axes grow on trees? epriestley: What, you think I'm just made of axes over here? That axes grow on trees? | |||||
Not Done Inline Actionsamckinley: {meme, src=gimli, below="AND MY AXIS"}
| |||||
$function->loadData(); | $function->loadData(); | ||||
$points = $function->getDatapoints(2000); | $points = $function->getDatapoints(2000); | ||||
$x = array(); | $x = array(); | ||||
$y = array(); | $y = array(); | ||||
foreach ($points as $point) { | foreach ($points as $point) { | ||||
$x[] = $point['x']; | $x[] = $point['x']; | ||||
$y[] = $point['y']; | $y[] = $point['y']; | ||||
} | } | ||||
$datasets[] = array( | $datasets[] = array( | ||||
'x' => $x, | 'x' => $x, | ||||
'y' => $y, | 'y' => $y, | ||||
'color' => '#ff00ff', | 'color' => '#ff00ff', | ||||
); | ); | ||||
} | } | ||||
$y_min = 0; | $y_min = 0; | ||||
$y_max = 0; | $y_max = 0; | ||||
$x_min = null; | |||||
$x_max = 0; | |||||
foreach ($datasets as $dataset) { | foreach ($datasets as $dataset) { | ||||
if (!$dataset['y']) { | if (!$dataset['y']) { | ||||
continue; | continue; | ||||
} | } | ||||
$y_min = min($y_min, min($dataset['y'])); | $y_min = min($y_min, min($dataset['y'])); | ||||
$y_max = max($y_max, max($dataset['y'])); | $y_max = max($y_max, max($dataset['y'])); | ||||
if ($x_min === null) { | |||||
$x_min = min($dataset['x']); | |||||
} else { | |||||
$x_min = min($x_min, min($dataset['x'])); | |||||
} | |||||
$x_max = max($x_max, max($dataset['x'])); | |||||
} | } | ||||
$chart_data = array( | $chart_data = array( | ||||
'datasets' => $datasets, | 'datasets' => $datasets, | ||||
'xMin' => $x_min, | 'xMin' => $domain_min, | ||||
'xMax' => $x_max, | 'xMax' => $domain_max, | ||||
'yMin' => $y_min, | 'yMin' => $y_min, | ||||
'yMax' => $y_max, | 'yMax' => $y_max, | ||||
); | ); | ||||
return id(new AphrontAjaxResponse())->setContent($chart_data); | return id(new AphrontAjaxResponse())->setContent($chart_data); | ||||
} | } | ||||
private function newChartResponse() { | private function newChartResponse() { | ||||
Show All 31 Lines | private function newChartResponse() { | ||||
return $this->newPage() | return $this->newPage() | ||||
->setTitle($title) | ->setTitle($title) | ||||
->setCrumbs($crumbs) | ->setCrumbs($crumbs) | ||||
->appendChild($box); | ->appendChild($box); | ||||
} | } | ||||
private function getDomain(array $functions) { | |||||
$domain_min_list = null; | |||||
$domain_max_list = null; | |||||
foreach ($functions as $function) { | |||||
if ($function->hasDomain()) { | |||||
$domain = $function->getDomain(); | |||||
list($domain_min, $domain_max) = $domain; | |||||
Not Done Inline ActionsNo list($domain_min, $domain_max)? amckinley: No `list($domain_min, $domain_max)`? | |||||
if ($domain_min !== null) { | |||||
$domain_min_list[] = $domain_min; | |||||
} | |||||
if ($domain_max !== null) { | |||||
$domain_max_list[] = $domain_max; | |||||
} | |||||
} | |||||
} | |||||
$domain_min = null; | |||||
$domain_max = null; | |||||
if ($domain_min_list) { | |||||
$domain_min = min($domain_min_list); | |||||
} | |||||
if ($domain_max_list) { | |||||
$domain_max = max($domain_max_list); | |||||
} | |||||
// If we don't have any domain data from the actual functions, pick a | |||||
// plausible domain automatically. | |||||
if ($domain_max === null) { | |||||
$domain_max = PhabricatorTime::getNow(); | |||||
} | |||||
if ($domain_min === null) { | |||||
$domain_min = $domain_max - phutil_units('365 days in seconds'); | |||||
} | |||||
return array($domain_min, $domain_max); | |||||
} | |||||
} | } |
No setYAxis?