room_helper.php 7.1 KB

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