mAccaddr = $config['access_addr']; } public function authonOp() { $result = []; $result['addr'] = $this->mAccaddr; $result['token'] = room\author::sign_native(session_helper::memberid()); $result['user'] = session_helper::memberid(); return self::outsuccess($result); } public function talksOp() { $talks_helper = new room\talks_helper(); $input = base64_decode($_POST['cmp_table']); $result = $talks_helper->talks(session_helper::memberid(),$input); return self::outsuccess($result); } public function friendsOp() { $talks_helper = new room\talks_helper(); $friends = $talks_helper->friends(session_helper::memberid()); $members = member_info::get_members($friends); usort($members,['member_info','alpha_compare']); $uids = []; $mem_desc = []; foreach ($members as $member) { if($member['member_id'] == session_helper::memberid()) continue; $uids[] = $member['member_id']; $mem_desc[] = $member; } return self::outsuccess(['friends' => $uids, 'count' => count($uids), 'mem_desc' => $mem_desc, 'mobile_page' => mobile_page(1)]); } public function msgsOp() { $msgid = intval($_GET['msgid']); $type = $_GET['type']; if($msgid == 0 || empty($type)) { return self::outerr(errcode::ErrParamter); } if($msgid < 0) { $msgid = self::max_msgid; } $user_count = 0; if($type == 'room') { $room_id = intval($_GET['room']); if($room_id <= 0) { return self::outerr(errcode::ErrParamter); } $result = $this->roomsg($msgid,$room_id); $msgs = $this->format_message($result['uids'],$result['msgs'],$type,0,$room_id); $parts = new room\room_parts($room_id); $user_count = $parts->users(); } elseif($type == 'chatwo') { $user = intval($_GET['user']); if($user <= 0) { return self::outerr(errcode::ErrParamter); } $result = $this->chatwomsg($msgid,$user); $msgs = $this->format_message($result['uids'],$result['msgs'],$type,$user); } else { $msgs = []; Log::record(__METHOD__ . " : invalid type={$type}.",Log::ERR); } return self::outsuccess(["msgs" => $msgs,'users' => $user_count]); } private function format_message($uids,$msgs,$type,$other=0,$room_id=0) { $members = []; if(!empty($uids)) { $room_members = Model('room')->getRoomParts(["room_id"=>$room_id],'member_id,member_nick',false); $nicknames = []; if(!empty($room)) { foreach ($room_members as $room_member){ $nicknames[$room_member['member_id']] = $room_member['member_nick']; } } $items = Model('member')->getMemberList(['member_id' => ['in',$uids]]); foreach ($items as $item) { try { $info = new member_info($item); $val = []; $mid = $info->member_id(); $nickname = empty($nicknames[$mid]) ? $info->nickname() : $nicknames[$mid]; $val['avatar'] = $info->avatar(); $val['nickname'] = $nickname; $val['userid'] = $mid; $members[$mid] = $val; } catch (Exception $ex) { Log::record($ex->getMessage(),Log::ERR); } } } $result = []; if(!empty($msgs)) { foreach ($msgs as $msg) { $msgtype = proto_type::from_msgtype(intval($msg['type'])); if($msgtype == false) continue; $val = []; $val["act"] = $type; $val["op"] = "message"; $val["msgtype"] = "message"; $from = intval($msg['member_id']); $member = $members[$from]; if($type == 'room') { $val["room"] = intval($msg['room_id']); } elseif($type == 'chatwo') { $val['from'] = $from; if($from == session_helper::memberid()) { $val['to'] = $other; } else { $val['to'] = session_helper::memberid(); } } else { } $val['content'] = ['msgid' => intval($msg['msg_id']), 'from' => $member,'type' => $msgtype,'content' => $msg['msg'],'send_time' => intval($msg['add_time'])]; $result[] = $val; } } return $result; } private function roomsg($msgid,$room_id) { $user = session_helper::memberid(); $mod_room = Model('room'); $room = $mod_room->getRoomParts(["room_id"=>$room_id, "member_id"=>$user, "state" => 0],"hide_msg",1); if(!empty($room)){ $hide_msg = intval($room[0]["hide_msg"]); }else{ return ['uids' => [],'msgs' => []]; } $msgs = $mod_room->getRoomsgList(['room_id' => $room_id,'msg_id' => [['gt',$hide_msg],['lt',$msgid]],'msg_type' => 0], $this->page_size); $uids = []; if($msgs) { usort($msgs,['room\sorter','msgid_asc']); foreach ($msgs as $msg) { $uids[] = intval($msg['member_id']); } $uids = array_unique($uids); } return ['uids' => $uids,'msgs' => $msgs]; } private function chatwomsg($msgid,$user) { $mod_room = Model('room'); $left = session_helper::memberid(); $right = $user; $chat_id = $mod_room->findChatid($left,$right); if($chat_id == false) { return ['uids' => [$left,$right],'msgs' => []]; } $msgs = $mod_room->getRoomsgList(['room_id' => $chat_id,'msg_id' => ['lt',$msgid],'msg_type' => 1], $this->page_size); if($msgs){ usort($msgs,['room\sorter','msgid_asc']); } return ['uids' => [$left,$right],'msgs' => $msgs]; } public function create_roomOp() { $creator = session_helper::memberid(); $result = room\factory_client::instance()->create_chat($creator); if($result == false) { return self::outerr(errcode::ErrRoom,"建群失败"); } $room_id = $result['room']; if(!empty($_GET['invitees'])) { $invitees = explode(',', trim($_GET['invitees'])); if(!empty($invitees) && $room_id > 0) { $_invitees = array_values(array_diff($invitees,[$creator])); $ret = room\factory_client::instance()->invite($room_id,$creator,$_invitees); if($ret == false) return self::outerr(errcode::ErrRoom,"邀请失败"); if(in_array($creator,$invitees)){ $userNum = count($invitees); }else{ $userNum = count($invitees) + 1; } return self::outsuccess(["room_id"=>$room_id,"room_name" => "群聊"]); }else { return self::outerr(errcode::ErrRoom,"建群失败"); } } else { return self::outsuccess(["room_id"=>$room_id,"room_name"=>"群聊"]); } } ////////////面对面建群//////////////////////////////////////////////////////////////////////////////////////////////// private function face_param(&$err) { $code = trim($_GET['code']); $loc = $this->parase_location($_GET['coordinate']); if(empty($code) || strlen($code) != 4 || !is_numeric($code)) { $err = ['code' => errcode::ErrParamter,'msg' => "请输入4位密码"]; return false; } if($loc == false) { $err = ['code' => errcode::ErrParamter,'msg' => "需要地理位置信息才能面对面建群"]; return false; } $geo = new geohash(); $hash = $geo->encode($loc['lat'],$loc['lng']); $hash = substr($hash, 0, 7); Log::record("loc={$_GET['coordinate']},code = {$code} hash={$hash}",Log::DEBUG); return ['code' => $code,'lochash' => $hash]; } public function find_faceOp() { $params = $this->face_param($err); if($params == false) { return self::outerr($err['code'],$err['msg']); } $code = $params['code']; $lochash = $params['lochash']; $face = new room\face_room($code,$lochash); $uids = $face->find(session_helper::memberid()); if($uids === false) { return self::outerr(errcode::ErrRoomTwoFace,"面对面建群失败"); } if(!empty($uids)) { $members = member_info::get_members($uids); } else { $members = []; } return self::outsuccess(['members' => $members]); } public function join_faceOp() { $params = $this->face_param($err); if($params == false) { return self::outerr($err['code'],$err['msg']); } $code = $params['code']; $lochash = $params['lochash']; $face = new room\face_room($code,$lochash); $room_id = $face->join(session_helper::memberid()); if($room_id === false) { return self::outerr(errcode::ErrRoomTwoFace,"面对面建群失败"); } $ret = room\factory_client::instance()->invite($room_id,$this->room_creator($room_id),[session_helper::memberid()]); if($ret === false) { return self::outerr(errcode::ErrRoom,"进群失败"); } else { $mod_room = Model('room'); $room = $mod_room->getRoom($room_id); $info = new room\room_info($room); $result['name'] = $info->name(); return self::outsuccess(['result' => $ret]); } } public function leave_faceOp() { $params = $this->face_param($err); if($params == false) { return self::outerr($err['code'],$err['msg']); } $code = $params['code']; $lochash = $params['lochash']; $face = new room\face_room($code,$lochash); $face->leave(session_helper::memberid()); return self::outsuccess(['result' => "true"]); } private function parase_location($location) { if(empty($location)) return false; $pos = explode(',',$location); if(count($pos) == 2) { return ['lat' => $pos[0],'lng' => $pos[1]]; } else { return false; } } ///////////群内成员管理////////////////////////////////////////////////////////////////////////////////////////////// private function room_creator($room_id) { $mod_room = Model('room'); $params = $mod_room->getRoom($room_id); $rinfo = new room\room_info($params); return $rinfo->creator(); } public function room_usersOp() { $room_id = intval($_GET['room_id']); if($room_id <= 0) { return self::outerr(errcode::ErrParamter); } $parts = new room\room_parts($room_id); $uids = $parts->allparts([session_helper::memberid()]); $members = member_info::get_members($uids); return self::outsuccess([ 'friends' => $uids, 'count' => count($uids), "mem_desc" => $members, 'mobile_page' => mobile_page(1)]); } public function inviteOp() { $room_id = intval($_GET['room_id']); $invitees = explode(',', trim($_GET['invitees'])); if(empty($invitees) || $room_id <= 0) { return self::outerr(errcode::ErrParamter); } $inviter = session_helper::memberid(); $_invitees = array_values(array_diff($invitees,[$inviter])); $result = room\factory_client::instance()->invite($room_id,$inviter,$_invitees); if($result === false) { return self::outerr(errcode::ErrRoom,"邀请失败"); } else { $members = member_info::get_members($result['newusers']); $result['invitees'] = $members; return self::outsuccess($result); } } public function leaveOp() { $room_id = intval($_GET['room_id']); if($room_id <= 0) { return self::outerr(errcode::ErrParamter); } $result = room\factory_client::instance()->leave($room_id,session_helper::memberid()); if($result === false) { Log::record("leave nooooo ".session_helper::memberid()); return self::outerr(errcode::ErrRoom,"退出失败"); } else { Log::record("leave ok ".session_helper::memberid()); return self::outsuccess($result); } } public function kickoutOp() { $room_id = intval($_GET['room_id']); $kicks = explode(',', trim($_GET['users'])); if($room_id <= 0 || count($kicks) <= 0 ) { return self::outerr(errcode::ErrParamter); } $item = Model('room')->getRoom($room_id); if(empty($item)) { return self::outerr(errcode::ErrParamter,"此群不存在"); } $info = new room\room_info($item); if($info->owner() != session_helper::memberid()) { return self::outerr(errcode::ErrTalk,"只有群主可以踢人"); } $result = room\factory_client::instance()->kickout($room_id,session_helper::memberid(),$kicks); if($result === false) { return self::outerr(errcode::ErrRoom); } else { room\pusher::instance()->kick_room($room_id,session_helper::memberid()); return self::outsuccess($result); } } ///////////群详情设置///////////////////////////////////////////////////////////////////////////////////////////////// /** * 修改群名称和群描述 room_id room_name room_desc */ public function room_editOp() { $room_id = intval($_GET['room_id']); if(empty($room_id)) { return self::outerr(errcode::ErrParamter); } $updata = []; if(!empty($_GET['room_name'])){ $updata["room_name"] = trim($_GET['room_name']); } if(!empty($_GET['room_desc'])){ $updata["room_desc"] = trim($_GET['room_desc']); if(mb_strlen($updata["room_desc"],'utf-8') > 180 ) return self::outerr(errcode::ErrParamter,"群介绍过长"); } if(empty($updata)) { return self::outerr(errcode::ErrParamter); } $ret = Model('room')->editRoom(['room_id'=>$room_id],$updata); if($ret) { room\factory_client::instance()->change($room_id); return self::outsuccess(null); } else { return self::outerr(errcode::ErrDB); } } /** * 设置群内昵称 room_id member_nick */ public function change_membernickOp() { $room_id = intval($_GET['room_id']); if($room_id <= 0) { return self::outerr(errcode::ErrParamter); } $member_nick = trim($_GET['member_nick']); $len = mb_strlen($member_nick,'utf-8'); if( $len <= 0 || $len > 40 ) { return self::outerr(errcode::ErrParamter,"群备注名称不得为空或过长"); } $user = intval($_GET['user']); $self = session_helper::memberid(); $mod_room = Model('room'); if($user <= 0) { $ret = $mod_room->editRoomParts(['room_id' => $room_id,'member_id' => $self],['member_nick' => $member_nick]); } else { $item = $mod_room->getRoom($room_id); if(empty($item)) { return self::outerr(errcode::ErrParamter); } $info = new room\room_info($item); if($info->owner() != $self) { return self::outerr(errcode::ErrTalk,"只有管理员可以修改他人的备注"); } $ret = $mod_room->editRoomParts(['room_id' => $room_id,'member_id' => $user],['member_nick' => $member_nick]); } if($ret) { room\factory_client::instance()->change($room_id); return self::outsuccess(null); } else { return self::outerr(errcode::ErrDB); } } /** * 设置群头像 room_id file_path */ public function change_room_avatarOp() { $room_id = intval($_POST['room_id']); $upload_dir = 'room/avatars/'; $uploader = new room\uploader(); $res = $uploader->upfile($upload_dir,$info); if($res == false) { return self::outerr(errcode::ErrUploadFileFailed); } $file_name = $info['msg']; $file_path = '/data/upload/'.$upload_dir . $file_name.'?tm='.time(); $ret = Model("room")->editRoom(['room_id' => $room_id],['avatar' => $file_path]); if ($ret) { room\factory_client::instance()->change($room_id); return self::outsuccess(['avatar' => $file_path]); } else { return self::outerr(errcode::ErrDB); } } /** * 设置群头像2 room_id file_path */ public function change_room_avatar2Op() { $room_id = intval($_POST['room_id']); $file_path = trim($_POST['file_path']); if(empty($room_id) || empty($file_path)){ return self::outerr(errcode::ErrUploadFileFailed); } $ret = Model("room")->editRoom(['room_id' => $room_id],['avatar' => $file_path]); if ($ret) { room\factory_client::instance()->change($room_id); return self::outsuccess(['avatar' => $file_path]); } else { return self::outerr(errcode::ErrDB); } } /** * 转让管理员 * 将 room_id 转让给 to_user */ public function change_room_ownerOp() { $room_id = intval($_GET['room_id']); $to_user = explode(',', trim($_GET['room_owner'])); $to_user = $to_user[0]; $from_user = session_helper::memberid(); $mod_room = Model("room"); $item = $mod_room->getRoomParts(["room_id"=>$room_id,"member_id"=>$from_user,"state"=>0]); if(empty($item)) { return self::outerr(errcode::ErrMemberNotExist,"不是群主不可移交管理员"); } $item = $mod_room->getRoomParts(["room_id"=>$room_id,"member_id"=>$to_user,"state"=>0]); if(empty($item)) { return self::outerr(errcode::ErrMemberNotExist,"用户已不在群中"); } $member = new member_info($to_user); $info = $member->filter(); $name = $info['nickname']; /// $trans = new trans_wapper(null,__METHOD__); $exchange = $this->exchage_room_owner($room_id,$from_user,$to_user); $editres = $mod_room->editRoom(['room_id' => $room_id],['room_owner' => $to_user,"owner_name"=>$name]); if($exchange && $editres){ $trans->commit(); return self::outsuccess("移交成功"); }else{ $trans->rollback(); return self::outerr(errcode::ErrTalk,"移交失败"); } } private function exchage_room_owner($room_id,$from_user,$to_user) { $mod_room = Model("room"); $update1 = $mod_room->editRoomParts(['room_id' => $room_id,'member_id' => $from_user],['type' => 0]); $update2 = $mod_room->editRoomParts(['room_id' => $room_id,'member_id' => $to_user] ,['type' => 1]); return $update1 && $update2; } /** * 设置群公告 room_id room_notice */ public function change_room_noticeOp() { $room_id = intval($_GET['room_id']); if($room_id <= 0) { return self::outerr(errcode::ErrParamter); } $room_notice = trim($_GET['room_notice']); $len = mb_strlen($room_notice,'utf-8'); if( $len <= 0 || $len > 450 ) { return self::outerr(errcode::ErrParamter,"公告过长或为空"); } $mod_room = Model('room'); $item = $mod_room->getRoom($room_id); if(empty($item)) { return self::outerr(errcode::ErrParamter,"错误的群信息"); } $user = session_helper::memberid(); $info = new room\room_info($item); if($info->owner() != $user) { return self::outerr(errcode::ErrTalk,"只有管理员可以修改群公告"); } $ret = Model("room")->editRoom(['room_id' => $room_id],['notice' => $room_notice]); if($ret) { $content = "群公告@all\r\n{$room_notice}"; room\factory_client::instance()->notice_room($room_id,$user,proto_type::msg_stype_text,$content); return self::outsuccess(null); } else { return self::outerr(errcode::ErrDB); } } /** * 设置群密码 room_id passwd use_pass(开启或关闭) */ public function change_passwdOp(){ $room_id = intval($_GET['room_id']); $use_pass = intval($_GET['use_pass']); if($room_id <= 0) { return self::outerr(errcode::ErrParamter); } if($use_pass) { $passwd = strtolower(trim($_GET['passwd'])); $len = strlen($passwd); if($len <> 4) { return self::outerr(errcode::ErrParamter,"密码设置错误"); } }else{ $passwd = ""; } $mod_room = Model('room'); $item = $mod_room->getRoom($room_id); if(empty($item)) { return self::outerr(errcode::ErrParamter,"错误的群信息"); } $user = session_helper::memberid(); $info = new room\room_info($item); if($info->owner() != $user) { return self::outerr(errcode::ErrTalk,"只有管理员可以修改群密码"); } $ret = Model("room")->editRoom(['room_id' => $room_id],['passwd' => $passwd]); if($ret) { return self::outsuccess(null); } else { return self::outerr(errcode::ErrDB); } } /** * 清空聊天记录 room_id */ public function hide_msgOp() { $room_id = intval($_GET['room_id']); $user = session_helper::memberid(); if($room_id < 0) { return self::outerr(errcode::ErrParamter); } $mod_room = Model('room'); $hide_msg = 0; $cond = ["room_id"=>$room_id, "member_id"=>$user, "state" => 0]; $item = $mod_room->getRoomParts($cond,"hide_msg",1); if(!empty($item)) { $hide_msg = $item[0]['hide_msg']; } $cur_msg = 0; $item = $mod_room->getRoomsgList(["msg_type"=>0,"room_id"=>$room_id],1,'msg_id'); if(!empty($item)) { $cur_msg = $item[0]['msg_id']; } if($cur_msg <= $hide_msg) { return self::outerr(errcode::ErrTalk,"无历史记录可清除"); } $update = $mod_room->editRoomParts($cond,["hide_msg"=>$cur_msg]); if($update) { return self::outsuccess(null,"清除成功"); } else { return self::outerr(errcode::ErrTalk,"清除失败"); } } ///////////////////群运动/////////////////////////////////////////////////////////////////////////////////// /** * 群运动主页 */ public function steps_homeOp(){ return self::outsuccess(null,'talk/room_steps'); } public function room_stepsOp() { try { $room_id = intval($_GET['room_id']); $mod_room = Model('room'); $userid = session_helper::memberid(); $room = $mod_room->getRoomParts(["room_id"=>$room_id,"member_id"=>$userid,"state"=>0],'room_id,member_id,steps',1); if(empty($room)) return self::outerr(errcode::ErrParamter,"错误的群信息"); $user_steps = $this->user_steps($room[0]); $steps = []; $hasmore = false; $per_page = 20; $items = $mod_room->getRoomParts(["room_id"=>$room_id,"state"=>0],'member_id,steps,bonus',$per_page,"steps desc,FIELD(`member_id`,{$userid}) desc"); if(!empty($items)) { foreach ($items as $k => $sport) { $info = new member_info($sport['member_id']); $member = $info->filter(); $steps[$k]['member_id'] = $sport['member_id']; $steps[$k]['steps'] = $sport['steps']; $steps[$k]['avatar'] = $member['avatar']; $steps[$k]['is_man'] = $member['is_man']; $steps[$k]['nickname'] = util::ellipsis($member['nickname']); $steps[$k]['bonus'] = $sport['bonus']; } if(count($steps) >= $per_page) $hasmore = true; } return self::outsuccess(["user"=>$user_steps,"steps"=>$steps,"mobile_page"=>["hasmore"=>$hasmore,"curpage"=>$this->cur_page]]); } catch (Exception $ex) { return self::outerr(errcode::ErrParamter); } } private function user_steps($room_parti) { $info = new member_info($room_parti['member_id']); $member = $info->filter(); $user_steps["member_id"] = $member['member_id']; $user_steps['avatar'] = $member['avatar']; $user_steps['is_man'] = $member['is_man']; $user_steps['nickname'] = $member['nickname']; $user_steps["steps"] = $room_parti['steps']; $ranks = Model('room')->getRoomParts(["room_id"=>$room_parti['room_id'],"state"=>0,"steps"=>['gt',$room_parti['steps']]],'member_id',false,'steps desc'); $user_steps["ranking"] = count($ranks)+1; return $user_steps; } /** * 福利社个人运动详情页 */ public function steps_detailOp() { $mid = session_helper::memberid(); $info = new member_info($mid); $member = $info->filter(); $today = strtotime(date('Y-m-d',time())); $first = $today - 86400 * 6; $mod_room = Model('room'); $items = $mod_room->roomSteps(["member_id"=>$mid,"date_stamp"=>[['gt',$first-1],['lt',$today+1]]],'*',7); $steps_info = []; if(!empty($items)){ foreach ($items as $item){ $steps_info[$item['date_stamp']] = $item; } } $charts = $this->steps_charts($first,$steps_info); $room_steps = []; $rooms = $mod_room->getRoomParts(["member_id"=>$mid,"state"=>0],'room_id',false); if(!empty($rooms)) { foreach ($rooms as $room) { $params = $mod_room->getRoom($room['room_id']); $rinfo = new room\room_info($params); if($rinfo->type() !== proto_type::room_chat) continue; $room['avatar'] = $rinfo->avatar(); $name = $rinfo->name(); $room['name'] = util::ellipsis($name); $room['steps'] = $mod_room->totalRoomSteps($room['room_id']); $room_steps[] = $room; } } return self::outsuccess([ "background"=>RESOURCE_SITE_URL. "/mobile/talk/images/cover.png", "avatar"=>$member['avatar'], "nickname"=>$member['nickname'], "charts"=>$charts, "room_steps"=>$room_steps, "donate_rate"=>self::donate_rate], 'talk/steps_detail'); } private function steps_charts($first_date,$steps_info) { $charts = []; for ($i=0; $i<7; $i++ ) { $key = $first_date + 86400 * $i; if($i==0){ $month = date('n月',$key); $charts["month"] = $month; } if($i==6){ $month = date('n月',$key); $charts["month"] = $charts["month"] == $month ? $month : $charts["month"].'-'.$month; } $charts["date"][] = date('d',$key); if(isset($steps_info[$key])){ $charts["steps"][] = intval($steps_info[$key]['steps']); }else{ $charts["steps"][] = 0; } } return $charts; } /** * 捐赠步数 */ public function donate_stepsOp() { $room_id = intval($_GET['room_id']); $steps = intval($_GET['steps']); if($room_id <= 0 || $steps <= 0 ) { return self::outerr(errcode::ErrParamter,"错误的参数"); } $user = session_helper::memberid(); $today = strtotime(date('Y-m-d',time())); $mod_room = Model('room'); $room = $mod_room->getRoomParts(['room_id' => $room_id,"member_id" => $user,"state" => 0],'*',1); if(empty($room)) { return self::outerr(errcode::ErrParamter,"您不在此群中"); } $item = $mod_room->findSteps(['room_id' => $room_id,"member_id" => $user,'date_stamp' => $today]); if(!empty($item)) { $mod_room->editSteps(['steps_id' => $item['steps_id']],['steps' => ['exp',"steps + {$steps}"]]); } else { $mod_room->addSteps($room_id,$user,$steps,$today); } $amount = bcdiv($steps,self::donate_rate,2); $mod_room->editRoomParts(['room_id' => $room_id,"member_id" => $user,"state" => 0],["steps" => ['exp',"steps + {$steps}"],"bonus" => ['exp',"bonus + {$amount}"]]); $mod_room->editRoom(['room_id'=>$room_id],['steps_count' => ['exp',"steps_count + {$steps}"], 'shared_bonus' => ['exp',"shared_bonus + {$amount}"]]); $content = ['user' => session_helper::memberid(),'steps' => $steps,'amount' => $amount]; room\factory_client::instance()->notice_room($room_id,0,proto_type::msg_stype_donate,$content); return self::outsuccess(['amount'=>$amount]); } ///////////////群认证//////////////////////////////////////////////////////////////////////////////////////// public function room_certificateOp() { $type = intval($_GET['ctype']); $room_id = intval($_GET['talk_id']); $cert = Model('room')->findCert(['room_id'=>$room_id,"ctype"=>$type]); if(empty($cert)) $cert = []; if($type == 1){ return self::outsuccess(['room_id'=>$room_id,"cert"=>$cert],'talk/school_certs'); }elseif($type == 2){ return self::outsuccess(['room_id'=>$room_id,"cert"=>$cert],'talk/enterprise_certs'); }else{ return; } } public function commit_certsOp() { $cmobile = intval($_POST['cmobile']); $code = trim($_POST['code']); $validator = new Validator(); $validator->setValidate(Validator::verify_mobile($cmobile)); $validator->setValidate(Validator::verify_smscode($code)); $err = $validator->validate(); if ($err != '') { return self::outerr(errcode::ErrInputParam, $err); } $ret = sms_helper::check_code(Sms::register_code,$code,$cmobile); if(is_array($ret)) { return self::outerr($ret['code'], $ret['msg']); } $ctype = intval($_POST['ctype']); $room_id = intval($_POST['room_id']); $short_name = trim($_POST['short_name']); $full_name = trim($_POST['full_name']); $cmail = trim($_POST['cmail']); if(!preg_match('/^([.a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\\.[a-zA-Z0-9_-])+/',$cmail)) { return self::outerr(errcode::ErrInputParam, "请输入正确的邮箱地址"); } $cname = trim($_POST['cname']); $cinfo = trim($_POST['cinfo']); $cimage = $this->upload_cimage(); if($cimage === false){ return self::outerr(errcode::ErrUploadFileFailed); } $mod_room = Model('room'); $item = $mod_room->findCert(["room_id"=>$room_id]); if(empty($item)) { $insertId = $mod_room->addCert($ctype,$room_id,$short_name,$full_name,$cname,$cmobile,$cmail,$cinfo,$cimage); if($insertId){ return self::outsuccess(null); }else{ return self::outerr(errcode::ErrDB,"提交失败"); } } if($item['cstatus'] == 0){ return self::outerr(errcode::ErrTalk,"您已提交一份认证申请,请耐心等待审核,勿重复提交"); } $updata['ctype'] = $ctype; $updata['room_id'] = $room_id; $updata["short_name"] = $short_name; $updata["full_name"] = $full_name; $updata["cname"] = $cname; $updata["cmobile"] = $cmobile; $updata["cmail"] = $cmail; $updata["cinfo"] = $cinfo; $updata["cimage"] = $cimage; $updata['cstatus'] = 0; $updata["add_time"] = time(); $update = $mod_room->editCerts(['cert_id'=>$item['cert_id']],$updata); if($update){ return self::outsuccess(null); }else{ return self::outerr(errcode::ErrDB,"提交失败"); } } private function upload_cimage() { $upload_dir = 'room/certs/'; $uploader = new room\uploader(); $res = $uploader->upfile($upload_dir,$info); if($res) { return '/data/upload/'.$upload_dir . $info['msg'].'?tm='.time(); } else { return false; } } //////////////群共享基金//////////////////////////////////////////////////////////////////////////////////////// /** * 共享基金详情 * param $room_id int 房间id */ public function share_bonusOp() { $room_id = intval($_GET['room_id']); if($room_id <= 0) { return self::outerr(errcode::ErrParamter); } $mod_room = Model('room'); $room = $mod_room->getRoom($room_id); if(empty($room)) { return self::outerr(errcode::ErrParamter,"群信息有误"); } $parts = new room\room_parts($room_id); $uids = $parts->allparts(); if(!in_array(session_helper::memberid(),$uids)) { return self::outerr(errcode::ErrParamter,"不可以偷看别人的共享资金哦"); } $list = []; $items = $mod_room->getRoomsgList(["room_id"=>$room_id,"type"=>['in',[proto_type::msg_type_donate,proto_type::msg_type_spend]]]); if(!empty($items)) { $uids = []; foreach ($items as $idx => $item) { $orgmsg = json_decode($item['orgmsg'],true); $items[$idx]['amount'] = $orgmsg['amount']; $items[$idx]['member_id'] = $orgmsg['user']; $uids[] = $orgmsg['user']; } $uids = array_unique($uids); $info = []; $members = member_info::get_members($uids); foreach ($members as $member){ $info[$member['member_id']]['avatar'] = $member['avatar']; $info[$member['member_id']]['name'] = $member['nickname']; } foreach ($items as $val) { $uid = $val['member_id']; $val['avatar'] = $info[$uid]['avatar']; $val['name'] = $info[$uid]['name']; $val['msg'] = $val['type'] == proto_type::msg_type_donate ? "+ ".$val['amount']."" : "- ".$val['amount'].""; $val['state'] = $val['type'] == proto_type::msg_type_donate ? 1:0; $val['operate'] = $val['type'] == proto_type::msg_type_donate ? "贡献":"消费"; $list[] = $val; } } return self::outsuccess(["room"=>$room,"list" => $list],'talk/share_bonus'); } //////////////添加好友 申请入群 系统消息///////////////////////////////////////////////////////////////////////////////////////// /** * 信息输入板 wap编辑申请和公告使用 * param $type int 1:群申请 2:好友申请 3:查看/编辑群公告 * @场景type=1 relay_id(二维码扫码 立即入群) * @场景type=2 talk_id(申请加好友的member_id) * @场景type=3 talke_id(room_id) */ public function message_boardOp() { $type = intval($_GET['type']); $talk_id = intval($_GET['talk_id']); $relay_id = intval($_GET['relay_id']); $isManager = intval($_GET['isManager']); if(empty($type)) { return self::outerr(errcode::ErrParamter,"打开页面失败"); } $ajax_param["type"] = $type; switch ($type){ case 1: $ajax_param['title'] = "申请入群"; $ajax_param["talk_id"] = $talk_id; $ajax_param["relay_id"] = $relay_id; break; case 2: $ajax_param['title'] = "好友申请"; $ajax_param["talk_id"] = $talk_id; break; case 3: $ajax_param['title'] = "群公告"; $ajax_param["talk_id"] = $talk_id; $room = Model('room')->getRoom($talk_id); $ajax_param['notice'] = isset($room['notice']) ? $room['notice'] : ""; $ajax_param['isManager'] = $isManager; break; default: $ajax_param = []; } return self::outsuccess(["ajax_param"=>$ajax_param],'talk/message_board'); } /** * 新申请消息列表 */ public function new_applysOp(){ return self::outsuccess(null,'talk/new_applys'); } public function ajax_get_applysOp() { $mod_room = Model('room'); $member = session_helper::memberid(); $items = $mod_room->getRoomsgList(['member_id'=>$member,"type" => proto_type::msg_type_apply],$this->page_size()); if(!empty($items)) { foreach ($items as $k => $apply) { $orgmsg = json_decode($apply['orgmsg'],true); $type = $orgmsg['type']; $items[$k]['type'] = $orgmsg['type']; $items[$k]['room_id'] = $orgmsg['room_id']; $items[$k]['userid'] = $orgmsg['from']['userid']; $items[$k]['nickname'] = $orgmsg['from']['nickname']; $items[$k]['avatar'] = $orgmsg['from']['avatar']; $note = empty($orgmsg['note']) ? "" : $orgmsg['note']; $items[$k]['content'] = util::ellipsis($note); $items[$k]['state'] = $this->transform_state($orgmsg['state']); $items[$k]['schema'] = ""; if(($type == 'apply_friend' || $type == 'apply_room') && $items[$k]['state']<=0) { $items[$k]['schema'] = schema_helper::friend_apply($apply['msg_id']); } } $hasmore = count($items) < $this->page_size() ? false : true; } else { $items = []; $hasmore = false; } return self::outsuccess(["applys"=>$items,"mobile_page" => ["hasmore" => $hasmore,"curpage" => $this->page_no()]]); } /** * 好友申请 */ public function add_friendsOp() { $user = intval($_GET['user']); $msg = trim($_GET['msg']); if($user <= 0 ){ return self::outerr(errcode::ErrRelation,"发送失败"); } $relateion = new relation\mem_relation(session_helper::memberid()); $isfriend = $relateion->is_friends($user); if($isfriend == false) { $relateion->subscribe($user); room\pusher::instance()->apply_friend(session_helper::memberid(),$user,$msg); } return self::outsuccess(null); } /** * 入群申请 * param $room_id int 房间id * param $relay_id int 二维码来源 member_id * param $passwd int 四位入群密码 * param $apply int 1:发送入群申请非直接入群 * param $msg str 入群介绍 */ public function send_applyOp() { $room_id = intval($_GET['room_id']); $relay_id = intval($_GET['relay_id']); if($room_id <= 0) { return self::outerr(errcode::ErrParamter,"请求失败"); } $member = session_helper::memberid(); $mod_room = Model('room'); $room = $mod_room->getRoom($room_id); if(empty($room)) { return self::outerr(errcode::ErrParamter,"房间不存在"); } $isFromQr = false; if($relay_id > 0) { $parts = new room\room_parts($room_id); $uids = $parts->allparts(); $isFromQr = in_array($relay_id,$uids) ? true : false; } $passwd = $room['passwd']; $owner = $room['room_owner']; $inviter = $isFromQr ? $relay_id : $owner; if(empty($passwd) || $isFromQr) { //立即入群 $ret = room\factory_client::instance()->invite($room_id,$inviter,[$member]); if($ret === false) { return self::outerr(errcode::ErrRoom,"进群失败"); } else { $members = member_info::get_members($ret['newusers']); $result['invitees'] = $members; return self::outsuccess($result); } } elseif(intval($_GET['apply'] == 1)) { //发送入群申请 $msg = trim($_GET['msg']); if(mb_strlen($msg,'utf-8') >= 100){ return self::outerr(errcode::ErrParamter,"入群申请过长,请缩短一些"); } room\pusher::instance()->apply_room($member,$room_id,$msg); return self::outsuccess(null,"申请成功"); }else { if(strtolower(trim($_GET['passwd'])) !== strtolower($passwd)) { return self::outerr(errcode::ErrParamter, "群密码有误"); } $ret = room\factory_client::instance()->invite($room_id,$owner,[$member]); if($ret === false) { return self::outerr(errcode::ErrRoom, "进群失败"); } $members = member_info::get_members($ret['newusers']); $result['invitees'] = $members; return self::outsuccess($result); } } private function transform_state($state){ switch ($state){ case 'pending': return 0;break; case 'accept': return 1;break; case 'refuse': return 2;break; default : return 0; } } /** * 系统消息 */ public function sys_noticeOp() { return self::outsuccess(null,'talk/system_notice'); } public function notice_listOp() { $mod_room = Model('room'); $memberid = session_helper::memberid(); $items = $mod_room->getRoomsgList(["member_id"=>$memberid,"type" => proto_type::msg_type_nofity],$this->page_size()); if(!empty($items)) { foreach ($items as $k => $apply) { $orgmsg = json_decode($apply['orgmsg'],true); $items[$k]['type'] = $orgmsg['type']; $items[$k]['userid'] = $orgmsg['from']['userid']; $items[$k]['nickname'] = $orgmsg['from']['nickname']; $items[$k]['avatar'] = $orgmsg['from']['avatar']; $items[$k]['content'] = $orgmsg["note"]; $items[$k]['schema'] = isset($orgmsg['schema'])? $orgmsg['schema'] : ""; } $hasmore = count($items) < $this->page_size() ? false : true; } else { $items = []; $hasmore = false; } return self::outsuccess(["notice"=>$items,"mobile_page" => ["hasmore" => $hasmore,"curpage" => $this->page_no()]]); } ////////////////群商品//////////////////////////////////////////////////////////////////////////////////////////// public function room_goodsOp() { $room_id = intval($_GET['talk_id']); if( $room_id <= 0 ) { return self::outerr(errcode::ErrParamter,"参数有误"); } $mod_room = Model('room'); $items = $mod_room->getRoomsgList(["room_id"=>$room_id,"type"=>proto_type::msg_type_goods],20); $gids = []; foreach ($items as $item) { $goods_id = intval($item['orgmsg']); if($goods_id > 0) $gids[] = $goods_id; } $goods = []; if(!empty($gids)) { $gids = array_unique($gids); $helper = new goods_helper($this->price_calcer()); $order = "field(goods_id,".implode(',',$gids).") asc"; $goods = $helper->get_infos($gids,0,$order); } return self::outsuccess( ["goods" => $goods] ,"/talk/room_goods"); } ///////////////认证群列表 public function official_roomsOp() { return self::outsuccess(null,'talk/official_rooms'); } public function ajax_certs_roomsOp() { $mod_room = Model('room'); $items = $mod_room->getRooms(["type"=>proto_type::room_chat,"room_level"=>['gt',0]],'*','shared_bonus desc',$this->page_size(),$this->page_size()); $rooms = []; $hasmore = false; if(!empty($items)) { foreach ($items as $item) { $info = new \room\room_info($item); $rooms[] = $info->format(); } $hasmore = count($items) < $this->page_size() ? false : true; } return self::outsuccess(["rooms"=>$rooms,"mobile_page" => ["hasmore" => $hasmore,"curpage" => $this->page_no()]]); } ///// public function del_fiendsOp() { } }