🔓 Ultimate Webshell - Penetration Testing Tool

📖 File Reader

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

class Article extends Base
{
    /*分类列表*/
    public function act_list()
    {
        return View::fetch();
    }

    /*分类列表数据*/
    public function act_list_ajax()
    {
        $keyword = input("param.keyword");
        $where = 1;
        if (!empty($keyword)){
            $where .= " and name like '%".$keyword."%'";
        }
        $list = db::name("article_act")->where($where)->order("sort desc")->select()->toArray();
        foreach ($list as $k => $v){
            $list[$k]["time_add"] = date("Y-m-d H:i",$v["time_add"]);
        }
        $count = db::name("article_act")->where($where)->count();
        return $this->layui_json($count,$list);
    }

    /*分类数据获取(用于多选查询)*/
    public function act_checked_list()
    {
        $act_id = input("param.act_id");
        $where = 1;
        if (!empty($act_id)){
            $where .= " and id in (".$act_id.")";
        }
        $list = db::name("article_act")->where($where)->order("sort desc")->select()->toArray();
        $checked_data = [];
        foreach ($list as $v){
            $checked_data[] = [
                'id'=>$v["id"],
                'title'=>$v["name"],
                'spread'=>true,
                'children'=>[],
            ];
        }
        $data = [
            'checked_data'=>$checked_data,
        ];
        return $this->succeed_json("ok",$data);
    }

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

    /*分类上传处理*/
    public function act_update()
    {
        $id = input("param.id");
        if (input("post.")){
            $info = [
                'name'=>input("param.name"),
                'sort'=>input("param.sort"),
                'time_add'=>time(),
            ];
            if (empty($id)){
                db::name("article_act")->insertGetId($info);
            }else{
                db::name("article_act")->where("id = $id")->data($info)->update();
            }
            return $this->succeed_json("操作成功");
        }else {
            $info = ['name'=>'','sort'=>0];
            if (!empty($id)){
                $info = db::name("article_act")->where("id = $id")->find();
            }
            $form = new Form();
            $form->tabs('tabs1', '基本信息');
            $form->input('name', '名称',$info["name"])->required()->tabs('tabs1');
            $form->number('sort', '排序', $info["sort"])->tabs('tabs1');
            $form->hidden('id',$id);
            $form->button('/admin/Article/act_update');
            return $form;
        }
    }

    /*分类删除*/
    public function act_del()
    {
        $id = input("param.id");
        $article_count = db::name("article")->where("act_id = $id")->count();
        if (!empty($article_count)){
            return $this->error_json("该分类下存在文章数据,不可删除!");
        }
        db::name("article_act")->where("id = $id")->delete();
        return $this->succeed_json("删除成功");
    }

    /*文章列表*/
    public function article_list()
    {
        $act_id = input("param.act_id");
        $where = 1;
        if ($act_id != ''){
            $where .= " and id in ($act_id)";
        }
        $list = db::name("article_act")->where($where)->order("sort desc")->select()->toArray();
        View::assign([
            'act_id'=>$act_id,
            'list'=>$list,
        ]);
        return View::fetch();
    }

    /*系统文章*/
    public function article_list_d()
    {
        return View::fetch();
    }

    /*文章信息*/
    public function article_list_ajax()
    {
        $title = input("param.title");
        $act_id_lanmu = input("param.act_id_lanmu");//该列表支持查询的分类id
        $act_id = input("param.act_id");
        $checked_act_id = input("param.checked_act_id");
        $where = 1;
        if (!empty($title)){
            $where .= " and a.title like '%".$title."%'";
        }
        if ($act_id_lanmu != ''){
            $where .= " and a.act_id in ($act_id_lanmu)";
        }
        if ($act_id != ''){
            $where .= " and a.act_id = $act_id";
        }else{
            $where .= " and a.act_id != 0";
        }
        if (!empty($checked_act_id)){
            $checked_act_id = implode(",", $checked_act_id);
            $where .= " and a.act_id in ($checked_act_id)";
        }
        $list = db::name("article")->alias("a")
            ->join("article_act b","a.act_id = b.id","LEFT")
            ->field("a.id,a.act_id,a.title,a.img,a.describe,a.is_show,a.browse_sum,a.add_time,b.name as name_act")
            ->where($where)
            ->order("a.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"]);
            $list[$k]["img"] = str_replace('\\', "/", $v["img"]);
        }
        //获取总页数
        $count = db::name("article")->alias("a")
            ->join("article_act b","a.act_id = b.id","LEFT")
            ->where($where)
            ->count();
        return $this->layui_json($count,$list);
    }

    /*文章预览*/
    public function article_preview()
    {
        $id = input("param.id");
        View::assign([
            'id'=>$id,
        ]);
        return View::fetch();
    }

    /*文章详情*/
    public function article_info()
    {
        $id = input("param.id");
        $article_info = db::name("article")->where("id = $id")->find();
        $article_info["add_time"] = date("Y-m-d",$article_info["add_time"]);
        /*附件下载*/
//        $file_data = $article_info["file_data"] != ''?explode(',',$article_info['file_data']):[];
//        $file_data_regroup = [];
//        foreach ($file_data as $v){
//            $pathinfo = pathinfo($v);
//            $basename = $pathinfo['basename']; // 获取文件名,包含扩展名
//            $extension = strrchr($basename, '.');
//            $extension = str_replace(".","",$extension);
//            $data = [
//                'url'=>$v,
//                'type'=>$extension,
//            ];
//            $file_data_regroup[] = $data;
//        }
        $data = [
            'article_info'=>$article_info,
        ];
        return $this->succeed_json("ok",$data);
    }

    /*文章表单处理*/
    public function form_article_update()
    {
        $id = input("param.id");
        $act_id_lanmu = input("param.act_id_lanmu");//该列表支持查询的分类id
        if ($_POST){
            $info = [
                'title'=>input("param.title"),
                'act_id'=>input("param.act_id"),
                'describe'=>input("param.describe"),
                'img'=>input("param.img") != ''?implode(",", input("param.img")):'',
                'browse_sum'=>input("param.browse_sum"),
                'content'=>input("param.content"),
                'is_show'=>input("param.is_show"),
                'add_time'=>input("param.add_time") != ''?strtotime(input("param.add_time")):time(),
            ];
            /*把富文本里的图片bese64格式转换为路径*/
            if (!empty($info["content"])){
                $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'];
                $content_img_data = Common_config::getPatternMatchImages($info["content"]);
                foreach ($content_img_data as $v){
                    $content_arr = explode(',',$v);
                    if($content_arr[0] == 'data:image/png;base64'){
                        $transition_img = Common_config::bese64_transition($v);
                        if ($transition_img["code"] == 200){
                            $img_link = $url.$transition_img["file_link"];
                            $info["content"] = str_replace($v, $img_link, $info["content"]);
                        }
                    }
                }
            }
            if (empty($id)){
                db::name("article")->insertGetId($info);
            }else{
                db::name("article")->where("id = $id")->data($info)->update();
            }
            return $this->succeed_json("操作成功");
        }else{
            $time =  date("Y-m-d H:i",time());
            $info = ['title'=>'','act_id'=>'','describe'=>'','img'=>[],'browse_sum'=>0,'content'=>'','add_time'=>$time,'is_show'=>1];
            if (!empty($id)){
                $info = db::name("article")->where("id = $id")->find();
                $info["img"] = $info["img"] != ''?explode(',',$info['img']):[];
                $info["add_time"] = $info["add_time"] != 0?date("Y-m-d H:i",$info["add_time"]):'';
            }
            $form = new Form();
            $form->tabs('tabs1', '基本信息');
            $form->tabs('tabs2', '详细描述');
            $form->input('title', '标题',$info["title"])->required()->tabs('tabs1');
            $form->selectOne('act_id', '所属分类',$info["act_id"])->setOptions(function() use($act_id_lanmu){
                $where = 1;
                if (!empty($act_id_lanmu)){
                    $where .= " and id in ($act_id_lanmu)";
                }
                $list_act = db::name("article_act")->where($where)->order("sort desc")->select()->toArray();
                $menus = [];
                foreach ($list_act as $k => $v){
                    $menus[] = ['label'=>$v["name"],'value'=>$v["id"]];
                }
                return $menus;
            })->multiple(false)->filterable(false)->required()->tabs('tabs1');
            $form->input('describe', '简单描述',$info["describe"])->type('textarea')->tabs('tabs1');
            $form->upload('img', '缩略图', '/admin/ad/uploads', $info['img'])->nultiple(false)->required('',"array")->tabs('tabs1');
            $form->number('browse_sum', '浏览量', $info["browse_sum"])->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->datetime('add_time', '时间',$info["add_time"])->tabs('tabs1')->type('datetime')->required();
            $form->editor('content', '详细信息',$info["content"])->action('/admin/ad/uploads')->tabs('tabs2');
            $form->hidden('id',$id);
            $form->button('/admin/Article/form_article_update');
            return $form;
        }
    }

    /*文章表单处理*/
    public function form_article_d_update()
    {
        $id = input("param.id");
        if ($_POST){
            $info = [
                'title'=>input("param.title"),
                'act_id'=>0,
                'is_show'=>1,
                'browse_sum'=>input("param.browse_sum"),
                'content'=>input("param.content"),
                'add_time'=>time(),
            ];
            /*把富文本里的图片bese64格式转换为路径*/
            if (!empty($info["content"])){
                $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'];
                $content_img_data = Common_config::getPatternMatchImages($info["content"]);
                foreach ($content_img_data as $v){
                    $content_arr = explode(',',$v);
                    if($content_arr[0] == 'data:image/png;base64'){
                        $transition_img = Common_config::bese64_transition($v);
                        if ($transition_img["code"] == 200){
                            $img_link = $url.$transition_img["file_link"];
                            $info["content"] = str_replace($v, $img_link, $info["content"]);
                        }
                    }
                }
            }
            if (empty($id)){
                db::name("article")->insertGetId($info);
            }else{
                db::name("article")->where("id = $id")->data($info)->update();
            }
            return $this->succeed_json("操作成功");
        }else{
            $article_info = ['title'=>'','act_id'=>0,'describe'=>'','img'=>'','browse_sum'=>0,'content'=>''];
            if (!empty($id)){
                $article_info = db::name("article")->where("id = $id")->find();
            }
            $form = new Form();
            $form->tabs('tabs1', '基本信息');
            $form->input('title', '标题',$article_info["title"])->disabled(true)->tabs('tabs1');
            $form->number('browse_sum', '浏览量',$article_info["browse_sum"])->tabs('tabs1');
            $form->editor('content', '详细内容',$article_info["content"])->action('/admin/ad/uploads')->tabs('tabs1');
            $form->hidden('id',$id);
            $form->button("/admin/Article/form_article_d_update");
            return $form;
        }
    }

    /*文章删除*/
    public function article_del()
    {
        $id = input("param.id");
        db::name("article")->where("id = $id")->delete();
        return $this->succeed_json("删除成功");
    }

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