Remove all "FileHasObject" edge reads and writes
[phabricator.git] / src / applications / conpherence / view / ConpherenceLayoutView.php
blob3382a9ba87c7809b3317d519f33bb6c952dca2ef
1 <?php
3 final class ConpherenceLayoutView extends AphrontTagView {
5 private $thread;
6 private $baseURI;
7 private $threadView;
8 private $role;
9 private $header;
10 private $search;
11 private $messages;
12 private $replyForm;
13 private $theme = ConpherenceRoomSettings::COLOR_LIGHT;
14 private $latestTransactionID;
16 public function setMessages($messages) {
17 $this->messages = $messages;
18 return $this;
21 public function setReplyForm($reply_form) {
22 $this->replyForm = $reply_form;
23 return $this;
26 public function setHeader($header) {
27 $this->header = $header;
28 return $this;
31 public function setSearch($search) {
32 $this->search = $search;
33 return $this;
36 public function setRole($role) {
37 $this->role = $role;
38 return $this;
41 public function getThreadView() {
42 return $this->threadView;
45 public function setBaseURI($base_uri) {
46 $this->baseURI = $base_uri;
47 return $this;
50 public function setThread(ConpherenceThread $thread) {
51 $this->thread = $thread;
52 return $this;
55 public function setThreadView(ConpherenceThreadListView $thead_view) {
56 $this->threadView = $thead_view;
57 return $this;
60 public function setTheme($theme) {
61 $this->theme = $theme;
62 return $this;
65 public function setLatestTransactionID($id) {
66 $this->latestTransactionID = $id;
67 return $this;
70 protected function getTagAttributes() {
71 $classes = array();
72 $classes[] = 'conpherence-layout';
73 $classes[] = 'hide-widgets';
74 $classes[] = 'conpherence-role-'.$this->role;
75 $classes[] = ConpherenceRoomSettings::getThemeClass($this->theme);
77 return array(
78 'id' => 'conpherence-main-layout',
79 'sigil' => 'conpherence-layout',
80 'class' => implode(' ', $classes),
84 protected function getTagContent() {
85 require_celerity_resource('conpherence-menu-css');
86 require_celerity_resource('conpherence-message-pane-css');
87 require_celerity_resource('conpherence-participant-pane-css');
89 $selected_id = null;
90 $selected_thread_id = null;
91 $selected_thread_phid = null;
92 $can_edit_selected = null;
93 $nux = null;
94 if ($this->thread) {
95 $selected_id = $this->thread->getPHID().'-nav-item';
96 $selected_thread_id = $this->thread->getID();
97 $selected_thread_phid = $this->thread->getPHID();
98 $can_edit_selected = PhabricatorPolicyFilter::hasCapability(
99 $this->getUser(),
100 $this->thread,
101 PhabricatorPolicyCapability::CAN_EDIT);
102 } else {
103 $nux = $this->buildNUXView();
105 $this->initBehavior('conpherence-menu',
106 array(
107 'baseURI' => $this->baseURI,
108 'layoutID' => 'conpherence-main-layout',
109 'selectedID' => $selected_id,
110 'selectedThreadID' => $selected_thread_id,
111 'selectedThreadPHID' => $selected_thread_phid,
112 'canEditSelectedThread' => $can_edit_selected,
113 'latestTransactionID' => $this->latestTransactionID,
114 'role' => $this->role,
115 'theme' => ConpherenceRoomSettings::getThemeClass($this->theme),
116 'hasThreadList' => (bool)$this->threadView,
117 'hasThread' => (bool)$this->messages,
118 'hasWidgets' => false,
121 $this->initBehavior('conpherence-participant-pane');
123 return
124 array(
125 javelin_tag(
126 'div',
127 array(
128 'id' => 'conpherence-menu-pane',
129 'class' => 'conpherence-menu-pane phabricator-side-menu',
130 'sigil' => 'conpherence-menu-pane',
132 $this->threadView),
133 javelin_tag(
134 'div',
135 array(
136 'class' => 'conpherence-content-pane',
138 array(
139 phutil_tag(
140 'div',
141 array(
142 'class' => 'conpherence-loading-mask',
144 ''),
145 javelin_tag(
146 'div',
147 array(
148 'class' => 'conpherence-header-pane',
149 'id' => 'conpherence-header-pane',
150 'sigil' => 'conpherence-header-pane',
152 nonempty($this->header, '')),
153 javelin_tag(
154 'div',
155 array(
156 'class' => 'conpherence-no-threads',
157 'sigil' => 'conpherence-no-threads',
158 'style' => 'display: none;',
160 $nux),
161 javelin_tag(
162 'div',
163 array(
164 'class' => 'conpherence-participant-pane',
165 'id' => 'conpherence-participant-pane',
166 'sigil' => 'conpherence-participant-pane',
168 array(
169 phutil_tag(
170 'div',
171 array(
172 'class' => 'widgets-loading-mask',
174 ''),
175 javelin_tag(
176 'div',
177 array(
178 'sigil' => 'conpherence-widgets-holder',
180 ''),
182 javelin_tag(
183 'div',
184 array(
185 'class' => 'conpherence-message-pane',
186 'id' => 'conpherence-message-pane',
187 'sigil' => 'conpherence-message-pane',
189 array(
190 javelin_tag(
191 'div',
192 array(
193 'class' => 'conpherence-messages',
194 'id' => 'conpherence-messages',
195 'sigil' => 'conpherence-messages',
197 nonempty($this->messages, '')),
198 javelin_tag(
199 'div',
200 array(
201 'class' => 'conpherence-search-main',
202 'id' => 'conpherence-search-main',
203 'sigil' => 'conpherence-search-main',
205 nonempty($this->search, '')),
206 phutil_tag(
207 'div',
208 array(
209 'class' => 'messages-loading-mask',
211 ''),
212 javelin_tag(
213 'div',
214 array(
215 'id' => 'conpherence-form',
216 'sigil' => 'conpherence-form',
218 nonempty($this->replyForm, '')),
224 private function buildNUXView() {
225 $viewer = $this->getViewer();
227 $engine = id(new ConpherenceThreadSearchEngine())
228 ->setViewer($viewer);
229 $saved = $engine->buildSavedQueryFromBuiltin('all');
230 $query = $engine->buildQueryFromSavedQuery($saved);
231 $pager = $engine->newPagerForSavedQuery($saved)
232 ->setPageSize(10);
233 $results = $engine->executeQuery($query, $pager);
234 $view = $engine->renderResults($results, $saved);
236 $create_button = id(new PHUIButtonView())
237 ->setTag('a')
238 ->setText(pht('New Room'))
239 ->setHref('/conpherence/new/')
240 ->setWorkflow(true)
241 ->setColor(PHUIButtonView::GREEN);
243 if ($results) {
244 $create_button->setIcon('fa-comments');
246 $header = id(new PHUIHeaderView())
247 ->setHeader(pht('Joinable Rooms'))
248 ->addActionLink($create_button);
250 $box = id(new PHUIObjectBoxView())
251 ->setHeader($header)
252 ->setObjectList($view->getContent());
254 return $box;
255 } else {
257 $view = id(new PHUIBigInfoView())
258 ->setIcon('fa-comments')
259 ->setTitle(pht('Welcome to Conpherence'))
260 ->setDescription(
261 pht('Conpherence lets you create public or private rooms to '.
262 'communicate with others.'))
263 ->addAction($create_button);
265 return $view;