@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<?php
2
3abstract class PhabricatorHigherOrderChartFunction
4 extends PhabricatorChartFunction {
5
6 public function getDomain() {
7 $domains = array();
8 foreach ($this->getFunctionArguments() as $function) {
9 $domains[] = $function->getDomain();
10 }
11
12 return PhabricatorChartInterval::newFromIntervalList($domains);
13 }
14
15 public function newInputValues(PhabricatorChartDataQuery $query) {
16 $map = array();
17 foreach ($this->getFunctionArguments() as $function) {
18 $xv = $function->newInputValues($query);
19 if ($xv !== null) {
20 foreach ($xv as $x) {
21 $map[$x] = true;
22 }
23 }
24 }
25
26 if (!$map) {
27 return null;
28 }
29
30 ksort($map);
31
32 return array_keys($map);
33 }
34
35 public function getDataRefs(array $xv) {
36 $refs = array();
37
38 foreach ($this->getFunctionArguments() as $function) {
39 $function_refs = $function->getDataRefs($xv);
40
41 $function_refs = array_select_keys($function_refs, $xv);
42 if (!$function_refs) {
43 continue;
44 }
45
46 foreach ($function_refs as $x => $ref_list) {
47 if (!isset($refs[$x])) {
48 $refs[$x] = array();
49 }
50 foreach ($ref_list as $ref) {
51 $refs[$x][] = $ref;
52 }
53 }
54 }
55
56 return $refs;
57 }
58
59 public function loadRefs(array $refs) {
60 $results = array();
61
62 foreach ($this->getFunctionArguments() as $function) {
63 $results += $function->loadRefs($refs);
64 }
65
66 return $results;
67 }
68
69}