huangdong 6 anos atrás
pai
commit
5e9d10812a

+ 2 - 3
data/model/room.model.php

@@ -19,8 +19,8 @@ class roomModel extends Model
     {
         return $this->table('room_participant')->field('*')->where(['room_id' => $room_id,'state' => 0])->limit(false)->select();
     }
-    public function getPartRooms($cond,$field = '*',$limit = false) {
-        return  $this->table('room_participant')->field($field)->where($cond)->limit($limit)->select();
+    public function getPartRooms($cond,$field = '*',$limit = false,$order='invite_time asc') {
+        return  $this->table('room_participant')->field($field)->where($cond)->order($order)->limit($limit)->select();
     }
     public function invite($room_id,$user,$inviter) {
         $ret = $this->table('room_participant')->insert(['room_id' => $room_id,'member_id' => $user,'inviter' => $inviter,'invite_time' => time(),'join_time' => 0,'jointimes' => 0,'state' => 0],true);
@@ -86,7 +86,6 @@ class roomModel extends Model
     public function getRoomMsg($room_id,$msg_type) {
         return $this->table('room_msg')->field('*')->where(['room_id' => $room_id, 'type' => $msg_type])->order('add_time desc')->select();
     }
-
     public function getRoomsgList($condition, $pagesize = '', $field = '*', $order = 'msg_id desc',$master = false) {
         return $this->table('room_msg')->field($field)->where($condition)->order($order)->limit($pagesize)->master($master)->select();
     }

+ 1 - 1
helper/room/factory.php

@@ -146,7 +146,7 @@ class factory
         return $ret;
     }
 
-    private static function participants($roomid)
+    public static function participants($roomid)
     {
         $roomid = intval($roomid);
         if($roomid <= 0) return false;

+ 48 - 15
helper/room/room_info.php

@@ -21,15 +21,24 @@ class room_info
     public function type() {
         return intval($this->mParams['type']);
     }
-    public function name() {
-        return $this->mParams['room_name'];
+    public function avatar(){
+        return $this->mParams['avatar'];
     }
-    public function max_user() {
-        return intval($this->mParams['max_user']);
+    public function name()
+    {
+        $name = $this->mParams['room_name'];
+        if(!empty($name)) return $name;
+
+        return room_helper::use_tmp_name($this->mParams);
     }
-    public function room_time() {
-        return intval($this->mParams['add_time']);
+    private function tmp_name() {
+        return $this->mParams['tmp_name'];
+    }
+
+    public function room_desc(){
+        return $this->mParams['room_desc'];
     }
+
     public function creator() {
         return intval($this->mParams['room_creator']);
     }
@@ -39,14 +48,31 @@ class room_info
     public function owner_name() {
         return $this->mParams['owner_name'];
     }
+
+
+    public function max_user() {
+        return intval($this->mParams['max_user']);
+    }
+    public function room_time() {
+        return intval($this->mParams['add_time']);
+    }
     public function user_count() {
         return intval($this->mParams['users']);
     }
-    public function avatar(){
-        return $this->mParams['avatar'];
+    public function certified(){
+        return intval($this->mParams['certified']);
     }
-    public function tmp_name(){
-        return $this->mParams['tmp_name'];
+
+
+
+    public function shared_fund(){
+        return $this->mParams['shared_fund'];
+    }
+    public function broadcast(){
+        return $this->mParams['broadcast'];
+    }
+    public function passwd(){
+        return $this->mParams['passwd'];
     }
 
     public function format()
@@ -55,16 +81,23 @@ class room_info
 
         $ret['room_id'] = $this->room_id();
         $ret['type']    = $this->type();
-        $ret['name']    = $this->name();
-        $ret['tmp_name'] = $this->tmp_name();
         $ret['avatar'] = $this->avatar();
-        $ret['users']  = $this->user_count();
-        $ret['max_user']    = $this->max_user();
-        $ret['room_time']    = $this->room_time();
+        $ret['name']    = $this->name();
+        $ret['room_desc']    = $this->room_desc();
+
         $ret['creator']    = $this->creator();
         $ret['owner']    = $this->owner();
         $ret['owner_name']    = $this->owner_name();
 
+        $ret['max_user']    = $this->max_user();
+        $ret['room_time']    = $this->room_time();
+        $ret['users']  = $this->user_count();
+        $ret['certified']  = $this->certified();
+
+        $ret['shared_fund']    = $this->shared_fund();
+        $ret['broadcast']    = $this->broadcast();
+        $ret['passwd']    = $this->passwd();
+
         return $ret;
     }
 }

+ 127 - 0
helper/room/tpl_group_home.php

@@ -0,0 +1,127 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: huangdong
+ * Date: 2018/8/9
+ * Time: 下午5:04
+ */
+
+
+namespace room;
+require_once(BASE_ROOT_PATH . '/helper/room/factory.php');
+
+class tpl_group_home
+{
+    private $mod_room = null;
+    private $room_info = null;
+    private $cur_user = 0;
+    private $room_id  = 0;
+
+    public function __construct($user, $room_id)
+    {
+        $this->mod_room = Model('room');
+
+        $this->room_id = $room_id;
+        $this->cur_user = intval($user);
+        $room = $this->mod_room->getRoom($room_id);
+        if(!empty($room)) $this->room_info = new room_info($room);
+    }
+
+    public function validate()
+    {
+        if($this->room_id <= 0){
+            return false;
+        }
+
+        if(empty($this->mod_room) ||  empty($this->room_info)){
+            return false;
+        }
+
+        //todo use code unline
+//        if(empty($room) || $room['type'] != proto_type::room_chat){
+//            return false;
+//        }
+
+        return true;
+    }
+
+    public function show_group_header()
+    {
+        $html = '';
+        if (!empty($this->room_info))
+        {
+//            $room = $this->room_info->format();
+            $name = $this->room_info->name();
+
+            $name = $room['name'] ? $room['name'] : "丽人丽妆";
+            $avartar = $room['avatar'] ?  $room['avatar'] : RESOURCE_SITE_URL . "/mobile/talk/images/avatars.png";
+            $desc = $room['room_desc'] ? $room['room_desc'] : "上海丽人丽妆化妆品股份有限公司";
+
+            $html .= "
+                <div class=\"group_avatar\">
+                    <img src=\"{$avartar}\" alt=\"group_avatar\">
+                </div>
+                <div class=\"group_name\">
+                    <h3>{$name}</h3>
+                    <p>{$desc}</p>
+                </div>
+            ";
+        }
+
+        echo $html;
+    }
+
+    private function isManager($user) {
+        return intval($user) === $this->cur_user;
+    }
+
+    public function show_members()
+    {
+        $html = '';
+        $participants = factory::participants($this->room_id);
+        if (!empty($participants)) {
+            foreach ($participants as $uids => $member)
+            {
+                $isManager = $this->isManager($uids);
+                if($isManager)
+                {
+                    $html .= "        
+                    <div class=\"weui-flex__item\">
+                        <img src=\"{$member['avatar']}\" alt=\"\">
+                        <p>{$member['nickname']}</p>
+                        <span>管理员</span>
+                    </div>";
+                }
+                else
+                {
+                    $html .= "        
+                    <div class=\"weui-flex__item\">
+                        <img src=\"{$member['avatar']}\" alt=\"\">
+                        <p>{$member['nickname']}</p>
+                    </div>";
+                }
+            }
+        }
+
+
+        if (isset($participants[$this->cur_user]))
+        {
+            $html .= "
+                <div class=\"weui-flex__item\">
+                    <img src=\"" . RESOURCE_SITE_URL . "/mobile/talk/images/add_member.png\" alt=\"\">
+                </div>
+            ";
+        }
+
+
+        if ($isManager)
+        {
+            $html .= "
+                <div class=\"weui-flex__item\">
+                    <img src=\"" . RESOURCE_SITE_URL . "/mobile/talk/images/del_member.png\" alt=\"\">
+                </div>";
+        }
+
+        echo $html;
+    }
+}

+ 70 - 102
helper/room/util.php

@@ -47,10 +47,12 @@ class talks_helper
     const max_msgid = 1 << 32;
 
     private $mod_room;
+
     public function __construct()
     {
         $this->mod_room = Model('room');
     }
+
     public function talks($user,$input)
     {
         $params = $this->talk_params($input);
@@ -67,7 +69,7 @@ class talks_helper
 
         $other = array_values($chatid_others);
         $uids = array_merge($other,$room_senders,$chatwo_senders);
-        $members   = $this->get_members($uids);
+        $members   = members::get_members($uids);
 
         return ["talk_list" => $talk_list,"room_descs" => $room_descs,'messages' => array_merge($room_msgs,$chatwo_msgs),"members"=>$members];
     }
@@ -133,41 +135,6 @@ class talks_helper
         return $result;
     }
 
-    private function room_tmp_name($room)
-    {
-        if(!empty($room['tmp_name']))
-        {
-            $tmp_len = count(explode('、',$room['tmp_name']));
-            $cnt     = $room['users'];
-            if($tmp_len > 3 || $tmp_len >= $cnt){
-                return $room['tmp_name'];
-            }
-        }
-
-        $uids = [];
-        $items = $this->mod_room->getPartRooms(["room_id" => $room["room_id"]],'member_id',4);
-        foreach ($items as $item){
-            $uids[] = $item['member_id'];
-        }
-
-        $tmp_name = "";
-        $names = Model('member')->field('member_nickname')->where(["member_id" => ["in",$uids]])->select();
-        foreach ($names as $name){
-            $tmp_name .= $name['member_nickname'] .'、';
-        }
-        $tmp_name =  trim($tmp_name,"、");
-
-        $cond = ["room_id" => $room['room_id']];
-        $update = ["tmp_name" => $tmp_name];
-        $ret = $this->mod_room->edit_room($cond,$update);
-
-        if($ret){
-            return $tmp_name;
-        }else{
-            return false;
-        }
-    }
-
     //$msg_type == 0 表示 房间消息,1 表示单聊消息
     private function lastmsgs($roomids,&$senders,$msg_type = 0)
     {
@@ -328,9 +295,26 @@ class talks_helper
         return $result;
     }
 
-    private function get_members($uids)
+    private function room_info($room)
     {
-        if(empty($uids)) return [];
+        if(empty($room)) return false;
+        $info = new room_info($room);
+        $room_info = $info->format();
+
+        //todo delete test data
+        $default_avatar = "http://pp.myapp.com/ma_icon/0/icon_42287263_1532071055/96";
+        $room_info["avatar"] = $room_info["avatar"] ? $room_info["avatar"] : $default_avatar;
+
+        return $room_info;
+    }
+}
+
+class members{
+
+    public static function get_members($uids)
+    {
+        $members = [];
+        if(empty($uids)) return $members;
 
         $uids = array_unique($uids);
         $items = Model('member')->getMemberList(['member_id' => ['in',$uids]]);
@@ -349,89 +333,73 @@ class talks_helper
         return $members;
     }
 
-    private function room_info($room)
-    {
-        if(empty($room)) return false;
-        $info = new room_info($room);
-        $room_info = $info->format();
 
-        if(empty($room_info["name"])) {
-            $room_info["name"] = $this->room_tmp_name($room_info);
+    public static function uids_filter($operater,$needle)
+    {
+        $uids = [];
+        foreach ($operater as $value){
+            if($value == $needle){
+                continue;
+            }else{
+                $uids[] = $value;
+            }
         }
+        return $uids;
+    }
+}
 
-
-
-        //todo delete test data
-        if(empty($room_info["avatar"])){
-            $room_info["avatar"] = "http://wx.qlogo.cn/mmopen/cTcqoIpA3hc3DYFZJ0C9tpBA79rTdFPpTI4G5ib8wxSnbYy4nxPiaVHXXPjfLA0cfnhAJTsMQicJSsLDyIOgf06vYFiaE4657hpD/0";
+class room_helper
+{
+    public static function use_tmp_name($room)
+    {
+        $tmp_name = $room['tmp_name'];
+        $user_cnt = intval($room['users']);
+        //tmp_name can be use already
+        if(!empty($tmp_name))
+        {
+            $tmp_len = count(explode('、',$tmp_name));
+            if($tmp_len > 3 || $tmp_len >= $user_cnt){
+                return $tmp_name;
+            }
         }
-        return $room_info;
-    }
 
+        //create new tmp_name
+        $tmp_name = "";
+        $room_id = intval($room['room_id']);
+        $uids = self::room_uids($room_id,4);
+        $names = Model('member')->field('member_nickname')->where(["member_id" => ["in",$uids]])->select();
+        foreach ($names as $name){
+            $tmp_name .= $name['member_nickname'] .'、';
+        }
+        $tmp_name =  trim($tmp_name,"、");
 
-    ///////////////////
-    public function get_friends($user){
-        return $this->get_members($user);
-    }
+        $cond = ["room_id" => $room['room_id']];
+        $update = ["tmp_name" => $tmp_name];
 
-    public function talk_detail($talk_type,$talk_id)
-    {
-        if($talk_type == 'room')
-        {
-            $room = Model('room')->table('room')->where(['room_id'=>$talk_id])->find();
 
-            $room_info = $this->room_info($room);
+        //todo QueueClient::push()
+        if(empty($ret)) $ret = '丽人丽妆';
+        $ret = Model("room")->edit_room($cond,$update);
 
-            return $room_info;
-        }
-        elseif($talk_type == 'system')
-        {
-            $system = [
-                "name" => "熊猫美妆",
-                "avatar" => "http://pp.myapp.com/ma_icon/0/icon_42287263_1532071055/96"
-            ];
-            return $system;
+        if($ret){
+            return $tmp_name;
         }else{
+            Log::record("room_name create faild room:".json_encode($room));
             return false;
         }
     }
 
-    public function room_detail($user,$room_id)
-    {
-        if($room_id <= 0) return false;
-
-        $room = $this->mod_room->getRoom($room_id);
-        //todo use code unline
-        //if(empty($room) || $room['type'] !=proto_type::room_chat) return false;
-
-        $info = new room_info($room);
-        $room_base = $info->format();
-        $room_base['name'] =  $room_base['name']?$room_base['name']:$this->room_tmp_name($room_base);
-        $owner = $room_base['owner'];
-        $isManager = $owner == $user?true:false;
 
 
+    public static function room_uids($roomid,$limit=false)
+    {
         $uids = [];
-        $items = $this->mod_room->getPartRooms(["room_id" => $room_id],'member_id');
+        $mod_room = Model('room');
+
+        $items = $mod_room->getPartRooms(["room_id" => $roomid,'state' => 0],'member_id',$limit);
         foreach ($items as $item){
             $uids[] = $item['member_id'];
         }
-
-        if(empty($uids)) return false;
-
-        if(!in_array($user,$uids)) return false;
-
-
-        $members = $this->get_members($uids);
-        foreach ($members as $i => $member)
-        {
-            if($member['member_id'] == $owner){
-                $members[$i]["manager"] = 1;
-            }else{
-                $members[$i]["manager"] = 0;
-            }
-        }
-
-        return ["room" => $room_base ,"user"=>$user,"isManager" => $isManager,"members" => $members];
+        return $uids;
     }
 }

+ 51 - 127
mobile/control/member_talk.php

@@ -12,6 +12,7 @@ require_once(BASE_ROOT_PATH . '/helper/room/proto_type.php');
 require_once(BASE_ROOT_PATH . '/helper/room/room_info.php');
 require_once(BASE_ROOT_PATH . '/helper/room/author.php');
 require_once(BASE_ROOT_PATH . '/helper/room/util.php');
+require_once(BASE_ROOT_PATH . '/helper/room/tpl_group_home.php');
 
 use \room\proto_type;
 
@@ -109,8 +110,7 @@ class member_talkControl extends mbMemberControl
         $friends[] = $user;
         $friends = array_unique($friends);
 
-        $talks_helper = new room\talks_helper();
-        $members = $talks_helper->get_friends($friends);
+        $members = room\members::get_members($friends);
         usort($members,['member_info','alpha_compare']);
 
         $uids = [];
@@ -316,25 +316,6 @@ class member_talkControl extends mbMemberControl
         return self::outsuccess($result);
     }
 
-    public function talks_exOp()
-    {
-        $talk_type = trim($_GET['talk_type']);
-        $talk_id   = intval($_GET['talk_id']);
-
-        if(empty($talk_type) || $talk_id <=0){
-            return self::outerr(errcode::ErrParamter);
-        }
-
-        $talk_helper = new \room\talks_helper();
-        $result = $talk_helper->talk_detail($talk_type,$talk_id);
-
-        if($result){
-            return self::outsuccess(["talk_type"=>$talk_type,"talk_id"=>$talk_id,"name" => $result['name'],"avatar" => $result['avatar']]);
-        }else{
-            return self::outerr(errcode::ErrTalk);
-        }
-    }
-
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     public function friend_detailOp()
     {
@@ -397,32 +378,63 @@ class member_talkControl extends mbMemberControl
 
     public function room_detailOp()
     {
-        if (!session_helper::logined()) {
-            throw new UnloginException();
+        //type 1:room  2:chat$id = intval($_GET['id']);// room_id  user
+        $type = $_GET['talk_type'];
+        $talk_id = intval($_GET['talk_id']);
+        if($talk_id <= 0 || $type <= 0 || $type > 2 ) {
+            return self::outerr(errcode::ErrParamter);
         }
 
-        $room_id = intval($_GET['room_id']);
-        $user    = session_helper::memberid();
-        $tpl = new tpl_group_home($user,$room_id);
-
+        if($type == "room")
+        {
+            $room_id = $talk_id;
+            $user    = session_helper::memberid();
+            $tpl = new room\tpl_group_home($user,$talk_id);
 
-        //todo delete file before online
-        if($_GET['dev']){
-            return self::outsuccess(['tpl' => $tpl],'/talk/homepage_tmp');
-        }
+            //todo delete file before online
+            if($_GET['dev']){
+                return self::outsuccess(['tpl' => $tpl],'/talk/homepage_tmp');
+            }
 
-        if($tpl->validate() == false) {
-            Log::record("member_talk.room_detail error: room_id={$room_id} user={$user}",Log::ERR);
-            return self::outerr(errcode::ErrParamter);
+            if($tpl->validate() == false) {
+                Log::record("member_talk.room_detail error: room_id={$room_id} user={$user}",Log::ERR);
+                return self::outerr(errcode::ErrParamter);
+            }
+            else {
+                return self::outsuccess(['tpl' => $tpl],'/talk/homepage');
+            }
         }
-        else {
-            return self::outsuccess(['tpl' => $tpl],'/talk/homepage');
+        else
+        {
+            //todo chatwo info
+            return self::outsuccess(['tpl' => null],'/talk/homepage_tmp');
         }
     }
 
-    public function edit_roomOp()
+
+    public function room_usersOp()
     {
+        $room_id = intval($_GET['room_id']);
+        if($room_id<=0) return self::outerr(errcode::ErrParamter);
 
+        $self = session_helper::memberid();
+        $items = \room\room_helper::room_uids($room_id);
+        if(empty($items)) return self::outerr(errcode::ErrTalk);
+
+        $uids = \room\members::uids_filter($items,$self);
+        $members = \room\members::get_members($uids);
+
+        return self::outsuccess([
+            'friends' => $uids,
+            'count' => count($uids),
+            "members"=>$members,
+            'mobile_page' => mobile_page(1)
+            ]
+        );
+    }
+
+    public function edit_roomOp()
+    {
         $room = $_POST['room_details'];
         $ret = $this->edit_room($room);
         if($ret)
@@ -433,7 +445,8 @@ class member_talkControl extends mbMemberControl
         }
     }
 
-    private function edit_room($room){
+    private function edit_room($room)
+    {
         $model = Model();
         $res = $model->table('room')->where(['room_id'=>$room['room_id']])->update($room);
         if($res){
@@ -443,92 +456,3 @@ class member_talkControl extends mbMemberControl
     }
 }
 
-
-class tpl_group_home {
-
-//    private $mRoomid;
-
-    private $isManager = false;
-
-    private $bValidate = true;
-
-    private $mSummary;
-
-    public function __construct($user,$room_id){
-
-//        $this->mRoomid = $room_id;
-        $talk_helper = new room\talks_helper();
-        $this->mSummary = $talk_helper->room_detail($user,$room_id);
-
-        if($this->mSummary == false){
-            $this->bValidate = false;
-        }else{
-            $this->isManager = $this->mSummary["isManager"];
-        }
-    }
-
-    public function validate(){
-        return $this->bValidate;
-    }
-
-
-    public function show_group_header()
-    {
-        $html = '';
-        if(!empty($this->mSummary['room'])){
-            $name = $this->mSummary['room']['name'] ? $this->mSummary['room']['name'] : "丽人丽妆";
-            $avartar = $this->mSummary['room']['avatar'] ? $this->mSummary['room']['avatar'] : RESOURCE_SITE_URL."/mobile/talk/images/avatars.png";
-            $desc = $this->mSummary['room']['desc'] ? $this->mSummary['room']['desc'] : "上海丽人丽妆化妆品股份有限公司";
-
-            $html .= "
-                <div class=\"group_avatar\">
-                    <img src=\"{$avartar}\" alt=\"group_avatar\">
-                </div>
-                <div class=\"group_name\">
-                    <h3>{$name}</h3>
-                    <p>{$desc}</p>
-                </div>
-            ";
-        }
-
-        echo $html;
-    }
-
-    public function show_members()
-    {
-        $html = '';
-
-        if(!empty($this->mSummary['members']))
-        {
-            foreach ($this->mSummary['members'] as $member)
-            {
-                $html .= "        
-                    <div class=\"weui-flex__item\">
-                        <img src=\"{$member['avatar']}\" alt=\"\">
-                        <p>{$member['nickname']}</p>
-                    </div>";
-            }
-        }
-
-        if($this->isManager){
-            $html .= "
-                <div class=\"weui-flex__item\">
-                    <img src=\"".RESOURCE_SITE_URL."/mobile/talk/images/add_member.png\" alt=\"\">
-                </div>
-                <div class=\"weui-flex__item\">
-                    <img src=\"".RESOURCE_SITE_URL."/mobile/talk/images/del_member.png\" alt=\"\">
-                </div>";
-        }else{
-            $html .= "
-                <div class=\"weui-flex__item\">
-                    <img src=\"".RESOURCE_SITE_URL."/mobile/talk/images/add_member.png\" alt=\"\">
-                </div>
-            ";
-        }
-
-        echo $html;
-    }
-
-
-
-}