Path: blob/master/src/applications/conpherence/view/ConpherenceThreadListView.php
12256 views
<?php12final class ConpherenceThreadListView extends AphrontView {34const SEE_ALL_LIMIT = 16;56private $baseURI;7private $threads;89public function setThreads(array $threads) {10assert_instances_of($threads, 'ConpherenceThread');11$this->threads = $threads;12return $this;13}1415public function setBaseURI($base_uri) {16$this->baseURI = $base_uri;17return $this;18}1920public function render() {21require_celerity_resource('conpherence-menu-css');2223$menu = id(new PHUIListView())24->addClass('conpherence-menu')25->setID('conpherence-menu');2627$header = $this->buildHeaderItemView();28$menu->addMenuItem($header);2930// Blank State NUX31if (empty($this->threads)) {32$join_item = id(new PHUIListItemView())33->setType(PHUIListItemView::TYPE_LINK)34->setHref('/conpherence/search/')35->setName(pht('Join a Room'));36$menu->addMenuItem($join_item);3738$create_item = id(new PHUIListItemView())39->setType(PHUIListItemView::TYPE_LINK)40->setHref('/conpherence/new/')41->setWorkflow(true)42->setName(pht('Create a Room'));43$menu->addMenuItem($create_item);44}4546$rooms = $this->buildRoomItems($this->threads);47foreach ($rooms as $room) {48$menu->addMenuItem($room);49}5051$menu = phutil_tag_div('phabricator-side-menu', $menu);52$menu = phutil_tag_div('phui-basic-nav', $menu);5354return $menu;55}5657private function renderThreadItem(58ConpherenceThread $thread) {5960$user = $this->getUser();61$data = $thread->getDisplayData($user);62$dom_id = $thread->getPHID().'-nav-item';6364return id(new PHUIListItemView())65->setName($data['title'])66->setHref('/'.$thread->getMonogram())67->setProfileImage($data['image'])68->setCount($data['unread_count'])69->setType(PHUIListItemView::TYPE_CUSTOM)70->setID($thread->getPHID().'-nav-item')71->addSigil('conpherence-menu-click')72->setMetadata(73array(74'title' => $data['title'],75'id' => $dom_id,76'threadID' => $thread->getID(),77'theme' => $data['theme'],78));79}8081private function buildRoomItems(array $threads) {8283$items = array();84$show_threads = $threads;85$all_threads = false;86if (count($threads) > self::SEE_ALL_LIMIT) {87$show_threads = array_slice($threads, 0, self::SEE_ALL_LIMIT);88$all_threads = true;89}9091foreach ($show_threads as $thread) {92$items[] = $this->renderThreadItem($thread);93}9495// Send them to application search here96if ($all_threads) {97$items[] = id(new PHUIListItemView())98->setType(PHUIListItemView::TYPE_LINK)99->setHref('/conpherence/search/query/participant/')100->setIcon('fa-external-link')101->setName(pht('See All Joined'));102}103104return $items;105}106107private function buildHeaderItemView() {108$rooms = phutil_tag(109'a',110array(111'class' => 'room-list-href',112'href' => '/conpherence/search/',113),114pht('Rooms'));115116$new_icon = id(new PHUIIconView())117->setIcon('fa-plus-square')118->addSigil('has-tooltip')119->setHref('/conpherence/edit/')120->setWorkflow(true)121->setMetaData(array(122'tip' => pht('New Room'),123));124125$search_icon = id(new PHUIIconView())126->setIcon('fa-search')127->addSigil('has-tooltip')128->setHref('/conpherence/search/')129->setMetaData(array(130'tip' => pht('Search Rooms'),131));132133$icons = phutil_tag(134'span',135array(136'class' => 'room-list-icons',137),138array(139$new_icon,140$search_icon,141));142143$new_icon = id(new PHUIIconView())144->setIcon('fa-plus-square')145->setHref('/conpherence/new/')146->setWorkflow(true);147148$custom = phutil_tag_div('grouped', array($rooms, $icons));149150$item = id(new PHUIListItemView())151->setType(PHUIListItemView::TYPE_CUSTOM)152->setName($custom)153->addClass('conpherence-room-list-header');154return $item;155}156157private function getNoRoomsMenuItem() {158$message = phutil_tag(159'div',160array(161'class' => 'no-conpherences-menu-item',162),163pht('No Rooms'));164165return id(new PHUIListItemView())166->setType(PHUIListItemView::TYPE_CUSTOM)167->setName($message);168}169170171}172173174