🔓 Ultimate Webshell - Penetration Testing Tool

📖 File Reader

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

class Config extends Base
{
    /*菜单栏图标*/
    public function menu_icon()
    {
        return View::fetch();
    }

    /*菜单设置*/
    public function menu_list()
    {
        return View::fetch();
    }

    /*菜单设置数据*/
    public function menu_list_ajax()
    {
        $superior_id = input("param.superior_id");
        $type_yibu = input("param.type_yibu");
        $where = 1;
        if (!empty($superior_id)){
            $where .= " and superior_id = $superior_id";
        }else{
            $where .= " and superior_id = 0";
        }
        if ($type_yibu == 1) {
            $list = db::name("config_menus")->where($where)->order("sort desc")->select()->toArray();
        }else{
            $list = db::name("config_menus")->where($where)->order("sort desc")->page($this->page,$this->limit)->select()->toArray();
        }
        foreach ($list as $k => $v){
            $list[$k]["parentId"] = $v["superior_id"];
            $list[$k]["name"] = $v["title"];
            $list[$k]["icon"] = '';
            $list[$k]["add_time"] = date("Y-m-d H:i",$v["add_time"]);
            //二级分类
            $list2 = db::name("config_menus")->where("superior_id = $v[id]")->order("sort desc")->select()->toArray();
            foreach ($list2 as $k2 => $v2){
                $list2[$k2]["parentId"] = $v2["superior_id"];
                $list2[$k2]["name"] = $v2["title"];
                $list2[$k2]["icon"] = '';
                $list2[$k2]["add_time"] = date("Y-m-d H:i",$v2["add_time"]);
            }
            $list[$k]["children"] = $list2;
        }
        $count = db::name("config_menus")->where($where)->count();
        return $this->layui_json($count,$list);
    }

    /*菜单栏字段修改*/
    public function config_menu_field_update()
    {
        $id = input("param.id");
        $field_name = input("param.field_name");
        $info[$field_name] = input("param.value");
        db::name("config_menus")->where("id = $id")->data($info)->update();
        return $this->succeed_json("操作成功");
    }

    /*菜单栏详情*/
    public function menu_info()
    {
        $id = input("param.id");
        $info = db::name("config_menus")->where("id = $id")->find();
        $menu_wire = Common_menus::menu_wire($info["id"],0);
        $act_id = 0;
        $act_id2 = 0;
        if (!empty($menu_wire)){
            $menu_wire_arr = explode(',',$menu_wire);
            if (count($menu_wire_arr) == 1){
                $act_id = $menu_wire_arr[0];
            }else if(count($menu_wire_arr) == 2){
                $act_id = $menu_wire_arr[1];
                $act_id2 = $menu_wire_arr[0];
            }
        }
        $data = [
            'info'=>$info,
            'act_id'=>$act_id,
            'act_id2'=>$act_id2,
        ];
        return $this->succeed_json("ok",$data);
    }

    /*菜单栏创建*/
    public function menu_update()
    {
        $id = input("param.id")>0?input("param.id"):0;
        if (input("post.")){
            $info = [
                'top_type'=>0,
                'superior_id'=>input("param.superior_id"),
                'title'=>input("param.title"),
                'describe'=>input("param.describe"),
                'url'=>input("param.url"),
                'sort'=>input("param.sort"),
                'icon'=>input("param.icon"),
                'is_left'=>input("param.is_left"),
                'is_show'=>input("param.is_show"),
                'role_type'=>input("param.role_type"),
                'add_time'=>time(),
            ];
            if (empty(input("param.superior_id"))){
                $info["top_type"] = 1;
            }
            if (empty($id)){
                db::name("config_menus")->insertGetId($info);
            }else{
                db::name("config_menus")->where("id = $id")->update($info);
            }
            return $this->succeed_json("操作成功");
        }else{
            $config_menus = db::name("config_menus")->where("id = $id")->find();
            View::assign([
                'id'=>$id,
                'config_menus'=>$config_menus,
            ]);
            return View::fetch();
        }
    }

    /*菜单栏查询*/
    public function menu_act()
    {
        $superior_id = input("param.superior_id");
        $where = 1;
        if (!empty($superior_id)){
            $where .= " and superior_id = $superior_id";
        }else{
            $where .= " and superior_id = 0";
        }
        $list = db::name("config_menus")->where($where)->order("sort desc")->select()->toArray();
        $data = [
            'list'=>$list,
        ];
        return $this->succeed_json("ok",$data);
    }

    /*菜单删除*/
    public function menu_del()
    {
        $id = input("param.id");
        $count = db::name("config_menus")->where("superior_id = $id")->count();
        if (!empty($count)){
            return $this->error_json("存在子级栏目,不可删除!");
        }
        db::name("config_menus")->where("id = $id")->delete();
        return $this->succeed_json("删除成功,请手动刷新页面!");
    }

    /*基本设置*/
    public function basic_config()
    {
        $type = input("param.type");
        $where = 1;
        if (empty($type)){
            $type = 1;
            $where .= " and type = 1";
        }else{
            $where .= " and type = $type";
        }
        $list = db::name("config")->where("is_show = 1 and ".$where)->order("sort desc")->select();
        if ($_POST){
            /*获取配置信息*/
            $config_name = Common_config::config("'app_edition','app_url'");
            if (!empty(input("param.app_edition")) || !empty(input("param.app_url"))){
                if (input("param.app_edition") != $config_name["app_edition"] || input("param.app_url") != $config_name["app_url"]){
                    //创建版本修改记录
                    $info2 = [
                        'admin_id'=>$this->admin_id,
                        'app_edition'=>input("param.app_edition"),
                        'app_url'=>input("param.app_url"),
                        'add_time'=>time(),
                    ];
                    db::name("config_upload_log")->insertGetId($info2);
                }
            }
            foreach ($list as $k => $v){
                if ($v["type_field"] == 'file'){
                    if (!empty($_FILES[$v["field_name"]]['name'])) {
                        $info["value"] = '/public/uploads/' . $this->upload($v["field_name"]);
                    }else{
                        $info["value"] = $v["value"];
                    }
                }else{
                    $info["value"] = $_POST[$v["field_name"]];
                }
                db::name("config")->where("id = $v[id]")->data($info)->update();
            }
            return $this->succeed_json("操作成功");
        }else{
            View::assign([
                'list'=>$list,
                'type'=>$type,
            ]);
            return View::fetch();
        }
    }

    /*基本设置地区选择*/
    public function basic_config_region_update()
    {
        $field_name = input("param.field_name");
        $region = db::name("region")->order("id asc")->field("id,name")->select()->toArray();
        $config = db::name("config")->where("field_name = '$field_name'")->order("id asc")->find();
        if ($_POST){
            $region_id_arr = input("param.region_id")!=''?input("param.region_id"):[];
            $value = '';
            foreach ($region_id_arr as $v){
                foreach ($region as $v2){
                    if ($v == $v2["id"]){
                        $value.= $v2["name"].'/';
                    }
                }
            }
            $value = $value != ''?substr($value,0,strlen($value)-1):'';
            db::name("config")->where("field_name = '$field_name'")->update(['value'=>$value]);
            return $this->succeed_json("操作成功");
        }else{
            $value = $config["value"];
            $data = $value != ''?explode('/',$value):[];
            $region_arr = [];
            foreach ($data as $v){
                foreach ($region as $v2){
                    if ($v == $v2["name"]){
                        $region_arr[] = $v2["id"];
                    }
                }
            }
            $form = new Form();
            $form->cascader('region_id', '地区', $region_arr)->setOptions(function () {
                $menus = Common_config::region_dw();
                return $menus;
            })->tabs('tabs1');
            $form->hidden('field_name',$field_name);
            $form->button('/admin/Config/basic_config_region_update');
            return $form;
        }
    }

    /**
     * 快递公司
     */
    public function courier_list()
    {
        return View::fetch();
    }
    public function courier_list_ajax()
    {
        $name = input("param.name");
        $where = 1;
        if (!empty($name)){
            $where .= " and name like '%".$name."%'";
        }
        $count = db::name("courier")->where($where)->order("sort desc")->count();
        $list = db::name("courier")->where($where)->order("sort desc")->page($this->page,$this->limit)->select();
        return $this->layui_json($count,$list);
    }

    /*快递公司列表字段修改*/
    public function courier_field_update()
    {
        $id = input("param.id");
        $field_name = input("param.field_name");
        $info[$field_name] = input("param.value");
        db::name("courier")->where("id = $id")->data($info)->update();
        return $this->succeed_json("操作成功");
    }

    /**
     * 快递公司创建
     */
    public function courier_upload()
    {
        $id = input("param.id");
        if (input("post.")){
            $info = [
                'name'=>input("param.name"),
                'sort'=>input("param.sort"),
                'add_time'=>time(),
            ];
            if (empty($id)){
                db::name("courier")->insertGetId($info);
            }else{
                db::name("courier")->where("id = $id")->data($info)->update();
            }
            return $this->succeed_json("操作成功");
        }else{
            $info = ['name'=>'','sort'=>0];
            if (!empty($id)){
                $info = db::name("courier")->where("id = $id")->find();
            }
            $upload_url = url('upload/image')->build();
            $form = new Form();
            $form->input('name', '快递名称',$info["name"])->required();
            $form->number('sort', '排序',$info["sort"]);
            $form->hidden('id',$id);
            $form->button('/admin/Config/courier_upload');
            return $form;
        }
    }

    /**
     * 快递公司删除
     */
    public function courier_del()
    {
        $id = input("param.id");
        db::name("courier")->where("id = $id")->delete();
        return $this->succeed_json("删除成功");
    }

    /*留言列表*/
    public function leave_word_list()
    {
        return View::fetch();
    }

    /*留言列表信息*/
    public function leave_word_list_ajax()
    {
        $name = input("param.name");
        $is_check = input("param.is_check");
        $where = 1;
        if (!empty($name)){
            $where .= " and ( a.describe like '%".$name."%' or b.name like '%".$name."%' or b.mobile like '%".$name."%')";
        }
        if ($is_check != ''){
            $where .= " and a.is_check = $is_check";
        }
        $list = db::name("leave_word")->alias("a")
            ->join("user b","a.user_id = b.user_id",'LEFT')
            ->field("a.*,b.name as user_name,b.mobile as user_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"]);
            $list[$k]["is_check"] = $v["is_check"]==0?'待查看':'已查看';
        }
        $count = db::name("leave_word")->alias("a")
            ->join("user b","a.user_id = b.user_id",'LEFT')
            ->where($where)
            ->count();
        return $this->layui_json($count,$list);
    }

    /*留言信息处理*/
    public function leave_word_update()
    {
        $id = input("param.id");
        if (input("post.")) {
            $info = [
                'describe_reply'=>input("param.describe_reply"),
                'check_time'=>time(),
                'is_check'=>1,
            ];
            db::name("leave_word")->where("id = $id")->data($info)->update();
            return $this->succeed_json("操作成功");
        }else{
            $leave_word_info = db::name("leave_word")->where("id = $id")->find();
            $form = new Form();
            $form->input('describe', '留言内容',$leave_word_info["describe"])->type('textarea')->disabled(true);
            $form->editor('describe_reply', '回复内容',$leave_word_info["describe_reply"])->action('/admin/ad/uploads');
            $form->button('/admin/Config/leave_word_update');
            $form->hidden('id',$id);
            return $form;
        }
    }

    /*留言删除*/
    public function leave_word_del()
    {
        $id = input("param.id");
        db::name("leave_word")->where("id = $id")->delete();
        return $this->succeed_json("删除成功");
    }

    /*APP更新日志*/
    public function app_upload_log()
    {
        return View::fetch();
    }

    /*APP更新日志数据*/
    public function app_upload_log_ajax()
    {
        $list = db::name("config_upload_log")->alias("a")
            ->join("admin b","a.admin_id = b.admin_id","LEFT")
            ->field("a.*,b.user_name,b.nickname")
            ->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("config_upload_log")->alias("a")
            ->join("admin b","a.admin_id = b.admin_id","LEFT")
            ->field("a.*")
            ->count();
        return $this->layui_json($count,$list);
    }

    /*其它分类处理*/
    public function other_act()
    {
        $type = input("param.type");
        View::assign([
            'type'=>$type,
        ]);
        return View::fetch();
    }

    /*其他分类数据*/
    public function other_act_ajax()
    {
        $type = input("param.type");
        $name = input("param.name");
        $where = 1;
        if (!empty($name)){
            $where .= " and name like '%".$name."%'";
        }
        if (!empty($type)){
            $where .= " and type = $type";
        }
        $list = db::name("other_act")->where($where)->order("id desc")->page($this->page,$this->limit)->select()->toArray();
        foreach ($list as $k => $v){
            $list[$k]["count_yuyue"] = db::name("user_activity_dianmian")->where("activity_id = $v[id]")->count();
            $list[$k]["time_add"] = date("Y-m-d H:i",$v["time_add"]);
        }
        $count= db::name("other_act")->where($where)->count();
        return $this->layui_json($count,$list);
    }

    /*其它分类字段修改*/
    public function other_field_update()
    {
        $id = input("param.id");
        $field_name = input("param.field_name");
        $info[$field_name] = input("param.value");
        db::name("other_act")->where("id = $id")->data($info)->update();
        return $this->succeed_json("操作成功");
    }

    /*其它分类表单处理*/
    public function form_other_update()
    {
        $id = input("param.id");
        $type = input("param.type");
        if (input("post.")){
            $info = [
                'type'=>input("param.type"),
                'name'=>input("param.name"),
                'is_show'=>0,
                'time_add'=>time(),
            ];
            if (empty($id)){
                db::name("other_act")->insertGetId($info);
            }else{
                db::name("other_act")->where("id = $id")->data($info)->update();
            }
            return $this->succeed_json("操作成功");
        }else {
            $info = ['name'=>''];
            if (!empty($id)){
               $info = db::name("other_act")->where("id = $id")->find();
            }
            $form = new Form();
            $form->input('name', '名称',$info["name"])->required();
            $form->hidden('id',$id);
            $form->hidden('type',$type);
            $form->button('/admin/Config/form_other_update');
            return $form;
        }
    }

    /*其它分类查询*/
    public function other_act_list()
    {
        $type = input("param.type");
        $where = 1;
        if (!empty($type)){
            $where .= " and type = $type";
        }
        $list = db::name("other_act")->where($where)->order("id desc")->select()->toArray();
        $data = [
            'list'=>$list,
        ];
        return $this->succeed_json("ok",$data);
    }

    /*其它分类删除*/
    public function other_act_del()
    {
        $id = input("param.id");
        db::name("other_act")->where("id = $id")->delete();
        return $this->succeed_json("删除成功");
    }

    /*地区管理*/
    public function region_list()
    {
        return View::fetch();
    }

    /*地区管理数据*/
    public function region_list_ajax()
    {
        $type_yibu = input("param.type_yibu");
        $pid = input("param.pid");
        $title = input("param.title");
        $where = 1;
        if (!empty($title)){
            $where .= " and name like '%".$title."%'";
        }else{
            if (!empty($pid)){
                $where .= " and pid = $pid";
            }else{
                $where .= " and level = 1";
            }
        }
        if ($type_yibu == 1) {
            $list = db::name("region")->where($where)->order("first asc")->select()->toArray();
        }else{
            $list = db::name("region")->where($where)->order("first asc")->page($this->page,$this->limit)->select()->toArray();
        }
        foreach ($list as $k => $v){
            $list[$k]["icon"] = '';
            //二级分类
            $list2 = db::name("region")->where("pid = $v[id]")->order("first asc")->select()->toArray();
            foreach ($list2 as $k2 => $v2){
                $list2[$k2]["icon"] = '';
            }
            $list[$k]["children"] = $list2;
        }
        $count = db::name("region")->where($where)->count();
        return $this->layui_json($count,$list);
    }

    /*地区创建*/
    public function region_update()
    {
        $id = input("param.id");
        if (input("post.")){
            $province = input("param.province");
            $city = input("param.city");
            $district = input("param.district");
            $province_name = db::name("region")->where("id = $province")->value("name");
            $city_name = db::name("region")->where("id = $city")->value("name");
            $district_name = db::name("region")->where("id = $district")->value("name");
            $pid = 0;
            $mergename = '中国';
            $level = 0;
            if (!empty($province)){
                $pid = $province;
                $mergename .= ','.$province_name;
                $level = 1;
            }
            if (!empty($city)){
                $pid = $city;
                $mergename .= ','.$city_name;
                $level = 2;
            }
            if (!empty($district)){
                $pid = $district;
                $mergename .= ','.$district_name;
                $level = 3;
            }
            $level += 1;
            $info = [
                'pid'=>$pid,
                'name'=>input("param.name"),
                'first'=>input("param.first"),
                'shortname'=>input("param.name"),
                'mergename'=>$mergename.','.input("param.name"),
                'level'=>$level,
            ];
            if (empty($id)){
                db::name("region")->insertGetId($info);
            }else{
                db::name("region")->where("id = $id")->data($info)->update();
            }
            return $this->succeed_json("操作成功");
        }else{
            $list = db::name("region")->where("pid = 0")->order("id asc")->select()->toArray();
            View::assign([
                'id'=>$id,
                'list'=>$list,
            ]);
            return View::fetch();
        }
    }

    /*地区信息查询*/
    public function region_info()
    {
        $id = input("param.id");
        $info = db::name("region")->where("id = $id")->find();
        if ($info["level"] == 1){
            $info["province_id"] = 0;
            $info["city_id"] = 0;
            $info["district_id"] = 0;
        }else if($info["level"] == 2){
            $info["province_id"] = $info["pid"];
            $info["city_id"] = 0;
            $info["district_id"] = 0;
        }else if($info["level"] == 3){
            $region = db::name("region")->alias("a")
                ->join("region b","a.pid = b.id","left")
                ->join("region c","b.pid = c.id","left")
                ->field("b.name as city_name,b.id as city_id,c.name as province_name,c.id as province_id")
                ->where("a.id = $id")
                ->find();
            $info["province_id"]=$region["province_id"];
            $info["city_id"]=$region["city_id"];
            $info["district_id"] = 0;
        }else if($info["level"] == 4){
            $region = db::name("region")->alias("a")
                ->join("region b", "a.pid = b.id","left")
                ->join("region c", "b.pid = c.id","left")
                ->join("region d", "c.pid = d.id","left")
                ->field("b.name as district_name,b.id as district_id,c.name as city_name,c.id as city_id,d.name as province_name,d.id as province_id")
                ->where("a.id = $id")
                ->find();
            $info["province_id"]=$region["province_id"];
            $info["city_id"]=$region["city_id"];
            $info["district_id"] = $region["district_id"];
        }
        $data = [
            'info'=>$info,
        ];
        return $this->succeed_json('ok',$data);
    }

    /*地区信息删除*/
    public function region_del()
    {
        $id = input("param.id");
        db::name("region")->where("id = $id")->delete();
        return $this->succeed_json('删除成功');
    }

    /*地区联动*/
    public function region_d()
    {
        $region_id = input("param.region_id");
        $list = Common_config::region_d($region_id);
        $data = [
            'list'=>$list,
        ];
        return $this->succeed_json("ok", $data);
    }

    /*自提点列表*/
    public function warehouse_list()
    {
        return View::fetch();
    }

    /*自提点数据*/
    public function warehouse_list_ajax()
    {
        $keyword = input("param.keyword");
        $where = 1;
        if (!empty($keyword)){
            $where .= " and (a.ware_name like '%".$keyword."%' or a.name like '%".$keyword."%' or a.phone like '%".$keyword."%')";
        }
        $list = db::name("warehouse")->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($where)
            ->order("a.sort desc,a.id desc")
            ->page($this->page,$this->limit)
            ->select()
            ->toArray();
        foreach ($list as $k => $v){
            $address = '';
            if (!empty($v["province_name"])){
                $address .= $v["province_name"].',';
            }
            if (!empty($v["city_name"])){
                $address .= $v["city_name"].',';
            }
            if (!empty($v["district_name"])){
                $address .= $v["district_name"].',';
            }
            $address = $address != ''?$address.$v["address"]:$v["address"];
            $list[$k]["address"] = $address;
            $list[$k]["time_add"] = date("Y-m-d H:i",$v["time_add"]);
        }
        $count = db::name("warehouse")->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")
            ->where($where)
            ->count();
        return $this->layui_json($count,$list);
    }

    /*自提点字段修改*/
    public function warehouse_field_update()
    {
        $id = input("param.id");
        $field_name = input("param.field_name");
        $info[$field_name] = input("param.value");
        db::name("warehouse")->where("id = $id")->data($info)->update();
        return $this->succeed_json("操作成功");
    }

    /*自提点创建*/
    public function warehouse_update()
    {
        $id = input("param.id");
        if ($_POST){
            $info = [
                'ware_name'=>input("param.ware_name"),
                'name'=>input("param.name"),
                'phone'=>input("param.phone"),
                'province'=>0,
                'city'=>0,
                'district'=>0,
                'region_id_str'=>'',
                'address'=>input("param.address"),
                'is_show'=>input("param.is_show"),
                'time_add'=>time(),
            ];
            if (!empty(input("param.region_id_str"))){
                $info["region_id_str"] = implode(",", input("param.region_id_str"));
                if (!empty(input("param.region_id_str")[0])){
                    $info["province"] = input("param.region_id_str")[0];
                }
                if (!empty(input("param.region_id_str")[1])){
                    $info["city"] = input("param.region_id_str")[1];
                }
                if (!empty(input("param.region_id_str")[2])){
                    $info["district"] = input("param.region_id_str")[2];
                }
            }
            if (empty($id)){
                db::name("warehouse")->insertGetId($info);
            }else{
                db::name("warehouse")->where("id = $id")->update($info);
            }
            return $this->succeed_json("操作成功");
        }else{
            $info = ['ware_name'=>'','name'=>'','phone'=>'','region_id_str'=>[],'address'=>'','is_show'=>1];
            if (!empty($id)){
                $info = db::name("warehouse")->where("id = $id")->find();
                $info["region_id_str"] = $info["region_id_str"] != ''?explode(',',$info['region_id_str']):[];
            }
            $form = new Form();
            $form->tabs('tabs1', '基本信息');
            $form->input('ware_name', '自提点名称',$info["ware_name"])->required()->tabs('tabs1');
            $form->input('name', '联系人姓名',$info["name"])->required()->tabs('tabs1');
            $form->input('phone', '联系人手机号',$info["phone"])->required()->tabs('tabs1');
            $form->cascader('region_id_str', '地区', $info["region_id_str"])->setOptions(function () {
                $menus = Common_config::region_dw();
                return $menus;
            })->tabs('tabs1')->required('','array');
            $form->input('address', '详细地址',$info["address"])->required()->tabs('tabs1');
            $form->radio('is_show', '显示', $info["is_show"])->setOptions(function () {
                $menus[] = ['label' => '是', 'value' => '1'];
                $menus[] = ['label' => '否', 'value' => '0'];
                return $menus;
            })->tabs('tabs1')->required();
            $form->hidden('id',$id);
            $form->button('/admin/Config/warehouse_update');
            return $form;
        }
    }

    /*自提点删除*/
    public function warehouse_del()
    {
        $id = input("param.id");
        db::name("warehouse")->where("id = $id")->delete();
        return $this->succeed_json('删除成功');
    }
}