🔓 Ultimate Webshell - Penetration Testing Tool

📖 File Reader

<?php
namespace app\admin\controller;
use adminCreate\form\Form;
use app\admin\common\Common_config;
use app\api\common\Common_user;
use think\facade\Db;
use think\facade\View;

class User extends Base
{
    /**
     * 会员列表
     */
    public function user_list()
    {
        $rank_list = db::name("user_rank")->order("rank_id asc")->select();
        view::assign([
            'rank_list'=>$rank_list,
        ]);
        return View::fetch();
    }
    public function user_list_ajax()
    {
        $name = input("param.name");
        $motorcycle_type = input("param.motorcycle_type");
        $user_rank = input("param.user_rank");
        $where = 1;
        if (!empty($name)){
            $where .= " and (a.user_name like '%".$name."%' or a.nickname like '%".$name."%' or a.mobile like '%".$name."%' or a.name like '%".$name."%')";
        }
        if (!empty($motorcycle_type)){
            $where .= " and c.motorcycle_type = $motorcycle_type";
        }
        if (!empty($user_rank)){
            $where .= " and a.rank_id = $user_rank";
        }
        $list = db::name("user")->alias("a")
            ->join("user b","a.superior_id = b.user_id","LEFT")
            ->join("user_detail c","a.user_id = c.user_id","LEFT")
            ->join("user_rank d","a.rank_id = d.rank_id","LEFT")
            ->field("a.*,b.mobile as superior_name,d.name as rank_name")
            ->where($where)
            ->order("a.user_id desc")
            ->page($this->page,$this->limit)
            ->select()
            ->toArray();
        /*序号排序*/
        $number_zong = 1;
        if (!empty($list)){
            $user_id_zhuihou = $list[0]["user_id"];
            $number_zong = db::name("user")->alias("a")
                ->join("user b","a.superior_id = b.user_id","LEFT")
                ->join("user_detail c","a.user_id = c.user_id","LEFT")
                ->join("user_rank d","a.rank_id = d.rank_id","LEFT")
                ->field("a.*,b.mobile as superior_name,d.name as rank_name")
                ->where("a.user_id <= $user_id_zhuihou and $where")
                ->count();
        }
        foreach ($list as $k => $v){
            $list[$k]["number_xuhao"] = $number_zong - $k;
            $list[$k]["add_time"] =  date("Y-m-d H:i",$v["add_time"]);
            $list[$k]["money"] = sprintf("%.2f",$v["money"] - $v["freeze_money"]);
        }
        //获取分页数量
        $count = db::name("user")->alias("a")
            ->join("user b","a.superior_id = b.user_id","LEFT")
            ->join("user_detail c","a.user_id = c.user_id","LEFT")
            ->join("user_rank d","a.rank_id = d.rank_id","LEFT")
            ->where($where)
            ->count();
        return $this->layui_json($count,$list);
    }

    /*会员信息提交*/
    public function user_upload()
    {
        $user_id = input("param.user_id")!=''?input("param.user_id"):0;
        if(input("post.")){
            $password = input("param.password");
            $password2 = input("param.password2");
            if (!empty($password)){
                if ($password != $password2){
                    return $this->error_json("密码不一致");
                }
            }
            $mobile = input("param.mobile");
            if (!empty($mobile)){
                $user_info = db::name("user")->where("mobile = '$mobile' and user_id != $user_id")->find();
                if (!empty($user_info)){
                    return $this->error_json("手机号已存在");
                }
            }
            $superior_mobile = input("param.superior_mobile");
            $superior_id = 0;
            if (!empty($superior_mobile)){
                $superior_id = db::name("user")->where("mobile = '$superior_mobile'")->value("user_id");
                if (empty($superior_id)){
                    return $this->error_json("推荐人手机号不存在");
                }else{
                    if ($superior_id == $user_id){
                        return $this->error_json("推荐人手机号不可添加本人手机号");
                    }
                }
            }
            $info = [
                'superior_id'=>$superior_id,
                'nickname'=>input("param.nickname"),
                'head'=>input("param.head") != ''?implode(",",input("param.head")):'',
                'rank_id'=>input("param.rank_id"),
                'priority_rank_id_time'=>strtotime(input("param.priority_rank_id_time")),
                'name'=>input("param.name"),
                'identity'=>input("param.identity"),
                'mobile'=>input("param.mobile"),
                'label'=>input("param.label"),
                //'is_deliver'=>input("param.is_deliver"),
            ];
            if (!empty($info["head"])){
                $preg = "/^http(s)?:\\/\\/.+/";
                if(!preg_match($preg,$info["head"])) {
                    $config = Common_config::config("'url'");
                    $http_type = ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') || (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')) ? 'https://' : 'http://';
                    $url = $config["url"] != ''?$config["url"]:$http_type . $_SERVER['HTTP_HOST'];
                    $info["head"] = $url.$info["head"];
                }
            }
            if (!empty($password2)){
                $info["password"] = md5($password2);
            }
            if (empty($user_id)){
                $info["user_miyao"] = Common_user::user_miyao_add("30");
                $info["invitation_code"] = Common_user::user_invitation_code_add("7");
                $info["add_time"] = time();
                db::name("user")->insertGetId($info);
            }else{
                db::name("user")->where("user_id = $user_id")->data($info)->update();
            }
            return $this->succeed_json("操作成功");
        }else{
            $info = ['head'=>[],'nickname'=>'','name'=>'','identity'=>'','mobile'=>'','password'=>0,'password2'=>'','rank_id'=>0,'label'=>''];
            if (!empty($user_id)){
                $info = db::name("user")->alias("a")
                    ->join("user b","a.superior_id = b.user_id","left")
                    ->field("a.*,b.mobile as superior_mobile")
                    ->where("a.user_id = $user_id")
                    ->find();
            }
            $form = new Form();
            $form->tabs('tabs1', '基本信息');
            $form->input('nickname', '会员昵称',$info["nickname"])->tabs('tabs1');
            $form->upload('head', '头像', '/admin/ad/uploads', [$info['head']])->nultiple(false)->required('',"array")->tabs('tabs1');
            //$form->input('identity', '身份证号',$info["identity"])->tabs('tabs1');
            $form->input('name', '姓名',$info["name"])->col(7)->tabs('tabs1');
            $form->input('mobile', '手机号',$info["mobile"])->col(7)->tabs('tabs1')->required();
            //$form->input('superior_mobile', '推荐人手机号',$info["superior_mobile"])->col(7)->tabs('tabs1');
            if (!empty($user_id)){
                $form->input('password', '新密码','')->type('password')->col(7)->tabs('tabs1');
                $form->input('password2', '确认密码','')->type('password')->col(7)->tabs('tabs1');
            }else{
                $form->input('password', '新密码','')->type('password')->col(7)->tabs('tabs1')->required();
                $form->input('password2', '确认密码','')->type('password')->col(7)->tabs('tabs1')->required();
            }
            $rank_id = $info['rank_id'];
//            $form->selectOne('rank_id', '会员级别',$rank_id)->setOptions(function(){
//                $list = db::name("user_rank")->order("rank_id asc")->select()->toArray();
//                $menus = [];
//                foreach ($list as $k => $v){
//                    $menus[] = ['label'=>$v["name"],'value'=>$v["rank_id"]];
//                }
//                return $menus;
//            })->multiple(false)->filterable(false)->tabs('tabs1');
            $form->input('label', '会员标签',$info["label"])->type('textarea')->tabs('tabs1');
            $form->hidden('user_id',$user_id);
            $form->button('/admin/User/user_upload');
            return $form;
        }
    }

    /*会员资金变动处理*/
    public function record_update()
    {
        $user_id = input("param.user_id");
        if (input("post.")){
            $describe = input("param.describe");
            if (!empty(input("param.money"))){
                if (empty(input("param.moneytype"))){
                    return $this->error_json("请选择增加或减少!");
                }
                if (input("param.moneytype") == '+'){
                    $this->record_log($describe.'「平台操作」',1,$user_id,input("param.money"),0);
                }else{
                    $this->record_log($describe.'「平台操作」',1,$user_id,'-'.input("param.money"),0);
                }
            }
            if (!empty(input("param.freeze_money"))){
                if (empty(input("param.freeze_moneytype"))){
                    return $this->error_json("请选择增加或减少!");
                }
                if (input("param.freeze_moneytype") == '+'){
                    $this->record_log($describe.'「平台操作」',3,$user_id,0,0,input("param.freeze_money"));
                }else{
                    $this->record_log($describe.'「平台操作」',3,$user_id,0,0,'-'.input("param.freeze_money"));
                }
            }
            if (!empty(input("param.integral"))){
                if (empty(input("param.integraltype"))){
                    return $this->error_json("请选择增加或减少!");
                }
                if (input("param.integraltype") == '+'){
                    $this->record_log($describe.'「平台操作」',2,$user_id,0,input("param.integral"));
                }else{
                    $this->record_log($describe.'「平台操作」',2,$user_id,0,'-'.input("param.integral"));
                }
            }
            return $this->succeed_json("操作成功");
        }else{
            $info = db::name("user")->where("user_id = $user_id")->find();
            $form = new Form();
            $form->tabs('tabs1', '基本信息');
            $form->input('describe', '变动描述','')->type('textarea')->required()->tabs('tabs1');
            $form->select_number('money', '会员余额',0)->select_value('+')->color('red')->tips("可用余额:".$info["money"]."元")->tabs('tabs1');
            $form->select_number('freeze_money', '冻结余额',0)->select_value('+')->tips("冻结余额:".$info["freeze_money"]."元")->color('red')->tabs('tabs1');
            $form->select_number('integral', '会员积分',0)->select_value('+')->tips("会员积分:".$info["integral"])->color('red')->tabs('tabs1');
            $form->hidden('user_id',$user_id);
            $form->button('/admin/User/record_update');
            return $form;
        }
    }

    /*会员其它信息处理*/
    public function user_detail_update()
    {
        $user_id = input("param.user_id");
        if (input("post.")){
            $user_detail = db::name("user_detail")->where("user_id = $user_id")->find();
            $info = [
                'motorcycle_type'=>input("param.motorcycle_type"),
                'plate_number'=>input("param.plate_number"),
                'motorcycle_expire_time'=>strtotime(input("param.motorcycle_expire_time")),
            ];
            if (empty($user_detail)){
                $info["user_id"] = $user_id;
                db::name("user_detail")->insertGetId($info);
            }else{
                db::name("user_detail")->where("user_id = $user_id")->data($info)->update();
            }
            return $this->succeed_json("操作成功");
        }else{
            $user_detail = db::name("user_detail")->where("user_id = $user_id")->find();
            if (!empty($user_detail)){
                $user_detail["motorcycle_expire_time"]  = $user_detail["motorcycle_expire_time"] != 0?date("Y-m-d H:i",$user_detail["motorcycle_expire_time"]):'';
            }
            $upload_url = url('upload/image')->build();
            $form = new Form();
            $form->selectOne('motorcycle_type', '车辆品牌',$user_detail["motorcycle_type"])->setOptions(function(){
                $list = db::name("other_act")->where("type = 1")->order("id desc")->select();
                foreach ($list as $v){
                    $menus[] = ['label'=>$v["name"],'value'=>$v["id"]];
                }
                return $menus;
            });
            $form->input('plate_number', '车牌号',$user_detail["plate_number"]);
            $form->datetime('motorcycle_expire_time', '车险到期日期',$user_detail["motorcycle_expire_time"]);
            $form->hidden('user_id',$user_id);
            $form->button();
            return $form;
        }
    }

    /*会员明细*/
    public function user_record_log()
    {
        $user_id = input("param.user_id");
        View::assign([
            'user_id'=>$user_id,
        ]);
        return View::fetch();
    }

    /*会员明细记录*/
    public function user_record_log_ajax()
    {
        $user_id = input("param.user_id");
        $keyword = input("param.keyword");
        $time_ks = input("param.time_ks");
        $time_js = input("param.time_js");
        $where = 1;
        if (!empty($user_id)){
            $where .= " and a.user_id = $user_id";
        }
        if (!empty($keyword)){
            $where .= " and (a.describe like '%".$keyword."%' or b.nickname like '%".$keyword."%' or b.mobile like '%".$keyword."%')";
        }
        if (!empty($time_ks)){
            $time_ks2 = strtotime($time_ks);
            $where .= " and a.add_time >= $time_ks2";
        }
        if (!empty($time_js)){
            $time_js2 = strtotime($time_js);
            $where .= " and a.add_time < $time_js2";
        }
        $list = db::name("record_log")->alias("a")
            ->join("user b","a.user_id = b.user_id","left")
            ->field("a.*,b.nickname,b.mobile")
            ->where($where)
            ->order("a.id desc")
            ->page($this->page,$this->limit)
            ->select()
            ->toArray();
        foreach ($list as $k => $v){
            $list[$k]["add_time"] = date("Y-m-d H:i",$v["add_time"]);
        }
        $count = db::name("record_log")->alias("a")
            ->join("user b","a.user_id = b.user_id","left")
            ->where($where)
            ->count();
        return $this->layui_json($count,$list);
    }

    /*会员删除*/
    public function user_del()
    {
        $user_id = input("user_id");
        db::name("user")->where("user_id = $user_id")->delete();
        return $this->succeed_json("删除成功");
    }

    /*会员优惠卷*/
    public function user_activity_preferential_card()
    {
        $user_id = input("param.user_id");
        $nickname = db::name("user")->where("user_id = $user_id")->value("nickname");
        View::assign([
            'nickname'=>$nickname,
            'user_id'=>$user_id,
        ]);
        return View::fetch();
    }

    /*会员优惠卷数据*/
    public function user_activity_preferential_card_ajax()
    {
        $user_id = input("param.user_id");
        $list = db::name("user_activity_preferential_card")->where("user_id = $user_id")->order("id desc")->page($this->page,$this->limit)->select()->toArray();
        foreach ($list as $k => $v){
            $list[$k]["time_add"] = date("Y-m-d H:i",$v["time_add"]);
            $list[$k]["time_past_due"] = date("Y-m-d H:i",$v["time_past_due"]);
        }
        $count = db::name("user_activity_preferential_card")->where("user_id = $user_id")->count();
        return $this->layui_json($count,$list);
    }

    /*会员优惠卷修改*/
    public function user_activity_preferential_card_update()
    {
        $id = input("param.id");
        if (input("post.")){
            $info["is_employ"] = input("param.is_employ");
            if ($info["is_employ"] == 1){
                $info["time_employ"] = time();
            }else{
                $info["time_employ"] = 0;
            }
            db::name("user_activity_preferential_card")->where("id = $id")->data($info)->update();
            return $this->succeed_json("操作成功");
        }else{
            $card_info = db::name("user_activity_preferential_card")->where("id = $id")->find();
            $upload_url = url('upload/image')->build();
            $form = new Form();
            $form->input('card_name', '卷名称',$card_info["card_name"])->disabled(true);
            $form->input('price_yh', '优惠额度',$card_info["price_yh"])->disabled(true);
            $form->input('price_satisfy', '满足?元可用',$card_info["price_satisfy"])->disabled(true);
            $form->input('is_employ','已使用',$card_info["is_employ"])->type('switch');
            $form->hidden('id',$id);
            $form->button();
            return $form;
        }
    }

    /*会员地址*/
    public function user_address()
    {
        View::assign([
            'user_id'=>input("param.user_id"),
        ]);
        return View::fetch();
    }

    /*会员地址查询*/
    public function user_address_ajax()
    {
        $user_id = input("param.user_id");
        $list = db::name("user_address")->alias("a")
            ->join("region b","a.province = b.id","LEFT")
            ->join("region c","a.city = c.id","LEFT")
            ->join("region d","a.district = d.id","LEFT")
            ->field("a.*,b.name as province_name,c.name as city_name,d.name as district_name")
            ->where("a.user_id = $user_id")
            ->order("a.address_id desc")
            ->page($this->page,$this->limit)
            ->select();
        $list = json_decode($list,true);
        foreach ($list as $k => $v){
            $list[$k]["add_time"] =  date("Y-m-d H:i",$v["add_time"]);
        }
        //分页总数
        $count = db::name("user_address")->where("user_id = $user_id")->count();
        $pages = $this->vue_pages($count,$this->limit);
        $data = [
            'list'=>$list,
            'pages'=>$pages,
        ];
        return $this->succeed_json("ok",$data);
    }

    /*会员地址删除*/
    public function user_address_del()
    {
        $id = input("param.id");
        db::name("user_address")->where("address_id = $id")->delete();
        return $this->succeed_json("删除成功");
    }

    /*会员拓扑图*/
    public function user_topology()
    {
        return View::fetch();
    }

    /*会员拓扑图数据*/
    public function user_topology_ajax()
    {
        $type_yibu = input("param.type_yibu");
        $user_id = input("param.user_id");
        $keyword = input("param.keyword");
        $where = 1;
        if (!empty($keyword)){
            $where .= " and (a.name like '%".$keyword."%' or a.nickname like '%".$keyword."%' or a.mobile like '%".$keyword."%' )";
        }else{
            if (!empty($user_id)){
                $where .= " and a.superior_id = $user_id";
            }else{
                /*筛序出所有顶级账号*/
                $user_list = db::name("user")->order("user_id asc")->field("user_id as value,superior_id as pid,name")->select()->toArray();
                $array_reinstallation = Common_config::array_reinstallation($user_list);
                $user_id_top = [];//所有顶级会员id
                foreach ($array_reinstallation as $v){
                    $user_id_top[] = $v["value"];
                }
                if (!empty($user_id_top)) {
                    $user_id_top_str = implode(",", $user_id_top);
                    $where .= " and a.user_id in ($user_id_top_str)";
                }else{
                    $where .= " and a.user_id in (0)";
                }
            }
        }
        if ($type_yibu == 1) {
            $list = db::name("user")->alias("a")
                ->join("user_rank b","a.rank_id = b.rank_id","left")
                ->field("a.*,b.name as rank_name")
                ->where($where)
                ->order("a.user_id desc")
                ->select()
                ->toArray();
        }else{
            $list = db::name("user")->alias("a")
                ->join("user_rank b","a.rank_id = b.rank_id","left")
                ->field("a.*,b.name as rank_name")
                ->where($where)
                ->page($this->page,$this->limit)
                ->order("a.user_id desc")
                ->select()
                ->toArray();
        }
        foreach ($list as $k => $v){
            $list[$k]["add_time"] = date("Y-m-d H:i",$v["add_time"]);
            //二级分类
            $list2 = db::name("user")->alias("a")
                ->join("user_rank b","a.rank_id = b.rank_id","left")
                ->field("a.*,b.name as rank_name")
                ->where("a.superior_id = $v[user_id]")
                ->order("a.user_id desc")
                ->select()
                ->toArray();
            foreach ($list2 as $k2 => $v2){
                $list2[$k2]["add_time"] = date("Y-m-d H:i",$v2["add_time"]);
            }
            $list[$k]["children"] = $list2;
        }
        $count = db::name("user")->alias("a")
            ->join("user_rank b","a.rank_id = b.rank_id","left")
            ->where($where)
            ->count();
        return $this->layui_json($count,$list);
    }

    /*会员级别*/
    public function user_rank()
    {
        return View::fetch();
    }

    /*会员级别查询*/
    public function user_rank_ajax()
    {
        $list = db::name("user_rank")->order("rank_id asc")->page($this->page,$this->limit)->select()->toArray();
        $count = db::name("user_rank")->count();
        return $this->layui_json($count,$list);
    }

    /*会员级别更新*/
    public function user_rank_update()
    {
        $id = input("param.id");
        if (input("post.")){
            $info = [
                'bili_discount'=>input("param.bili_discount"),
                'pay_price'=>input("param.pay_price"),
            ];
            db::name("user_rank")->where("rank_id = $id")->data($info)->update();
            return $this->succeed_json("操作成功");
        }else{
            $info = db::name("user_rank")->where("rank_id = $id")->find();
            $form = new Form();
            $form->input('name', '级别名称',$info["name"])->disabled(true);
            $form->input('bili_discount', '折扣比例',$info["bili_discount"])->tips('提示:1为100%')->required();
            $form->input('pay_price', '办理金额',$info["pay_price"])->required();
            $form->hidden('id',$id);
            $form->button('/admin/User/user_rank_update');
            return $form;
        }
    }
}