CustomTemplateLogic.php 7.4 KB
<?php

namespace App\Http\Logic\Bside\BTemplate;

use App\Http\Logic\Bside\BaseLogic;
use App\Models\RouteMap\RouteMap;
use App\Models\Service\Service as ServiceSettingModel;
use App\Models\Template\BCustomTemplate;
use App\Models\Template\BSetting;
use App\Models\Template\BTemplate;

class CustomTemplateLogic extends BaseLogic
{
    public function __construct()
    {
        parent::__construct();
        $this->model = new BCustomTemplate();
        $this->param = $this->requestAll;
    }

    /**
     * @remark :获取自定义模块列表
     * @name   :lists
     * @author :lyh
     * @method :post
     * @time   :2023/6/29 15:46
     */
    public function customTemplateLists($map,$page,$row,$order = 'created_at',$filed = ['*']){
        $map['deleted_status'] = 0;
        $map['project_id'] = $this->user['project_id'];
        $lists = $this->model->lists($map,$page,$row,$order,$filed);
        return $this->success($lists);
    }

    /**
     * @remark :获取当前自定义界面详情
     * @name   :customTemplateInfo
     * @author :lyh
     * @method :post
     * @time   :2023/6/29 16:23
     */
    public function customTemplateInfo(){
        $info = $this->model->read(['id'=>$this->param['id']]);
        $html = $this->getBodyHeaderFooter($info['html'],$info['html_style']);
        $info['html'] = $this->getHeadFooter($html);
        if($info === false){
            $this->fail('error');
        }
        return $this->success($info);
    }

    /**
     * @remark :保存自定义界面
     * @name   :customTemplateSave
     * @author :lyh
     * @method :post
     * @time   :2023/6/29 16:21
     */
    public function customTemplateSave(){
        try {
            $this->param['url'] = str_replace_url($this->param['url']);
            if(isset($this->param['id']) && !empty($this->param['id'])){
                $id = $this->editCustomRoute($this->param['id'],$this->param['url']);
                $this->model->edit($this->param,['id'=>$this->param['id']]);
            }else{
                $this->param['project_id'] = $this->user['project_id'];
                $id = $this->model->addReturnId($this->param);
            }
            $route = RouteMap::setRoute($this->param['url'], RouteMap::SOURCE_PAGE, $id, $this->user['project_id']);
            $this->model->edit(['url'=>$route],['id'=>$id]);
        }catch (\Exception $e){
            $this->fail('error');
        }
        return $this->success();
    }

    /**
     * @remark :可视化保存html
     * @name   :saveHtml
     * @author :lyh
     * @method :post
     * @time   :2023/9/16 17:13
     */
    public function saveHtml(){
        $html = $this->param['html'];
        $this->param['html'] = characterTruncation($html,'/<main>(.*?)<\/main>/s');
        $this->param['html_style'] = characterTruncation($html,'/<style id="globalsojs-styles">(.*?)<\/style>/s');
        $rs = $this->model->edit($this->param,['id'=>$this->param['id']]);
        if($rs === false){
            $this->fail('系统错误,请联系管理');
        }
        //TODO::通知网站更新
        $info = $this->model->read(['id'=>$this->param['id']],['id','url']);
        $data = ['project_id'=>$this->user['project_id'], 'type'=>RouteMap::SOURCE_PAGE, 'route'=>$info['url']];
        $this->updateNotify($data);
        return $this->success();
    }

    /**
     * @remark :查看路由是否更新
     * @name   :editProduct
     * @author :lyh
     * @method :post
     * @time   :2023/9/7 10:02
     */
    public function editCustomRoute($id,$route){
        $info = $this->model->read(['id'=>$this->param['id']]);
        if($info['url'] != $route){
            //生成一条删除路由记录
            $data = [
                'source'=>RouteMap::SOURCE_PAGE,
                'route'=>$info['url'],
            ];
            $this->setRouteDeleteSave($data);
        }
        return $id;
    }

    /**
     * @remark :删除自定义界面
     * @name   :customTemplateDel
     * @author :lyh
     * @method :post
     * @time   :2023/6/29 16:21
     */
    public function customTemplateDel(){
        try {
            $this->delRoute($this->param['id']);
            $this->model->del(['id'=>$this->param['id']]);
        }catch (\Exception $e){
            $this->fail('系统错误,请联系管理员');
        }
        return $this->success();
    }

    /**
     * @remark :删除路由
     * @name   :delRoute
     * @author :lyh
     * @method :post
     * @time   :2023/9/7 10:50
     */
    public function delRoute($id)
    {
        //删除路由映射
        RouteMap::delRoute(RouteMap::SOURCE_PAGE, $id, $this->user['project_id']);
        //生成一条删除路由记录
        $info = $this->model->read(['id' => $id], ['id', 'url']);
        $data = [
            'source' => RouteMap::SOURCE_NEWS,
            'route' => $info['url'],
        ];
        $this->setRouteDeleteSave($data);
        return $this->success();
    }

    /**
     * @remark :获取body的详情
     * @name   :getBodyHeaderFooter
     * @author :lyh
     * @method :post
     * @time   :2023/7/21 18:08
     */
    public function getBodyHeaderFooter($preg_html,$html_style){
        //获取设置的默认模版
        $bSettingModel = new BSetting();
        $info = $bSettingModel->read(['project_id'=>$this->user['project_id']]);
        //获取模板详情
        $bTemplateModel = new BTemplate();
        $TemplateInfo = $bTemplateModel->read([
            'template_id'=>$info['template_id'],
            'project_id'=>$this->user['project_id'],
            'source'=>1//首页
        ]);
        $html = '';
        if($TemplateInfo !== false){
            if(empty($preg_html)){
                $preg_html  = "<main></main>";
                $html = preg_replace('/<style id="globalsojs-styles">(.*?)<\/style>/s', "<style id='globalsojs-styles'></style>", $TemplateInfo['html']);
            }else{
                $html = preg_replace('/<style id="globalsojs-styles">(.*?)<\/style>/s',$html_style , $TemplateInfo['html']);
            }
            //内容
            $html = preg_replace('/<main\b[^>]*>(.*?)<\/main>/s', $preg_html, $html);
        }
        return $html;
    }

    /**
     * @remark :拼接获取公共头部底部
     * @name   :getHeadFooter
     * @author :lyh
     * @method :post
     * @time   :2023/7/21 17:22
     */
    public function getHeadFooter($html = ''){
        //获取公共主题头部底部
        $serviceSettingModel = new ServiceSettingModel();
        $list = $serviceSettingModel->list(['type'=>2],'created_at');
        //拼接html
        foreach ($list as $v){
            if($v['key'] == 'head'){
                $html = $v['values'].$html;
            }
            if($v['key'] == 'footer'){
                $html = $html.$v['values'];
            }
        }
        return $html;
    }

    /**
     * @remark :根据状态获取数量
     * @name   :getStatusNumber
     * @author :lyh
     * @method :post
     * @time   :2023/7/29 17:40
     */
    public function getStatusNumber(){
        //三种状态 0:草稿 1:发布 2:回收站
        $data = ['dra'=>0,'pub'=>1,'del'=>2,'tal'=>3];
        foreach ($data as $k => $v){
            if($v == 3){
                $data[$k] = $this->model->where(['deleted_status'=>0,'project_id'=>$this->user['project_id']])->count();
            }else{
                $data[$k] = $this->model->where(['status'=>$v,'deleted_status'=>0,'project_id'=>$this->user['project_id']])->count();
            }
        }
        return $this->success($data);
    }
}