Changeset View
Changeset View
Standalone View
Standalone View
src/applications/fact/engine/PhabricatorChartRenderingEngine.php
Show First 20 Lines • Show All 127 Lines • ▼ Show 20 Lines | foreach ($functions as $function) { | ||||
$subfunctions[] = $subfunction; | $subfunctions[] = $subfunction; | ||||
} | } | ||||
} | } | ||||
foreach ($subfunctions as $subfunction) { | foreach ($subfunctions as $subfunction) { | ||||
$subfunction->loadData(); | $subfunction->loadData(); | ||||
} | } | ||||
list($domain_min, $domain_max) = $this->getDomain($functions); | $domain = $this->getDomain($functions); | ||||
$axis = id(new PhabricatorChartAxis()) | $axis = id(new PhabricatorChartAxis()) | ||||
->setMinimumValue($domain_min) | ->setMinimumValue($domain->getMin()) | ||||
->setMaximumValue($domain_max); | ->setMaximumValue($domain->getMax()); | ||||
$data_query = id(new PhabricatorChartDataQuery()) | $data_query = id(new PhabricatorChartDataQuery()) | ||||
->setMinimumValue($domain_min) | ->setMinimumValue($domain->getMin()) | ||||
->setMaximumValue($domain_max) | ->setMaximumValue($domain->getMax()) | ||||
->setLimit(2000); | ->setLimit(2000); | ||||
$wire_datasets = array(); | $wire_datasets = array(); | ||||
foreach ($datasets as $dataset) { | foreach ($datasets as $dataset) { | ||||
$wire_datasets[] = $dataset->getWireFormat($data_query); | $wire_datasets[] = $dataset->getWireFormat($data_query); | ||||
} | } | ||||
// TODO: Figure these out from the datasets again. | // TODO: Figure these out from the datasets again. | ||||
$y_min = -2; | $y_min = -2; | ||||
$y_max = 20; | $y_max = 20; | ||||
$chart_data = array( | $chart_data = array( | ||||
'datasets' => $wire_datasets, | 'datasets' => $wire_datasets, | ||||
'xMin' => $domain_min, | 'xMin' => $domain->getMin(), | ||||
'xMax' => $domain_max, | 'xMax' => $domain->getMax(), | ||||
'yMin' => $y_min, | 'yMin' => $y_min, | ||||
'yMax' => $y_max, | 'yMax' => $y_max, | ||||
); | ); | ||||
return $chart_data; | return $chart_data; | ||||
} | } | ||||
private function getDomain(array $functions) { | private function getDomain(array $functions) { | ||||
$domain_min_list = null; | $domains = array(); | ||||
$domain_max_list = null; | |||||
foreach ($functions as $function) { | foreach ($functions as $function) { | ||||
$domain = $function->getDomain(); | $domains[] = $function->getDomain(); | ||||
list($function_min, $function_max) = $domain; | |||||
if ($function_min !== null) { | |||||
$domain_min_list[] = $function_min; | |||||
} | |||||
if ($function_max !== null) { | |||||
$domain_max_list[] = $function_max; | |||||
} | } | ||||
} | |||||
$domain_min = null; | |||||
$domain_max = null; | |||||
if ($domain_min_list) { | $domain = PhabricatorChartInterval::newFromIntervalList($domains); | ||||
$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 | // If we don't have any domain data from the actual functions, pick a | ||||
// plausible domain automatically. | // plausible domain automatically. | ||||
if ($domain_max === null) { | if ($domain->getMax() === null) { | ||||
$domain_max = PhabricatorTime::getNow(); | $domain->setMax(PhabricatorTime::getNow()); | ||||
} | } | ||||
if ($domain_min === null) { | if ($domain->getMin() === null) { | ||||
$domain_min = $domain_max - phutil_units('365 days in seconds'); | $domain->setMin($domain->getMax() - phutil_units('365 days in seconds')); | ||||
} | } | ||||
return array($domain_min, $domain_max); | return $domain; | ||||
} | } | ||||
} | } |