PageRenderTime 768ms CodeModel.GetById 22ms RepoModel.GetById 1ms app.codeStats 0ms

/src/applications/conpherence/view/ConpherenceThreadListView.php

http://github.com/facebook/phabricator
PHP | 172 lines | 138 code | 32 blank | 2 comment | 3 complexity | 92b28ddf28f2649e2a77f5aacad07464 MD5 | raw file
Possible License(s): JSON, MPL-2.0-no-copyleft-exception, Apache-2.0, BSD-3-Clause, LGPL-2.0, MIT, LGPL-2.1, LGPL-3.0
  1. <?php
  2. final class ConpherenceThreadListView extends AphrontView {
  3. const SEE_ALL_LIMIT = 16;
  4. private $baseURI;
  5. private $threads;
  6. public function setThreads(array $threads) {
  7. assert_instances_of($threads, 'ConpherenceThread');
  8. $this->threads = $threads;
  9. return $this;
  10. }
  11. public function setBaseURI($base_uri) {
  12. $this->baseURI = $base_uri;
  13. return $this;
  14. }
  15. public function render() {
  16. require_celerity_resource('conpherence-menu-css');
  17. $menu = id(new PHUIListView())
  18. ->addClass('conpherence-menu')
  19. ->setID('conpherence-menu');
  20. $header = $this->buildHeaderItemView();
  21. $menu->addMenuItem($header);
  22. // Blank State NUX
  23. if (empty($this->threads)) {
  24. $join_item = id(new PHUIListItemView())
  25. ->setType(PHUIListItemView::TYPE_LINK)
  26. ->setHref('/conpherence/search/')
  27. ->setName(pht('Join a Room'));
  28. $menu->addMenuItem($join_item);
  29. $create_item = id(new PHUIListItemView())
  30. ->setType(PHUIListItemView::TYPE_LINK)
  31. ->setHref('/conpherence/new/')
  32. ->setWorkflow(true)
  33. ->setName(pht('Create a Room'));
  34. $menu->addMenuItem($create_item);
  35. }
  36. $rooms = $this->buildRoomItems($this->threads);
  37. foreach ($rooms as $room) {
  38. $menu->addMenuItem($room);
  39. }
  40. $menu = phutil_tag_div('phabricator-side-menu', $menu);
  41. $menu = phutil_tag_div('phui-basic-nav', $menu);
  42. return $menu;
  43. }
  44. private function renderThreadItem(
  45. ConpherenceThread $thread) {
  46. $user = $this->getUser();
  47. $data = $thread->getDisplayData($user);
  48. $dom_id = $thread->getPHID().'-nav-item';
  49. return id(new PHUIListItemView())
  50. ->setName($data['title'])
  51. ->setHref('/'.$thread->getMonogram())
  52. ->setProfileImage($data['image'])
  53. ->setCount($data['unread_count'])
  54. ->setType(PHUIListItemView::TYPE_CUSTOM)
  55. ->setID($thread->getPHID().'-nav-item')
  56. ->addSigil('conpherence-menu-click')
  57. ->setMetadata(
  58. array(
  59. 'title' => $data['title'],
  60. 'id' => $dom_id,
  61. 'threadID' => $thread->getID(),
  62. 'theme' => $data['theme'],
  63. ));
  64. }
  65. private function buildRoomItems(array $threads) {
  66. $items = array();
  67. $show_threads = $threads;
  68. $all_threads = false;
  69. if (count($threads) > self::SEE_ALL_LIMIT) {
  70. $show_threads = array_slice($threads, 0, self::SEE_ALL_LIMIT);
  71. $all_threads = true;
  72. }
  73. foreach ($show_threads as $thread) {
  74. $items[] = $this->renderThreadItem($thread);
  75. }
  76. // Send them to application search here
  77. if ($all_threads) {
  78. $items[] = id(new PHUIListItemView())
  79. ->setType(PHUIListItemView::TYPE_LINK)
  80. ->setHref('/conpherence/search/query/participant/')
  81. ->setIcon('fa-external-link')
  82. ->setName(pht('See All Joined'));
  83. }
  84. return $items;
  85. }
  86. private function buildHeaderItemView() {
  87. $rooms = phutil_tag(
  88. 'a',
  89. array(
  90. 'class' => 'room-list-href',
  91. 'href' => '/conpherence/search/',
  92. ),
  93. pht('Rooms'));
  94. $new_icon = id(new PHUIIconView())
  95. ->setIcon('fa-plus-square')
  96. ->addSigil('has-tooltip')
  97. ->setHref('/conpherence/edit/')
  98. ->setWorkflow(true)
  99. ->setMetaData(array(
  100. 'tip' => pht('New Room'),
  101. ));
  102. $search_icon = id(new PHUIIconView())
  103. ->setIcon('fa-search')
  104. ->addSigil('has-tooltip')
  105. ->setHref('/conpherence/search/')
  106. ->setMetaData(array(
  107. 'tip' => pht('Search Rooms'),
  108. ));
  109. $icons = phutil_tag(
  110. 'span',
  111. array(
  112. 'class' => 'room-list-icons',
  113. ),
  114. array(
  115. $new_icon,
  116. $search_icon,
  117. ));
  118. $new_icon = id(new PHUIIconView())
  119. ->setIcon('fa-plus-square')
  120. ->setHref('/conpherence/new/')
  121. ->setWorkflow(true);
  122. $custom = phutil_tag_div('grouped', array($rooms, $icons));
  123. $item = id(new PHUIListItemView())
  124. ->setType(PHUIListItemView::TYPE_CUSTOM)
  125. ->setName($custom)
  126. ->addClass('conpherence-room-list-header');
  127. return $item;
  128. }
  129. private function getNoRoomsMenuItem() {
  130. $message = phutil_tag(
  131. 'div',
  132. array(
  133. 'class' => 'no-conpherences-menu-item',
  134. ),
  135. pht('No Rooms'));
  136. return id(new PHUIListItemView())
  137. ->setType(PHUIListItemView::TYPE_CUSTOM)
  138. ->setName($message);
  139. }
  140. }