@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
at upstream/main 70 lines 1.9 kB view raw
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}