|
@@ -153,7 +153,7 @@ class member_talkControl extends mbMemberControl
|
|
}
|
|
}
|
|
|
|
|
|
$result = $this->roomsg($msgid,$room);
|
|
$result = $this->roomsg($msgid,$room);
|
|
- $msgs = $this->format_message($result['uids'],$result['msgs'],$type);
|
|
|
|
|
|
+ $msgs = $this->format_message($result['uids'],$result['msgs'],$type,0);
|
|
|
|
|
|
}
|
|
}
|
|
elseif($type == 'chatwo')
|
|
elseif($type == 'chatwo')
|
|
@@ -163,7 +163,7 @@ class member_talkControl extends mbMemberControl
|
|
return self::outerr(errcode::ErrParamter);
|
|
return self::outerr(errcode::ErrParamter);
|
|
}
|
|
}
|
|
$result = $this->chatwomsg($msgid,$user);
|
|
$result = $this->chatwomsg($msgid,$user);
|
|
- $msgs = $this->format_message($result['uids'],$result['msgs'],$type);
|
|
|
|
|
|
+ $msgs = $this->format_message($result['uids'],$result['msgs'],$type,$user);
|
|
|
|
|
|
}
|
|
}
|
|
else {
|
|
else {
|
|
@@ -172,7 +172,7 @@ class member_talkControl extends mbMemberControl
|
|
return self::outsuccess(["msgs"=>$msgs]);
|
|
return self::outsuccess(["msgs"=>$msgs]);
|
|
}
|
|
}
|
|
|
|
|
|
- private function format_message($uids,$msgs,$type)
|
|
|
|
|
|
+ private function format_message($uids,$msgs,$type,$other)
|
|
{
|
|
{
|
|
$members = [];
|
|
$members = [];
|
|
|
|
|
|
@@ -205,19 +205,29 @@ class member_talkControl extends mbMemberControl
|
|
$val["act"] = $type;
|
|
$val["act"] = $type;
|
|
$val["op"] = "message";
|
|
$val["op"] = "message";
|
|
$val["msgtype"] = "message";
|
|
$val["msgtype"] = "message";
|
|
- $val["room"] = intval($msg['room_id']);
|
|
|
|
|
|
+
|
|
|
|
+ $from = intval($msg['member_id']);
|
|
|
|
+ $member = $members[$from];
|
|
|
|
|
|
if($type == 'room') {
|
|
if($type == 'room') {
|
|
- $from = $members[intval($msg['member_id'])];
|
|
|
|
|
|
+ $val["room"] = intval($msg['room_id']);
|
|
}
|
|
}
|
|
- elseif($type == 'chatwo') {
|
|
|
|
- $from = $members[intval($msg['from_user'])];
|
|
|
|
|
|
+ elseif($type == 'chatwo')
|
|
|
|
+ {
|
|
|
|
+ $val['from'] = $from;
|
|
|
|
+
|
|
|
|
+ if($from == session_helper::memberid()) {
|
|
|
|
+ $val['to'] = $other;
|
|
|
|
+ }
|
|
|
|
+ else {
|
|
|
|
+ $val['to'] = session_helper::memberid();
|
|
|
|
+ }
|
|
}
|
|
}
|
|
else {
|
|
else {
|
|
- $from = [];
|
|
|
|
|
|
+
|
|
}
|
|
}
|
|
|
|
|
|
- $val['content'] = ['msgid' => intval($msg['msg_id']), 'from' => $from,'type' => $msgtype,'content' => $msg['msg'],'send_time' => intval($msg['add_time'])];
|
|
|
|
|
|
+ $val['content'] = ['msgid' => intval($msg['msg_id']), 'from' => $member,'type' => $msgtype,'content' => $msg['msg'],'send_time' => intval($msg['add_time'])];
|
|
|
|
|
|
$result[] = $val;
|
|
$result[] = $val;
|
|
}
|
|
}
|
|
@@ -228,7 +238,7 @@ class member_talkControl extends mbMemberControl
|
|
private function roomsg($msgid,$room)
|
|
private function roomsg($msgid,$room)
|
|
{
|
|
{
|
|
$mod_room = Model('room');
|
|
$mod_room = Model('room');
|
|
- $msgs = $mod_room->getRoomMsgList(['room_id' => $room,'msg_id' => ['lt',$msgid]], $this->page_size);
|
|
|
|
|
|
+ $msgs = $mod_room->getRoomsgList(['room_id' => $room,'msg_id' => ['lt',$msgid],'msg_type' => 0], $this->page_size);
|
|
|
|
|
|
$uids = [];
|
|
$uids = [];
|
|
foreach ($msgs as $msg) {
|
|
foreach ($msgs as $msg) {
|
|
@@ -240,15 +250,12 @@ class member_talkControl extends mbMemberControl
|
|
private function chatwomsg($msgid,$user)
|
|
private function chatwomsg($msgid,$user)
|
|
{
|
|
{
|
|
$mod_room = Model('room');
|
|
$mod_room = Model('room');
|
|
- $user_1 = session_helper::memberid();
|
|
|
|
- $user_2 = $user;
|
|
|
|
|
|
+ $left = session_helper::memberid();
|
|
|
|
+ $right = $user;
|
|
|
|
|
|
- $cond['from_user&to_user&msg_id'] = ['_multi' => true,$user_1,$user_2,['lt',$msgid]];
|
|
|
|
- $cond['to_user&from_user&msg_id'] = ['_multi' => true,$user_1,$user_2,['lt',$msgid]];
|
|
|
|
- $cond['_op'] = 'OR';
|
|
|
|
-
|
|
|
|
- $msgs = $mod_room->getChatwoMsgList($cond, $this->page_size);
|
|
|
|
- return ['uids' => [$user_1,$user_2],'msgs' => $msgs];
|
|
|
|
|
|
+ $chat_id = $mod_room->findChatid($left,$right);
|
|
|
|
+ $msgs = $mod_room->getRoomsgList(['room_id' => $chat_id,'msg_id' => ['lt',$msgid],'msg_type' => 1], $this->page_size);
|
|
|
|
+ return ['uids' => [$left,$right],'msgs' => $msgs];
|
|
}
|
|
}
|
|
|
|
|
|
public function create_roomOp()
|
|
public function create_roomOp()
|
|
@@ -261,14 +268,10 @@ class member_talkControl extends mbMemberControl
|
|
public function inviteOp()
|
|
public function inviteOp()
|
|
{
|
|
{
|
|
$room = intval($_GET['room']);
|
|
$room = intval($_GET['room']);
|
|
- $users = explode(',', trim($_GET['invitees']));
|
|
|
|
- if(empty($users) || $room <= 0) {
|
|
|
|
|
|
+ $invitees = explode(',', trim($_GET['invitees']));
|
|
|
|
+ if(empty($invitees) || $room <= 0) {
|
|
return self::outerr(errcode::ErrParamter);
|
|
return self::outerr(errcode::ErrParamter);
|
|
}
|
|
}
|
|
- $invitees = [];
|
|
|
|
- foreach ($users as $user) {
|
|
|
|
- $invitees[] = intval($user);
|
|
|
|
- }
|
|
|
|
|
|
|
|
$result = room\factory_client::instance()->invite($room,session_helper::memberid(),$invitees);
|
|
$result = room\factory_client::instance()->invite($room,session_helper::memberid(),$invitees);
|
|
if($result === false) {
|
|
if($result === false) {
|
|
@@ -296,24 +299,100 @@ class member_talkControl extends mbMemberControl
|
|
}
|
|
}
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
+ private function chat_rooms($user,&$roomids)
|
|
|
|
+ {
|
|
|
|
+ $mod_room = Model('room');
|
|
|
|
+ $items = $mod_room->getPartRooms(['member_id' => $user,'state'=>0],'room_id');
|
|
|
|
+
|
|
|
|
+ if(empty($items)) return false;
|
|
|
|
+
|
|
|
|
+ $rooms = [];
|
|
|
|
+ foreach ($items as $room) {
|
|
|
|
+ $rooms[] = intval($room['room_id']);
|
|
|
|
+ }
|
|
|
|
+// $items = $mod_room->getRooms(['type' => proto_type::room_chat, 'room_id'=>['in',$rooms]]);
|
|
|
|
+ $items = $mod_room->getRooms(['room_id'=>['in',$rooms]]);
|
|
|
|
+ if(empty($items)) return false;
|
|
|
|
+
|
|
|
|
+ $result = [];
|
|
|
|
+ $roomids = [];
|
|
|
|
+ foreach ($items as $item) {
|
|
|
|
+ $roomids[] = intval($item['room_id']);
|
|
|
|
+ $info = new room\base_info($item);
|
|
|
|
+ $result[] = $info->format();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return $result;
|
|
|
|
+ }
|
|
public function talksOp()
|
|
public function talksOp()
|
|
{
|
|
{
|
|
$user = session_helper::memberid();
|
|
$user = session_helper::memberid();
|
|
- $post = $this->init_talk($_POST['post_data']);
|
|
|
|
- $chats = $this->talk_chatwos($user,$post['local_chats']);
|
|
|
|
- $rooms = $this->talk_rooms($user,$post['local_rooms']);
|
|
|
|
|
|
+ $params = $this->talk_params($_POST['content']);
|
|
|
|
+ $room_descs = $this->chat_rooms($user,$roomids);
|
|
|
|
+ $room_msgs = Model('room')->getLastRoomMsgs($roomids);
|
|
|
|
+ $room_list = $this->room_list($roomids,$room_msgs,$params['rooms']);
|
|
|
|
|
|
- return self::outsuccess(["rooms"=>$rooms,"chats"=>$chats]);
|
|
|
|
|
|
+ return self::outsuccess(["room_list" => $room_list,"room_descs" => $room_descs,'room_msgs' => $room_msgs]);
|
|
}
|
|
}
|
|
|
|
|
|
- private function init_talk($json)
|
|
|
|
|
|
+ private function room_list($rooms,$room_msgs, $input)
|
|
{
|
|
{
|
|
- if(empty(trim($json))) {
|
|
|
|
- return ["rooms" => [],"chatwos" => []];
|
|
|
|
|
|
+ $r_msg = [];
|
|
|
|
+ foreach ($room_msgs as $msg) {
|
|
|
|
+ $room = intval($msg['room_id']);
|
|
|
|
+ $msg_id = intval($msg['msg_id']);
|
|
|
|
+ $r_msg[$room] = $msg_id;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $pairs = [];
|
|
|
|
+ foreach ($rooms as $room)
|
|
|
|
+ {
|
|
|
|
+ if(array_key_exists($room,$r_msg)) {
|
|
|
|
+ $pairs[$room] = $r_msg[$room];
|
|
|
|
+ } else {
|
|
|
|
+ $pairs[$room] = 0;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if($input === false)
|
|
|
|
+ {
|
|
|
|
+ $result = [];
|
|
|
|
+ foreach ($pairs as $key => $msgid) {
|
|
|
|
+ $result[] = ['room' => $key,'count' => 0,'msgid' => $msgid];
|
|
|
|
+ }
|
|
|
|
+ return $result;
|
|
}
|
|
}
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ $mod_room = Model('room');
|
|
|
|
+ $result = [];
|
|
|
|
+ foreach ($pairs as $key => $msgid)
|
|
|
|
+ {
|
|
|
|
+ if(array_key_exists($key,$input))
|
|
|
|
+ {
|
|
|
|
+ if($input[$key] < $msgid) {
|
|
|
|
+ $count = $not_read = $mod_room->getRoomMsgsCount(['room_id' => $key,"msg_id"=>[['gt',$input[$key]],['elt',$msgid]]]);
|
|
|
|
+ } else {
|
|
|
|
+ $count = 0;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ else {
|
|
|
|
+ $count = $not_read = $mod_room->getRoomMsgsCount(['room_id' => $key,"msg_id"=>[['gt',0],['elt',$msgid]]]);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $result[] = ['room' => $key,'count' => intval($count),'msgid' => $msgid];
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return $result;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private function talk_params($json)
|
|
|
|
+ {
|
|
|
|
+ if(empty(trim($json))) return ["rooms" => false,"chatwos" => false];
|
|
|
|
|
|
$input = json_decode($json);
|
|
$input = json_decode($json);
|
|
- if($input == false) return ["rooms" => [],"chatwos" => []];
|
|
|
|
|
|
+ if($input == false) return ["rooms" => false,"chatwos" => false];
|
|
|
|
|
|
$rooms = [];
|
|
$rooms = [];
|
|
$chats = [];
|
|
$chats = [];
|
|
@@ -344,30 +423,6 @@ class member_talkControl extends mbMemberControl
|
|
return ["rooms"=>$rooms,"chatwos"=>$chats];
|
|
return ["rooms"=>$rooms,"chatwos"=>$chats];
|
|
}
|
|
}
|
|
|
|
|
|
- private function talk_rooms($user,$local_last)
|
|
|
|
- {
|
|
|
|
- $mod_room = Model('room');
|
|
|
|
-
|
|
|
|
- $join_rooms = $mod_room->getJoinedRooms(['member_id'=>$user,'state'=>0]);
|
|
|
|
- $roomids = [];
|
|
|
|
- if(!empty($join_rooms)) {
|
|
|
|
- foreach ($join_rooms as $room){$roomids[] = $room['room_id'];}
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- $chat_rooms = $mod_room->getRooms(['type'=>proto_type::room_chat,'room_id'=>['in',$roomids]]);
|
|
|
|
- $roomids = [];
|
|
|
|
- if(!empty($chat_rooms)){
|
|
|
|
- foreach ($chat_rooms as $room){$roomids[] = $room['room_id'];}
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- $last_msgs = $mod_room->getLastRoomMsgs($roomids);
|
|
|
|
-
|
|
|
|
- $ret = $this->talk_format($last_msgs,'room',$user,$local_last);
|
|
|
|
-
|
|
|
|
- return $ret;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
private function talk_chatwos($user,$local_last)
|
|
private function talk_chatwos($user,$local_last)
|
|
{
|
|
{
|
|
$mod_room = Model('room');
|
|
$mod_room = Model('room');
|