@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
2final class PHUITimelineExample extends PhabricatorUIExample {
3
4 public function getName() {
5 return pht('Timeline View');
6 }
7
8 public function getDescription() {
9 return pht(
10 'Use %s to comments and transactions.',
11 hsprintf('<code>PHUITimelineView</code>'));
12 }
13
14 public function renderExample() {
15 $request = $this->getRequest();
16 $user = $request->getUser();
17
18 $handle = id(new PhabricatorHandleQuery())
19 ->setViewer($user)
20 ->withPHIDs(array($user->getPHID()))
21 ->executeOne();
22
23 $designer = id(new PHUIBadgeMiniView())
24 ->setIcon('fa-camera-retro')
25 ->setHeader(pht('Designer'))
26 ->setQuality(PhabricatorBadgesQuality::EPIC);
27
28 $admin = id(new PHUIBadgeMiniView())
29 ->setIcon('fa-user')
30 ->setHeader(pht('Administrator'))
31 ->setQuality(PhabricatorBadgesQuality::RARE);
32
33 $events = array();
34
35 $events[] = id(new PHUITimelineEventView())
36 ->setUserHandle($handle)
37 ->setTitle(pht('A major event.'))
38 ->appendChild(pht('This is a major timeline event.'))
39 ->addBadge($designer)
40 ->addBadge($admin);
41
42 $events[] = id(new PHUITimelineEventView())
43 ->setUserHandle($handle)
44 ->setIcon('fa-heart')
45 ->setTitle(pht('A minor event.'));
46
47 $events[] = id(new PHUITimelineEventView())
48 ->setUserHandle($handle)
49 ->setIcon('fa-comment')
50 ->appendChild(pht('A major event with no title.'));
51
52 $events[] = id(new PHUITimelineEventView())
53 ->setUserHandle($handle)
54 ->setIcon('fa-star')
55 ->setTitle(pht('Another minor event.'));
56
57 $events[] = id(new PHUITimelineEventView())
58 ->setUserHandle($handle)
59 ->setTitle(pht('Major Red Event'))
60 ->setIcon('fa-heart-o')
61 ->appendChild(pht('This event is red!'))
62 ->setColor(PhabricatorTransactions::COLOR_RED)
63 ->addBadge($designer);
64
65 $events[] = id(new PHUITimelineEventView())
66 ->setUserHandle($handle)
67 ->setIcon('fa-female')
68 ->setTitle(pht('Minor Red Event'))
69 ->setColor(PhabricatorTransactions::COLOR_RED);
70
71 $events[] = id(new PHUITimelineEventView())
72 ->setIcon('fa-refresh')
73 ->setUserHandle($handle)
74 ->setTitle(pht('Minor Not-Red Event'))
75 ->setColor(PhabricatorTransactions::COLOR_GREEN);
76
77 $events[] = id(new PHUITimelineEventView())
78 ->setUserHandle($handle)
79 ->setIcon('fa-calendar-o')
80 ->setTitle(pht('Minor Red Event'))
81 ->setColor(PhabricatorTransactions::COLOR_RED);
82
83 // Pinboard!!
84 $pin1 = id(new PHUIPinboardItemView())
85 ->setViewer($user)
86 ->setHeader('user0.png')
87 ->setImageURI(celerity_get_resource_uri('/rsrc/image/people/user0.png'))
88 ->setURI(celerity_get_resource_uri('/rsrc/image/people/user0.png'))
89 ->setImageSize(280, 210);
90
91 $pin2 = id(new PHUIPinboardItemView())
92 ->setViewer($user)
93 ->setHeader('user1.png')
94 ->setImageURI(celerity_get_resource_uri('/rsrc/image/people/user1.png'))
95 ->setURI(celerity_get_resource_uri('/rsrc/image/people/user1.png'))
96 ->setImageSize(280, 210);
97
98 $pin3 = id(new PHUIPinboardItemView())
99 ->setViewer($user)
100 ->setHeader('user2.png')
101 ->setImageURI(celerity_get_resource_uri('/rsrc/image/people/user2.png'))
102 ->setURI(celerity_get_resource_uri('/rsrc/image/people/user1.png'))
103 ->setImageSize(280, 210);
104
105 $events[] = id(new PHUITimelineEventView())
106 ->setUserHandle($handle)
107 ->setIcon('fa-camera-retro')
108 ->setTitle(pht('Pinboard Image Event'))
109 ->addPinboardItem($pin1)
110 ->addPinboardItem($pin2)
111 ->addPinboardItem($pin3);
112
113 $events[] = id(new PHUITimelineEventView())
114 ->setUserHandle($handle)
115 ->setIcon('fa-circle-o')
116 ->setTitle(pht('Major Green Disagreement Action'))
117 ->appendChild(pht('This event is green!'))
118 ->setColor(PhabricatorTransactions::COLOR_GREEN);
119
120 $events[] = id(new PHUITimelineEventView())
121 ->setUserHandle($handle)
122 ->setIcon('fa-tag')
123 ->setTitle(str_repeat(pht('Long Text Title').' ', 64))
124 ->appendChild(str_repeat(pht('Long Text Body').' ', 64))
125 ->setColor(PhabricatorTransactions::COLOR_ORANGE);
126
127 $colors = array(
128 PhabricatorTransactions::COLOR_RED,
129 PhabricatorTransactions::COLOR_ORANGE,
130 PhabricatorTransactions::COLOR_YELLOW,
131 PhabricatorTransactions::COLOR_GREEN,
132 PhabricatorTransactions::COLOR_SKY,
133 PhabricatorTransactions::COLOR_BLUE,
134 PhabricatorTransactions::COLOR_INDIGO,
135 PhabricatorTransactions::COLOR_VIOLET,
136 PhabricatorTransactions::COLOR_GREY,
137 PhabricatorTransactions::COLOR_BLACK,
138 );
139
140 $events[] = id(new PHUITimelineEventView())
141 ->setUserHandle($handle)
142 ->setTitle(pht('Colorless'))
143 ->setIcon('fa-lock');
144
145 foreach ($colors as $color) {
146 $events[] = id(new PHUITimelineEventView())
147 ->setUserHandle($handle)
148 ->setTitle(pht("Color '%s'", $color))
149 ->setIcon('fa-paw')
150 ->setColor($color);
151 }
152
153 $vhandle = $handle->renderLink();
154
155 $group_event = id(new PHUITimelineEventView())
156 ->setUserHandle($handle)
157 ->setTitle(pht('%s went to the store.', $vhandle));
158
159 $group_event->addEventToGroup(
160 id(new PHUITimelineEventView())
161 ->setUserHandle($handle)
162 ->setTitle(pht('%s bought an apple.', $vhandle))
163 ->setColor('green')
164 ->setIcon('fa-apple'));
165
166 $group_event->addEventToGroup(
167 id(new PHUITimelineEventView())
168 ->setUserHandle($handle)
169 ->setTitle(pht('%s bought a banana.', $vhandle))
170 ->setColor('yellow')
171 ->setIcon('fa-check'));
172
173 $group_event->addEventToGroup(
174 id(new PHUITimelineEventView())
175 ->setUserHandle($handle)
176 ->setTitle(pht('%s bought a cherry.', $vhandle))
177 ->setColor('red')
178 ->setIcon('fa-check'));
179
180 $group_event->addEventToGroup(
181 id(new PHUITimelineEventView())
182 ->setUserHandle($handle)
183 ->setTitle(pht('%s paid for his goods.', $vhandle)));
184
185 $group_event->addEventToGroup(
186 id(new PHUITimelineEventView())
187 ->setUserHandle($handle)
188 ->setTitle(pht('%s returned home.', $vhandle))
189 ->setIcon('fa-home')
190 ->setColor('blue'));
191
192 $group_event->addEventToGroup(
193 id(new PHUITimelineEventView())
194 ->setUserHandle($handle)
195 ->setTitle(pht('%s related on his adventures.', $vhandle))
196 ->appendChild(
197 pht(
198 'Today, I went to the store. I bought an apple. I bought a '.
199 'banana. I bought a cherry. I paid for my goods, then I returned '.
200 'home.')));
201
202 $events[] = $group_event;
203
204 $anchor = 0;
205 foreach ($events as $group) {
206 foreach ($group->getEventGroup() as $event) {
207 $event->setViewer($user);
208 $event->setDateCreated(time() + ($anchor * 60 * 8));
209 $event->setAnchor(++$anchor);
210 }
211 }
212
213 $timeline = new PHUITimelineView();
214 $timeline->setViewer($user);
215 foreach ($events as $event) {
216 $timeline->addEvent($event);
217 }
218
219 return $timeline;
220 }
221}