@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 MultimeterController extends PhabricatorController {
4
5 private $dimensions = array();
6
7 protected function loadDimensions(array $rows) {
8 if (!$rows) {
9 return;
10 }
11
12 $map = array(
13 'eventLabelID' => new MultimeterLabel(),
14 'eventViewerID' => new MultimeterViewer(),
15 'eventHostID' => new MultimeterHost(),
16 'eventContextID' => new MultimeterContext(),
17 );
18
19 $ids = array();
20 foreach ($map as $key => $object) {
21 foreach ($rows as $row) {
22 $ids[$key][] = $row[$key];
23 }
24 }
25
26 foreach ($ids as $key => $list) {
27 $object = $map[$key];
28 if (empty($this->dimensions[$key])) {
29 $this->dimensions[$key] = array();
30 }
31 $this->dimensions[$key] += $object->loadAllWhere(
32 'id IN (%Ld)',
33 $list);
34 }
35 }
36
37 protected function getLabelDimension($id) {
38 if (empty($this->dimensions['eventLabelID'][$id])) {
39 return $this->newMissingDimension(new MultimeterLabel(), $id);
40 }
41 return $this->dimensions['eventLabelID'][$id];
42 }
43
44 protected function getViewerDimension($id) {
45 if (empty($this->dimensions['eventViewerID'][$id])) {
46 return $this->newMissingDimension(new MultimeterViewer(), $id);
47 }
48 return $this->dimensions['eventViewerID'][$id];
49 }
50
51 protected function getHostDimension($id) {
52 if (empty($this->dimensions['eventHostID'][$id])) {
53 return $this->newMissingDimension(new MultimeterHost(), $id);
54 }
55 return $this->dimensions['eventHostID'][$id];
56 }
57
58 protected function getContextDimension($id) {
59 if (empty($this->dimensions['eventContextID'][$id])) {
60 return $this->newMissingDimension(new MultimeterContext(), $id);
61 }
62 return $this->dimensions['eventContextID'][$id];
63 }
64
65 private function newMissingDimension(MultimeterDimension $dim, $id) {
66 $dim->setName('<missing:'.$id.'>');
67 return $dim;
68 }
69
70}