room_helper.php 5.6 KB

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