@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at recaptime-dev/main 108 lines 2.6 kB view raw
1<?php 2 3abstract class PhabricatorChartDataset 4 extends Phobject { 5 6 private $functions; 7 8 final public function getDatasetTypeKey() { 9 return $this->getPhobjectClassConstant('DATASETKEY', 32); 10 } 11 12 final public function getFunctions() { 13 return $this->functions; 14 } 15 16 /** 17 * @param array<PhabricatorComposeChartFunction> $functions 18 */ 19 final public function setFunctions(array $functions) { 20 assert_instances_of($functions, PhabricatorComposeChartFunction::class); 21 22 $this->functions = $functions; 23 24 return $this; 25 } 26 27 final public static function getAllDatasetTypes() { 28 return id(new PhutilClassMapQuery()) 29 ->setAncestorClass(self::class) 30 ->setUniqueMethod('getDatasetTypeKey') 31 ->execute(); 32 } 33 34 final public static function newFromDictionary(array $map) { 35 PhutilTypeSpec::checkMap( 36 $map, 37 array( 38 'type' => 'string', 39 'functions' => 'list<wild>', 40 )); 41 42 $types = self::getAllDatasetTypes(); 43 44 $dataset_type = $map['type']; 45 if (!isset($types[$dataset_type])) { 46 throw new Exception( 47 pht( 48 'Trying to construct a dataset of type "%s", but this type is '. 49 'unknown. Supported types are: %s.', 50 $dataset_type, 51 implode(', ', array_keys($types)))); 52 } 53 54 $dataset = id(clone $types[$dataset_type]); 55 56 $functions = array(); 57 foreach ($map['functions'] as $map) { 58 $functions[] = PhabricatorChartFunction::newFromDictionary($map); 59 } 60 $dataset->setFunctions($functions); 61 62 return $dataset; 63 } 64 65 final public function getChartDisplayData( 66 PhabricatorChartDataQuery $data_query) { 67 return $this->newChartDisplayData($data_query); 68 } 69 70 abstract protected function newChartDisplayData( 71 PhabricatorChartDataQuery $data_query); 72 73 /** 74 * @param PhabricatorChartDataQuery $data_query 75 * @return PhabricatorChartDisplayData 76 */ 77 final public function getTabularDisplayData( 78 PhabricatorChartDataQuery $data_query) { 79 $results = array(); 80 81 $functions = $this->getFunctions(); 82 foreach ($functions as $function) { 83 $datapoints = $function->newDatapoints($data_query); 84 85 $refs = $function->getDataRefs(ipull($datapoints, 'x')); 86 87 foreach ($datapoints as $key => $point) { 88 $x = $point['x']; 89 90 if (isset($refs[$x])) { 91 $xrefs = $refs[$x]; 92 } else { 93 $xrefs = array(); 94 } 95 96 $datapoints[$key]['refs'] = $xrefs; 97 } 98 99 $results[] = array( 100 'data' => $datapoints, 101 ); 102 } 103 104 return id(new PhabricatorChartDisplayData()) 105 ->setWireData($results); 106 } 107 108}