room_helper.php 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: stanley-king
  5. * Date: 2018/1/17
  6. * Time: 下午9:12
  7. */
  8. require_once(BASE_ROOT_PATH . '/helper/search/tcp_client.php');
  9. require_once(BASE_ROOT_PATH . '/helper/room/access_client.php');
  10. require_once(BASE_ROOT_PATH . '/helper/room/proto_type.php');
  11. require_once(BASE_ROOT_PATH . '/helper/room/room_info.php');
  12. require_once(BASE_ROOT_PATH . '/helper/room/msg_builder.php');
  13. require_once(BASE_ROOT_PATH . '/helper/room/base_room.php');
  14. require_once(BASE_ROOT_PATH . '/helper/room/bargain_room.php');
  15. require_once(BASE_ROOT_PATH . '/helper/room/shake_room.php');
  16. require_once(BASE_ROOT_PATH . '/helper/room/chatwo.php');
  17. require_once(BASE_ROOT_PATH . '/helper/room/factory_client.php');
  18. require_once(BASE_ROOT_PATH . '/helper/room/chat_room.php');
  19. require_once(BASE_ROOT_PATH . '/helper/room/room_client.php');
  20. require_once(BASE_ROOT_PATH . '/helper/room/bargain_manager.php');
  21. require_once(BASE_ROOT_PATH . '/helper/room/room_parts.php');
  22. require_once(BASE_ROOT_PATH . '/helper/room/room_avatar.php');
  23. require_once(BASE_ROOT_PATH . '/helper/room/pusher.php');
  24. class room_helper
  25. {
  26. const room_name_usercount = 5;
  27. public static function OnUpdateRoom($room)
  28. {
  29. if($room < 0) return false;
  30. $mod_room = Model('room');
  31. $item = $mod_room->getRoom($room);
  32. if(empty($item)) return false;
  33. $parts = new room\room_parts($room);
  34. $partinfos = $parts->top_users(20);
  35. $users = $parts->users();
  36. $uids = [];
  37. foreach ($partinfos as $part) {
  38. $uids[] = $part->member_id();
  39. }
  40. $updata = [];
  41. $room_info = new room\room_info($item);
  42. if(!$room_info->has_avatar())
  43. {
  44. $avatar_maker = new room\room_avatar($room);
  45. $avatars = self::avatarts($uids);
  46. if(!empty($avatars))
  47. {
  48. $tmp_avatar = $avatar_maker->make($avatars);
  49. if($tmp_avatar != false) {
  50. $now = time();
  51. $url = "{$tmp_avatar}?tm={$now}";
  52. $updata['tmp_avatar'] = $url;
  53. }
  54. }
  55. }
  56. if(!$room_info->has_name())
  57. {
  58. $names = self::nickname($uids);
  59. if(!empty($names)) {
  60. $tmp_name = implode('、', $names);
  61. $updata['tmp_name'] = $tmp_name;
  62. }
  63. }
  64. $updata['users'] = $users;
  65. if(!empty($updata)) {
  66. $mod_room->editRoom(['room_id' => $room],$updata);
  67. room\factory_client::instance()->change($room);
  68. }
  69. }
  70. public static function room($roomid)
  71. {
  72. if($roomid <= 0) return false;
  73. $mod_room = Model('room');
  74. $items = $mod_room->getRooms(['room_id' => $roomid]);
  75. foreach ($items as $item) {
  76. return new room\room_info($item);
  77. }
  78. return false;
  79. }
  80. public static function message($msgid)
  81. {
  82. if($msgid <= 0) return false;
  83. $mod_room = Model('room');
  84. $items = $mod_room->getMssage(['msg_id' => $msgid]);
  85. foreach ($items as $item) {
  86. return $item;
  87. }
  88. return false;
  89. }
  90. public static function avatarts($uids)
  91. {
  92. if(empty($uids)) return false;
  93. $result = [];
  94. $uids = array_unique($uids);
  95. $items = Model('member')->getMemberList(['member_id' => ['in',$uids]]);
  96. foreach ($items as $item)
  97. {
  98. try
  99. {
  100. $info = new member_info($item);
  101. if($info->hasAvatar()) {
  102. $avatar = $info->avatar();
  103. Log::record("avatar_url:{$avatar}",Log::DEBUG);
  104. $result[] = $avatar;
  105. }
  106. }
  107. catch (Exception $ex) {
  108. Log::record($ex->getMessage(),Log::ERR);
  109. }
  110. }
  111. return $result;
  112. }
  113. public static function nickname($uids)
  114. {
  115. $result = [];
  116. if(empty($uids)) return $result;
  117. $uids = array_unique($uids);
  118. $items = Model('member')->getMemberList(['member_id' => ['in',$uids]]);
  119. $i = 0;
  120. foreach ($items as $item)
  121. {
  122. try
  123. {
  124. $info = new member_info($item);
  125. if($info->hasNickname()) {
  126. $result[] = $info->nickname();
  127. $i++;
  128. if($i > self::room_name_usercount) break;
  129. }
  130. }
  131. catch (Exception $ex) {
  132. Log::record($ex->getMessage(),Log::ERR);
  133. }
  134. }
  135. return $result;
  136. }
  137. public static function user_rooms($user,$order='room_id asc',$count = 0)
  138. {
  139. $mod_room = Model('room');
  140. $items = $mod_room->getRoomParts(['member_id' => $user,'state' => 0],'room_id');
  141. $roomids = [];
  142. foreach ($items as $item) {
  143. $roomids[] = intval($item['room_id']);
  144. }
  145. $result = [];
  146. if(empty($roomids)) return $result;
  147. $items = $mod_room->getRooms(['type'=>\room\proto_type::room_chat,'room_id' => ['in',$roomids]],'*',$order,$count);
  148. foreach ($items as $item) {
  149. $room = new room\room_info($item);
  150. $result[] = $room->format();
  151. }
  152. return $result;
  153. }
  154. public static function common_rooms($left,$right)
  155. {
  156. $mod_room = Model('room');
  157. $items1 = $mod_room->getRoomParts(['member_id' => $left,'state' => 0],'room_id');
  158. $items2 = $mod_room->getRoomParts(['member_id' => $right,'state' => 0],'room_id');
  159. $roomids = [];
  160. foreach ($items1 as $item) {
  161. $roomids[] = intval($item['room_id']);
  162. }
  163. foreach ($items2 as $item) {
  164. $roomids[] = intval($item['room_id']);
  165. }
  166. if(empty($roomids)){
  167. return [];
  168. }else{
  169. return array_unique($roomids);
  170. }
  171. }
  172. public static function page_rooms($cond, $order = 'room_id desc', $limit = 5 , $page = false, &$mobile_page = [])
  173. {
  174. $result = [];
  175. $mod_room = Model('room');
  176. $items = $mod_room->getRooms($cond,'*',$order,$limit,$page);
  177. foreach ($items as $idx => $item) {
  178. $room = new room\room_info($item);
  179. $info = $room->format();
  180. $page = intval($_GET['curpage']) > 0 ? intval($_GET['curpage']) : 1;
  181. $pos = ($page - 1) * $limit + $idx + 1;
  182. $info['rank'] = $pos;
  183. $result[] = $info;
  184. }
  185. if($page){
  186. $mobile_page = mobile_page($mod_room->gettotalpage());;
  187. }else{
  188. $mobile_page = [];
  189. }
  190. return $result;
  191. }
  192. public static function onSpendBonus($roomid,$amount,$userid)
  193. {
  194. if($roomid > 0 && intval($amount * 100 + 0.5) > 0 && $userid > 0)
  195. {
  196. $mod_room = Model('room');
  197. $mod_room->editRoom(['room_id' => $roomid],['shared_bonus' => ['exp',"shared_bonus - {$amount}"]]);
  198. $content = ['user' => session_helper::memberid(),'amount' => $amount];
  199. room\factory_client::instance()->notice_room($roomid,0,room\proto_type::msg_stype_spend,$content);
  200. }
  201. }
  202. }