Path: blob/master/src/applications/fact/engine/PhabricatorChartEngine.php
12256 views
<?php12abstract class PhabricatorChartEngine3extends Phobject {45private $viewer;6private $engineParameters = array();78const KEY_ENGINE = 'engineKey';9const KEY_PARAMETERS = 'engineParameters';1011final public function setViewer(PhabricatorUser $viewer) {12$this->viewer = $viewer;13return $this;14}1516final public function getViewer() {17return $this->viewer;18}1920final protected function setEngineParameter($key, $value) {21$this->engineParameters[$key] = $value;22return $this;23}2425final protected function getEngineParameter($key, $default = null) {26return idx($this->engineParameters, $key, $default);27}2829final protected function getEngineParameters() {30return $this->engineParameters;31}3233final public static function newFromChart(PhabricatorFactChart $chart) {34$engine_key = $chart->getChartParameter(self::KEY_ENGINE);3536$engine_map = self::getAllChartEngines();37if (!isset($engine_map[$engine_key])) {38throw new Exception(39pht(40'Chart uses unknown engine key ("%s") and can not be rendered.',41$engine_key));42}4344return clone id($engine_map[$engine_key]);45}4647final public static function getAllChartEngines() {48return id(new PhutilClassMapQuery())49->setAncestorClass(__CLASS__)50->setUniqueMethod('getChartEngineKey')51->execute();52}5354final public function getChartEngineKey() {55return $this->getPhobjectClassConstant('CHARTENGINEKEY', 32);56}5758final public function buildChart(PhabricatorFactChart $chart) {59$map = $chart->getChartParameter(self::KEY_PARAMETERS, array());60return $this->newChart($chart, $map);61}6263abstract protected function newChart(PhabricatorFactChart $chart, array $map);6465final public function newStoredChart() {66$viewer = $this->getViewer();6768$parameters = $this->getEngineParameters();6970$chart = id(new PhabricatorFactChart())71->setChartParameter(self::KEY_ENGINE, $this->getChartEngineKey())72->setChartParameter(self::KEY_PARAMETERS, $this->getEngineParameters());7374$rendering_engine = id(new PhabricatorChartRenderingEngine())75->setViewer($viewer)76->setChart($chart);7778return $rendering_engine->getStoredChart();79}8081final public function buildChartPanel() {82$chart = $this->newStoredChart();8384$panel_type = id(new PhabricatorDashboardChartPanelType())85->getPanelTypeKey();8687$chart_panel = id(new PhabricatorDashboardPanel())88->setPanelType($panel_type)89->setProperty('chartKey', $chart->getChartKey());9091return $chart_panel;92}9394final protected function newFunction($name /* , ... */) {95$argv = func_get_args();96return id(new PhabricatorComposeChartFunction())97->setArguments($argv);98}99100}101102103