|
@@ -280,4 +280,226 @@ class TestTalk extends PHPUnit_Framework_TestCase
|
|
|
return $items;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+
|
|
|
+ public function testRoom_list(){
|
|
|
+ $_SESSION['is_login'] =1;
|
|
|
+ $_SESSION['member_id'] = 39623;
|
|
|
+
|
|
|
+ $user = 39623;
|
|
|
+
|
|
|
+ $case1 = $this->room_case1($user);
|
|
|
+
|
|
|
+ $case2 = $this->room_case2($user);
|
|
|
+
|
|
|
+ $case3 = $this->room_case3($user);
|
|
|
+ echo 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ private function room_case2($user)
|
|
|
+ {
|
|
|
+ $mod_room = Model("room");
|
|
|
+ $chats_rooms = $mod_room->getChatsRoom($user);
|
|
|
+
|
|
|
+ $rooms = [];
|
|
|
+ $uids_total = [];
|
|
|
+ if(!empty($chats_rooms))
|
|
|
+ {
|
|
|
+ foreach ($chats_rooms as $room)
|
|
|
+ {
|
|
|
+ $uids = [];
|
|
|
+ $paticipates = $mod_room->getRoomMember($room['room_id']);
|
|
|
+ if(!empty($paticipates))
|
|
|
+ {
|
|
|
+ foreach ($paticipates as $one)
|
|
|
+ {
|
|
|
+ $uids[] = $one['member_id'];
|
|
|
+ }
|
|
|
+
|
|
|
+ $uids_total = array_merge($uids_total,$uids);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ $rooms[] = [
|
|
|
+ "room_id"=>$room['room_id'],
|
|
|
+ "room_name"=>$room['room_name'],
|
|
|
+ "avatar"=>"",
|
|
|
+ "room_members"=>$uids
|
|
|
+ ];
|
|
|
+ }
|
|
|
+
|
|
|
+ $members = [];
|
|
|
+ if(!empty($uids_total))
|
|
|
+ {
|
|
|
+ $uids_total = array_unique($uids_total);
|
|
|
+ $items = Model('member')->getMemberList(['member_id' => ['in',$uids_total]]);
|
|
|
+
|
|
|
+ foreach ($items as $item){
|
|
|
+ try
|
|
|
+ {
|
|
|
+ $info = new member_info($item);
|
|
|
+ $members[$item['member_id']] = $info->filter();
|
|
|
+ }
|
|
|
+ catch (Exception $ex) {
|
|
|
+ Log::record($ex->getMessage(),Log::ERR);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ if(!empty($members))
|
|
|
+ {
|
|
|
+ foreach ($rooms as $index => $room){
|
|
|
+ $room_members = [];
|
|
|
+ if(!empty($room['room_members']))
|
|
|
+ {
|
|
|
+ foreach ($room['room_members'] as $uid)
|
|
|
+ {
|
|
|
+ if(isset($members[$uid])){
|
|
|
+ $room_members[] = $members[$uid];
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ $rooms[$index]['room_members'] = $room_members;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return $rooms;
|
|
|
+ }
|
|
|
+
|
|
|
+ private function room_case1($user)
|
|
|
+ {
|
|
|
+ $mod_room = Model('room');
|
|
|
+ $chat_rooms = $mod_room->getJoinedChatRoom($user);
|
|
|
+
|
|
|
+ $rooms = [];
|
|
|
+ if(!empty($chat_rooms))
|
|
|
+ {
|
|
|
+ foreach ($chat_rooms as $item)
|
|
|
+ {
|
|
|
+ $rooms[] = $this->room_info($item);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return $rooms;
|
|
|
+ }
|
|
|
+
|
|
|
+ private function room_info($room)
|
|
|
+ {
|
|
|
+ $mod_room = Model("room");
|
|
|
+ $paticipates = $mod_room->getRoomMember($room['room_id']);
|
|
|
+
|
|
|
+ $uids = [];
|
|
|
+ if(!empty($paticipates))
|
|
|
+ {
|
|
|
+ foreach ($paticipates as $one){
|
|
|
+ $uids[] = $one['member_id'];
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if(empty($uids)){
|
|
|
+ $items = [];
|
|
|
+ }else{
|
|
|
+ $items = Model('member')->getMemberList(['member_id' => ['in',$uids]]);
|
|
|
+ }
|
|
|
+
|
|
|
+ $members = [];
|
|
|
+ foreach ($items as $item){
|
|
|
+ try
|
|
|
+ {
|
|
|
+ $info = new member_info($item);
|
|
|
+ $members[] = $info->filter();
|
|
|
+ }
|
|
|
+ catch (Exception $ex) {
|
|
|
+ Log::record($ex->getMessage(),Log::ERR);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ $ret = [
|
|
|
+ "room_id"=>$room['room_id'],
|
|
|
+ "room_name"=>$room["room_name"],
|
|
|
+ "avatar"=> "", //头像和member查询维度太高
|
|
|
+ "room_members"=>$members,
|
|
|
+ ];
|
|
|
+ return $ret;
|
|
|
+ }
|
|
|
+
|
|
|
+ private function room_case3($user){
|
|
|
+ $mod_room = Model("room");
|
|
|
+ $chats_rooms = $mod_room->getChatsRoom($user);
|
|
|
+
|
|
|
+ $rooms = [];
|
|
|
+ if(!empty($chats_rooms))
|
|
|
+ {
|
|
|
+
|
|
|
+ $roomids = [];
|
|
|
+ foreach ($chats_rooms as $room)
|
|
|
+ {
|
|
|
+ $rooms[] = [
|
|
|
+ "room_id"=>$room['room_id'],
|
|
|
+ "room_name"=>$room['room_name'],
|
|
|
+ "avatar"=>"",
|
|
|
+ "room_members"=>[]
|
|
|
+ ];
|
|
|
+ $roomids[] = intval($room['room_id']);
|
|
|
+ }
|
|
|
+
|
|
|
+ $room_members = [];
|
|
|
+ $uids_total = [];
|
|
|
+ $roomTouser = $mod_room->table('room_msg')
|
|
|
+ ->field('room_id,group_concat(DISTINCT member_id) as uidstr')
|
|
|
+ ->where(['room_id'=>['in',$roomids]])
|
|
|
+ ->group('room_id')
|
|
|
+ ->select();
|
|
|
+ if(!empty($roomTouser))
|
|
|
+ {
|
|
|
+ foreach ($roomTouser as $index => $item)
|
|
|
+ {
|
|
|
+ $uids = explode(',',$item['uidstr']);
|
|
|
+ $uids_total = array_merge($uids_total,$uids);
|
|
|
+ $room_members[$item['room_id']] = $uids;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ $members = [];
|
|
|
+ if(!empty($uids_total))
|
|
|
+ {
|
|
|
+ $uids_total = array_unique($uids_total);
|
|
|
+ $items = Model('member')->getMemberList(['member_id' => ['in',$uids_total]]);
|
|
|
+
|
|
|
+ foreach ($items as $item){
|
|
|
+ try
|
|
|
+ {
|
|
|
+ $info = new member_info($item);
|
|
|
+ $members[$item['member_id']] = $info->filter();
|
|
|
+ }
|
|
|
+ catch (Exception $ex) {
|
|
|
+ Log::record($ex->getMessage(),Log::ERR);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if(!empty($members))
|
|
|
+ {
|
|
|
+ foreach ($rooms as $index => $room)
|
|
|
+ {
|
|
|
+ $room_id = $room['room_id'];
|
|
|
+ if(isset($room_members[$room_id]))
|
|
|
+ {
|
|
|
+ $user_list = [];
|
|
|
+ foreach ($room_members[$room_id] as $i=>$uid)
|
|
|
+ {
|
|
|
+ if(isset($members[$uid])) $user_list[$i] = $members[$uid];
|
|
|
+ }
|
|
|
+ $rooms[$index]['room_members'] = $user_list;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return $rooms;
|
|
|
+ }
|
|
|
+
|
|
|
}
|