Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/phabricator
Path: blob/master/src/applications/fact/engine/PhabricatorChartEngine.php
12256 views
1
<?php
2
3
abstract class PhabricatorChartEngine
4
extends Phobject {
5
6
private $viewer;
7
private $engineParameters = array();
8
9
const KEY_ENGINE = 'engineKey';
10
const KEY_PARAMETERS = 'engineParameters';
11
12
final public function setViewer(PhabricatorUser $viewer) {
13
$this->viewer = $viewer;
14
return $this;
15
}
16
17
final public function getViewer() {
18
return $this->viewer;
19
}
20
21
final protected function setEngineParameter($key, $value) {
22
$this->engineParameters[$key] = $value;
23
return $this;
24
}
25
26
final protected function getEngineParameter($key, $default = null) {
27
return idx($this->engineParameters, $key, $default);
28
}
29
30
final protected function getEngineParameters() {
31
return $this->engineParameters;
32
}
33
34
final public static function newFromChart(PhabricatorFactChart $chart) {
35
$engine_key = $chart->getChartParameter(self::KEY_ENGINE);
36
37
$engine_map = self::getAllChartEngines();
38
if (!isset($engine_map[$engine_key])) {
39
throw new Exception(
40
pht(
41
'Chart uses unknown engine key ("%s") and can not be rendered.',
42
$engine_key));
43
}
44
45
return clone id($engine_map[$engine_key]);
46
}
47
48
final public static function getAllChartEngines() {
49
return id(new PhutilClassMapQuery())
50
->setAncestorClass(__CLASS__)
51
->setUniqueMethod('getChartEngineKey')
52
->execute();
53
}
54
55
final public function getChartEngineKey() {
56
return $this->getPhobjectClassConstant('CHARTENGINEKEY', 32);
57
}
58
59
final public function buildChart(PhabricatorFactChart $chart) {
60
$map = $chart->getChartParameter(self::KEY_PARAMETERS, array());
61
return $this->newChart($chart, $map);
62
}
63
64
abstract protected function newChart(PhabricatorFactChart $chart, array $map);
65
66
final public function newStoredChart() {
67
$viewer = $this->getViewer();
68
69
$parameters = $this->getEngineParameters();
70
71
$chart = id(new PhabricatorFactChart())
72
->setChartParameter(self::KEY_ENGINE, $this->getChartEngineKey())
73
->setChartParameter(self::KEY_PARAMETERS, $this->getEngineParameters());
74
75
$rendering_engine = id(new PhabricatorChartRenderingEngine())
76
->setViewer($viewer)
77
->setChart($chart);
78
79
return $rendering_engine->getStoredChart();
80
}
81
82
final public function buildChartPanel() {
83
$chart = $this->newStoredChart();
84
85
$panel_type = id(new PhabricatorDashboardChartPanelType())
86
->getPanelTypeKey();
87
88
$chart_panel = id(new PhabricatorDashboardPanel())
89
->setPanelType($panel_type)
90
->setProperty('chartKey', $chart->getChartKey());
91
92
return $chart_panel;
93
}
94
95
final protected function newFunction($name /* , ... */) {
96
$argv = func_get_args();
97
return id(new PhabricatorComposeChartFunction())
98
->setArguments($argv);
99
}
100
101
}
102
103