🔓 Ultimate Webshell - Penetration Testing Tool

📖 File Reader

<?php
namespace app\api\controller;
use think\facade\Db;

/*聊天处理*/
class Chat extends Base
{
    /*聊天窗口信息*/
    public function chat_personnel_list()
    {
        $list = db::name("chat_personnel")->where("find_in_set($this->user_id,user_id_str) ")->page($this->page,$this->limit)->order("time desc")->select()
            ->toArray();
        foreach ($list as $k => $v){
            $user = db::name("user")->where("user_id in ($v[user_id_str])")->field("user_id,nickname,head")->select()->toArray();
            foreach ($user as $k1 => $v1){
                $user[$k1]["is_benren"] = $v1["user_id"] == $this->user_id?1:0;
            }
            $list[$k]["user"] = $user;
            $zuihou_personnel_particulars_describe = db::name("chat_personnel_particulars")->where("chat_id = $v[id]")->order("id desc")->value("describe");
            $list[$k]["zuihou_personnel_particulars_describe"] = $zuihou_personnel_particulars_describe;//聊天之后内容描述
            $list[$k]["time"] = date("m-d",$v["time"]);
        }
        $count = db::name("chat_personnel")->where("find_in_set($this->user_id,user_id_str)")->count();
        $pages = $this->vue_pages($count,$this->limit);
        $data = [
            'list'=>$list,
            'pages'=>$pages,
        ];
        return $this->succeed_json("ok",$data);
    }

    /*聊天窗口详情*/
    public function chat_personnel_info()
    {
        $chat_id = input("param.chat_id");//窗口id
        $chat_info = db::name("chat_personnel")->where("id = $chat_id")->field("id,user_id_str,user_id_str_check")->find();
        $data = [
            'chat_info'=>$chat_info,
        ];
        return $this->succeed_json("ok",$data);
    }

    /*聊天窗口创建*/
    public function chat_personnel_add()
    {
        $user_id_receive = input("param.user_id_receive");//接收人id
        $type = input("param.type");
        $where = 1;
        if (!empty($type)){
            $where .= " and type = $type";
        }
        $chat_info = db::name("chat_personnel")->where("find_in_set($user_id_receive,user_id_str) and find_in_set($this->user_id,user_id_str) and $where")->field("id,user_id_str,user_id_str_check")->find();
        if (empty($chat_info)){
            $info = [
                'user_id_str'=>$user_id_receive.','.$this->user_id,
                'type'=>$type,
            ];
            $chat_id = db::name("chat_personnel")->insertGetId($info);
            $chat_info = db::name("chat_personnel")->where("id = $chat_id")->field("id,user_id_str,user_id_str_check")->find();
        }
        $data = [
            'chat_info'=>$chat_info,
        ];
        return $this->succeed_json("ok",$data);
    }

    /*聊天窗口待查看标识更新*/
    public function chat_personnel_update()
    {
        $chat_id = input("param.chat_id");//窗口id
        $chat_info = db::name("chat_personnel")->where("id = $chat_id")->field("id,user_id_str,user_id_str_check")->find();
        $user_id_arr_check = explode(',',$chat_info['user_id_str_check']);
        $check_data = [];
        foreach ($user_id_arr_check as $v){
            if ($v != $this->user_id){
                $check_data[] = $v;
            }
        }
        $info = [
            'user_id_str_check'=>implode(",", $check_data),
        ];
        db::name("chat_personnel")->where("id = $chat_id")->update($info);
        return $this->succeed_json("操作成功");
    }

    /*聊天信息存储*/
    public function chat_upload()
    {
        $chat_id = input("param.chat_id");//窗口id
        $describe = input("param.describe");
        $type = input("param.type");
        $chat_info = db::name("chat_personnel")->where("id = $chat_id")->field("id,user_id_str,user_id_str_check")->find();
        if (empty($chat_info)){
            return $this->error_json("聊天窗口不存在",405);
        }
        $user_id_arr = explode(',',$chat_info['user_id_str']);
        if (!in_array($this->user_id,$user_id_arr)){
            return $this->error_json("聊天窗口错误",405);
        }
        /*更新待查看会员*/
        $user_id_arr = explode(',',$chat_info["user_id_str"]);
        $user_id_arr_check = [];//待查看会员id
        foreach ($user_id_arr as $v){
            if ($v != $this->user_id){
                $user_id_arr_check[] = $v;
            }
        }
        $info = [
            'user_id_str_check'=>implode(",", $user_id_arr_check),
            'time'=>time(),
        ];
        db::name("chat_personnel")->where("id = $chat_id")->update($info);
        $info_particulars = [
            'chat_id'=>$chat_id,
            'user_id'=>$this->user_id,
            'describe'=>$describe,
            'type'=>$type,
            'time_add'=>time(),
        ];
        db::name("chat_personnel_particulars")->insertGetId($info_particulars);
        return $this->succeed_json("发送成功");
    }

    /*聊天信息*/
    public function chat_personnel_particulars_list()
    {
        $chat_id = input("param.chat_id");//窗口id
        $list = db::name("chat_personnel_particulars")->alias("a")
            ->join("user b","a.user_id = b.user_id","left")
            ->field("a.*,b.nickname,b.head")
            ->where("a.chat_id = $chat_id")
            ->order("a.id desc")
            ->page($this->page,$this->limit)
            ->select()
            ->toArray();
        foreach ($list as $k => $v){
            $list[$k]["is_benren"] = $v["user_id"] == $this->user_id?1:0;
            $list[$k]['time_add'] = date("Y-m-d H:i",$v['time_add']);
        }
        $count = db::name("chat_personnel_particulars")->alias("a")
            ->join("user b","a.user_id = b.user_id","left")
            ->where("a.chat_id = $chat_id")
            ->count();
        $pages = $this->vue_pages($count,$this->limit);
        $data = [
            'list'=>$list,
            'pages'=>$pages,
        ];
        return $this->succeed_json("ok",$data);
    }

    /*聊天内容更新查询*/
    public function chat_personnel_particulars_update_list()
    {
        $chat_id = input("param.chat_id");
        $particulars_id = input("param.particulars_id");//聊天内容id
        $list = db::name("chat_personnel_particulars")->alias("a")
            ->join("user b","a.user_id = b.user_id","left")
            ->field("a.*,b.nickname,b.head")
            ->where("a.chat_id = $chat_id and a.id > $particulars_id")
            ->order("a.id desc")
            ->select()
            ->toArray();
        foreach ($list as $k => $v){
            $list[$k]["is_benren"] = $v["user_id"] == $this->user_id?1:0;
            $list[$k]['time_add'] = date("Y-m-d H:i",$v['time_add']);
        }
        $data = [
            'list'=>$list,
        ];
        return $this->succeed_json("ok",$data);
    }
}