@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
3final class HarbormasterBuildView
4 extends AphrontView {
5
6 private $builds = array();
7
8 /**
9 * @param array<HarbormasterBuild> $builds
10 */
11 public function setBuilds(array $builds) {
12 assert_instances_of($builds, HarbormasterBuild::class);
13 $this->builds = $builds;
14 return $this;
15 }
16
17 public function getBuilds() {
18 return $this->builds;
19 }
20
21 public function render() {
22 return $this->newObjectList();
23 }
24
25 public function newObjectList() {
26 $viewer = $this->getViewer();
27 $builds = $this->getBuilds();
28
29 $buildables = mpull($builds, 'getBuildable');
30 $object_phids = mpull($buildables, 'getBuildablePHID');
31 $initiator_phids = mpull($builds, 'getInitiatorPHID');
32 $phids = array_mergev(array($initiator_phids, $object_phids));
33 $phids = array_unique(array_filter($phids));
34
35 $handles = $viewer->loadHandles($phids);
36
37 $list = new PHUIObjectItemListView();
38 foreach ($builds as $build) {
39 $id = $build->getID();
40
41 $buildable_object = $handles[$build->getBuildable()->getBuildablePHID()];
42
43 $item = id(new PHUIObjectItemView())
44 ->setViewer($viewer)
45 ->setObject($build)
46 ->setObjectName($build->getObjectName())
47 ->setHeader($build->getName())
48 ->setHref($build->getURI())
49 ->setEpoch($build->getDateCreated())
50 ->addAttribute($buildable_object->getName());
51
52 $initiator_phid = $build->getInitiatorPHID();
53 if ($initiator_phid) {
54 $initiator = $handles[$initiator_phid];
55 $item->addByline($initiator->renderLink());
56 }
57
58 $status = $build->getBuildStatus();
59
60 $status_icon = HarbormasterBuildStatus::getBuildStatusIcon($status);
61 $status_color = HarbormasterBuildStatus::getBuildStatusColor($status);
62 $status_label = HarbormasterBuildStatus::getBuildStatusName($status);
63
64 $item->setStatusIcon("{$status_icon} {$status_color}", $status_label);
65
66 $list->addItem($item);
67 }
68
69 return $list;
70 }
71
72}