Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/phabricator
Path: blob/master/src/applications/conpherence/view/ConpherenceThreadListView.php
12256 views
1
<?php
2
3
final class ConpherenceThreadListView extends AphrontView {
4
5
const SEE_ALL_LIMIT = 16;
6
7
private $baseURI;
8
private $threads;
9
10
public function setThreads(array $threads) {
11
assert_instances_of($threads, 'ConpherenceThread');
12
$this->threads = $threads;
13
return $this;
14
}
15
16
public function setBaseURI($base_uri) {
17
$this->baseURI = $base_uri;
18
return $this;
19
}
20
21
public function render() {
22
require_celerity_resource('conpherence-menu-css');
23
24
$menu = id(new PHUIListView())
25
->addClass('conpherence-menu')
26
->setID('conpherence-menu');
27
28
$header = $this->buildHeaderItemView();
29
$menu->addMenuItem($header);
30
31
// Blank State NUX
32
if (empty($this->threads)) {
33
$join_item = id(new PHUIListItemView())
34
->setType(PHUIListItemView::TYPE_LINK)
35
->setHref('/conpherence/search/')
36
->setName(pht('Join a Room'));
37
$menu->addMenuItem($join_item);
38
39
$create_item = id(new PHUIListItemView())
40
->setType(PHUIListItemView::TYPE_LINK)
41
->setHref('/conpherence/new/')
42
->setWorkflow(true)
43
->setName(pht('Create a Room'));
44
$menu->addMenuItem($create_item);
45
}
46
47
$rooms = $this->buildRoomItems($this->threads);
48
foreach ($rooms as $room) {
49
$menu->addMenuItem($room);
50
}
51
52
$menu = phutil_tag_div('phabricator-side-menu', $menu);
53
$menu = phutil_tag_div('phui-basic-nav', $menu);
54
55
return $menu;
56
}
57
58
private function renderThreadItem(
59
ConpherenceThread $thread) {
60
61
$user = $this->getUser();
62
$data = $thread->getDisplayData($user);
63
$dom_id = $thread->getPHID().'-nav-item';
64
65
return id(new PHUIListItemView())
66
->setName($data['title'])
67
->setHref('/'.$thread->getMonogram())
68
->setProfileImage($data['image'])
69
->setCount($data['unread_count'])
70
->setType(PHUIListItemView::TYPE_CUSTOM)
71
->setID($thread->getPHID().'-nav-item')
72
->addSigil('conpherence-menu-click')
73
->setMetadata(
74
array(
75
'title' => $data['title'],
76
'id' => $dom_id,
77
'threadID' => $thread->getID(),
78
'theme' => $data['theme'],
79
));
80
}
81
82
private function buildRoomItems(array $threads) {
83
84
$items = array();
85
$show_threads = $threads;
86
$all_threads = false;
87
if (count($threads) > self::SEE_ALL_LIMIT) {
88
$show_threads = array_slice($threads, 0, self::SEE_ALL_LIMIT);
89
$all_threads = true;
90
}
91
92
foreach ($show_threads as $thread) {
93
$items[] = $this->renderThreadItem($thread);
94
}
95
96
// Send them to application search here
97
if ($all_threads) {
98
$items[] = id(new PHUIListItemView())
99
->setType(PHUIListItemView::TYPE_LINK)
100
->setHref('/conpherence/search/query/participant/')
101
->setIcon('fa-external-link')
102
->setName(pht('See All Joined'));
103
}
104
105
return $items;
106
}
107
108
private function buildHeaderItemView() {
109
$rooms = phutil_tag(
110
'a',
111
array(
112
'class' => 'room-list-href',
113
'href' => '/conpherence/search/',
114
),
115
pht('Rooms'));
116
117
$new_icon = id(new PHUIIconView())
118
->setIcon('fa-plus-square')
119
->addSigil('has-tooltip')
120
->setHref('/conpherence/edit/')
121
->setWorkflow(true)
122
->setMetaData(array(
123
'tip' => pht('New Room'),
124
));
125
126
$search_icon = id(new PHUIIconView())
127
->setIcon('fa-search')
128
->addSigil('has-tooltip')
129
->setHref('/conpherence/search/')
130
->setMetaData(array(
131
'tip' => pht('Search Rooms'),
132
));
133
134
$icons = phutil_tag(
135
'span',
136
array(
137
'class' => 'room-list-icons',
138
),
139
array(
140
$new_icon,
141
$search_icon,
142
));
143
144
$new_icon = id(new PHUIIconView())
145
->setIcon('fa-plus-square')
146
->setHref('/conpherence/new/')
147
->setWorkflow(true);
148
149
$custom = phutil_tag_div('grouped', array($rooms, $icons));
150
151
$item = id(new PHUIListItemView())
152
->setType(PHUIListItemView::TYPE_CUSTOM)
153
->setName($custom)
154
->addClass('conpherence-room-list-header');
155
return $item;
156
}
157
158
private function getNoRoomsMenuItem() {
159
$message = phutil_tag(
160
'div',
161
array(
162
'class' => 'no-conpherences-menu-item',
163
),
164
pht('No Rooms'));
165
166
return id(new PHUIListItemView())
167
->setType(PHUIListItemView::TYPE_CUSTOM)
168
->setName($message);
169
}
170
171
172
}
173
174