@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 DiffusionSyncLogListView extends AphrontView {
4
5 private $logs;
6
7 /**
8 * @param array<PhabricatorRepositorySyncEvent> $logs
9 */
10 public function setLogs(array $logs) {
11 assert_instances_of($logs, PhabricatorRepositorySyncEvent::class);
12 $this->logs = $logs;
13 return $this;
14 }
15
16 public function render() {
17 $events = $this->logs;
18 $viewer = $this->getViewer();
19
20 $rows = array();
21 foreach ($events as $event) {
22 $repository = $event->getRepository();
23 $repository_link = phutil_tag(
24 'a',
25 array(
26 'href' => $repository->getURI(),
27 ),
28 $repository->getDisplayName());
29
30 $event_id = $event->getID();
31
32 $sync_wait = pht('%sus', new PhutilNumber($event->getSyncWait()));
33
34 $device_link = $viewer->renderHandle($event->getDevicePHID());
35 $from_device_link = $viewer->renderHandle($event->getFromDevicePHID());
36
37 $rows[] = array(
38 $event_id,
39 $repository_link,
40 $device_link,
41 $from_device_link,
42 $event->getDeviceVersion(),
43 $event->getFromDeviceVersion(),
44 $event->getResultType(),
45 $event->getResultCode(),
46 phabricator_datetime($event->getEpoch(), $viewer),
47 $sync_wait,
48 );
49 }
50
51 $table = id(new AphrontTableView($rows))
52 ->setHeaders(
53 array(
54 pht('Sync'),
55 pht('Repository'),
56 pht('Device'),
57 pht('From Device'),
58 pht('Version'),
59 pht('From Version'),
60 pht('Result'),
61 pht('Code'),
62 pht('Date'),
63 pht('Sync Wait'),
64 ))
65 ->setColumnClasses(
66 array(
67 'n',
68 '',
69 '',
70 '',
71 'n',
72 'n',
73 'wide right',
74 'n',
75 'right',
76 'n right',
77 ));
78
79 return $table;
80 }
81
82}