239 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			239 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| 
								 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace app\common\model;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								use think\Model;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * 配置模型
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								class Config extends Model
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    // 表名,不含前缀
							 | 
						||
| 
								 | 
							
								    protected $name = 'config';
							 | 
						||
| 
								 | 
							
								    // 自动写入时间戳字段
							 | 
						||
| 
								 | 
							
								    protected $autoWriteTimestamp = false;
							 | 
						||
| 
								 | 
							
								    // 定义时间戳字段名
							 | 
						||
| 
								 | 
							
								    protected $createTime = false;
							 | 
						||
| 
								 | 
							
								    protected $updateTime = false;
							 | 
						||
| 
								 | 
							
								    // 追加属性
							 | 
						||
| 
								 | 
							
								    protected $append = [
							 | 
						||
| 
								 | 
							
								        'extend_html'
							 | 
						||
| 
								 | 
							
								    ];
							 | 
						||
| 
								 | 
							
								    protected $type = [
							 | 
						||
| 
								 | 
							
								        'setting' => 'json',
							 | 
						||
| 
								 | 
							
								    ];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * 读取配置类型
							 | 
						||
| 
								 | 
							
								     * @return array
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public static function getTypeList()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $typeList = [
							 | 
						||
| 
								 | 
							
								            'string'        => __('String'),
							 | 
						||
| 
								 | 
							
								            'password'      => __('Password'),
							 | 
						||
| 
								 | 
							
								            'text'          => __('Text'),
							 | 
						||
| 
								 | 
							
								            'editor'        => __('Editor'),
							 | 
						||
| 
								 | 
							
								            'number'        => __('Number'),
							 | 
						||
| 
								 | 
							
								            'date'          => __('Date'),
							 | 
						||
| 
								 | 
							
								            'time'          => __('Time'),
							 | 
						||
| 
								 | 
							
								            'datetime'      => __('Datetime'),
							 | 
						||
| 
								 | 
							
								            'datetimerange' => __('Datetimerange'),
							 | 
						||
| 
								 | 
							
								            'select'        => __('Select'),
							 | 
						||
| 
								 | 
							
								            'selects'       => __('Selects'),
							 | 
						||
| 
								 | 
							
								            'image'         => __('Image'),
							 | 
						||
| 
								 | 
							
								            'images'        => __('Images'),
							 | 
						||
| 
								 | 
							
								            'file'          => __('File'),
							 | 
						||
| 
								 | 
							
								            'files'         => __('Files'),
							 | 
						||
| 
								 | 
							
								            'switch'        => __('Switch'),
							 | 
						||
| 
								 | 
							
								            'checkbox'      => __('Checkbox'),
							 | 
						||
| 
								 | 
							
								            'radio'         => __('Radio'),
							 | 
						||
| 
								 | 
							
								            'city'          => __('City'),
							 | 
						||
| 
								 | 
							
								            'selectpage'    => __('Selectpage'),
							 | 
						||
| 
								 | 
							
								            'selectpages'   => __('Selectpages'),
							 | 
						||
| 
								 | 
							
								            'array'         => __('Array'),
							 | 
						||
| 
								 | 
							
								            'custom'        => __('Custom'),
							 | 
						||
| 
								 | 
							
								        ];
							 | 
						||
| 
								 | 
							
								        return $typeList;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public static function getRegexList()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $regexList = [
							 | 
						||
| 
								 | 
							
								            'required' => '必选',
							 | 
						||
| 
								 | 
							
								            'digits'   => '数字',
							 | 
						||
| 
								 | 
							
								            'letters'  => '字母',
							 | 
						||
| 
								 | 
							
								            'date'     => '日期',
							 | 
						||
| 
								 | 
							
								            'time'     => '时间',
							 | 
						||
| 
								 | 
							
								            'email'    => '邮箱',
							 | 
						||
| 
								 | 
							
								            'url'      => '网址',
							 | 
						||
| 
								 | 
							
								            'qq'       => 'QQ号',
							 | 
						||
| 
								 | 
							
								            'IDcard'   => '身份证',
							 | 
						||
| 
								 | 
							
								            'tel'      => '座机电话',
							 | 
						||
| 
								 | 
							
								            'mobile'   => '手机号',
							 | 
						||
| 
								 | 
							
								            'zipcode'  => '邮编',
							 | 
						||
| 
								 | 
							
								            'chinese'  => '中文',
							 | 
						||
| 
								 | 
							
								            'username' => '用户名',
							 | 
						||
| 
								 | 
							
								            'password' => '密码'
							 | 
						||
| 
								 | 
							
								        ];
							 | 
						||
| 
								 | 
							
								        return $regexList;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public function getExtendHtmlAttr($value, $data)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $result = preg_replace_callback("/\{([a-zA-Z]+)\}/", function ($matches) use ($data) {
							 | 
						||
| 
								 | 
							
								            if (isset($data[$matches[1]])) {
							 | 
						||
| 
								 | 
							
								                return $data[$matches[1]];
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }, $data['extend']);
							 | 
						||
| 
								 | 
							
								        return $result;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * 读取分类分组列表
							 | 
						||
| 
								 | 
							
								     * @return array
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public static function getGroupList($cates = null,$space = "-")
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $groupList = config('site.configgroup');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        foreach ($groupList as $k => &$v) {
							 | 
						||
| 
								 | 
							
								            $v = __($v);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        //array_intersect
							 | 
						||
| 
								 | 
							
								        if($cates){
							 | 
						||
| 
								 | 
							
								            $cates = explode($space,$cates);
							 | 
						||
| 
								 | 
							
								            $cate_datas = [];
							 | 
						||
| 
								 | 
							
								            foreach ($cates as $cate) {
							 | 
						||
| 
								 | 
							
								                $cate_datas[$cate] = $cate ;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            $groupList = array_intersect_key($groupList,$cate_datas);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        return $groupList;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    public static function getArrayData($data)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        if (!isset($data['value'])) {
							 | 
						||
| 
								 | 
							
								            $result = [];
							 | 
						||
| 
								 | 
							
								            foreach ($data as $index => $datum) {
							 | 
						||
| 
								 | 
							
								                $result['field'][$index] = $datum['key'];
							 | 
						||
| 
								 | 
							
								                $result['value'][$index] = $datum['value'];
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            $data = $result;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        $fieldarr = $valuearr = [];
							 | 
						||
| 
								 | 
							
								        $field = $data['field'] ?? ($data['key'] ?? []);
							 | 
						||
| 
								 | 
							
								        $value = $data['value'] ?? [];
							 | 
						||
| 
								 | 
							
								        foreach ($field as $m => $n) {
							 | 
						||
| 
								 | 
							
								            if ($n != '') {
							 | 
						||
| 
								 | 
							
								                $fieldarr[] = $field[$m];
							 | 
						||
| 
								 | 
							
								                $valuearr[] = $value[$m];
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        return $fieldarr ? array_combine($fieldarr, $valuearr) : [];
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * 将字符串解析成键值数组
							 | 
						||
| 
								 | 
							
								     * @param string $text
							 | 
						||
| 
								 | 
							
								     * @return array
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public static function decode($text, $split = "\r\n")
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $content = explode($split, $text);
							 | 
						||
| 
								 | 
							
								        $arr = [];
							 | 
						||
| 
								 | 
							
								        foreach ($content as $k => $v) {
							 | 
						||
| 
								 | 
							
								            if (stripos($v, "|") !== false) {
							 | 
						||
| 
								 | 
							
								                $item = explode('|', $v);
							 | 
						||
| 
								 | 
							
								                $arr[$item[0]] = $item[1];
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        return $arr;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * 将键值数组转换为字符串
							 | 
						||
| 
								 | 
							
								     * @param array $array
							 | 
						||
| 
								 | 
							
								     * @return string
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public static function encode($array, $split = "\r\n")
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $content = '';
							 | 
						||
| 
								 | 
							
								        if ($array && is_array($array)) {
							 | 
						||
| 
								 | 
							
								            $arr = [];
							 | 
						||
| 
								 | 
							
								            foreach ($array as $k => $v) {
							 | 
						||
| 
								 | 
							
								                $arr[] = "{$k}|{$v}";
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            $content = implode($split, $arr);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        return $content;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * 本地上传配置信息
							 | 
						||
| 
								 | 
							
								     * @return array
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public static function upload()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $uploadcfg = config('upload');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $uploadurl = request()->module() ? $uploadcfg['uploadurl'] : ($uploadcfg['uploadurl'] === 'ajax/upload' ? 'index/' . $uploadcfg['uploadurl'] : $uploadcfg['uploadurl']);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if (!preg_match("/^((?:[a-z]+:)?\/\/)(.*)/i", $uploadurl) && substr($uploadurl, 0, 1) !== '/') {
							 | 
						||
| 
								 | 
							
								            $uploadurl = url($uploadurl, '', false);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        $uploadcfg['fullmode'] = isset($uploadcfg['fullmode']) && $uploadcfg['fullmode'];
							 | 
						||
| 
								 | 
							
								        $uploadcfg['thumbstyle'] = $uploadcfg['thumbstyle'] ?? '';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $upload = [
							 | 
						||
| 
								 | 
							
								            'cdnurl'     => $uploadcfg['cdnurl'],
							 | 
						||
| 
								 | 
							
								            'uploadurl'  => $uploadurl,
							 | 
						||
| 
								 | 
							
								            'bucket'     => 'local',
							 | 
						||
| 
								 | 
							
								            'maxsize'    => $uploadcfg['maxsize'],
							 | 
						||
| 
								 | 
							
								            'mimetype'   => $uploadcfg['mimetype'],
							 | 
						||
| 
								 | 
							
								            'chunking'   => $uploadcfg['chunking'],
							 | 
						||
| 
								 | 
							
								            'chunksize'  => $uploadcfg['chunksize'],
							 | 
						||
| 
								 | 
							
								            'savekey'    => $uploadcfg['savekey'],
							 | 
						||
| 
								 | 
							
								            'multipart'  => [],
							 | 
						||
| 
								 | 
							
								            'multiple'   => $uploadcfg['multiple'],
							 | 
						||
| 
								 | 
							
								            'fullmode'   => $uploadcfg['fullmode'],
							 | 
						||
| 
								 | 
							
								            'thumbstyle' => $uploadcfg['thumbstyle'],
							 | 
						||
| 
								 | 
							
								            'storage'    => 'local'
							 | 
						||
| 
								 | 
							
								        ];
							 | 
						||
| 
								 | 
							
								        return $upload;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * 刷新配置文件
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public static function refreshFile()
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        //如果没有配置权限无法进行修改
							 | 
						||
| 
								 | 
							
								        if (!\app\admin\library\Auth::instance()->check('general/config/edit')) {
							 | 
						||
| 
								 | 
							
								            return false;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        $config = [];
							 | 
						||
| 
								 | 
							
								        $configList = self::all();
							 | 
						||
| 
								 | 
							
								        foreach ($configList as $k => $v) {
							 | 
						||
| 
								 | 
							
								            $value = $v->toArray();
							 | 
						||
| 
								 | 
							
								            if (in_array($value['type'], ['selects', 'checkbox', 'images', 'files'])) {
							 | 
						||
| 
								 | 
							
								                $value['value'] = explode(',', $value['value']);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            if ($value['type'] == 'array') {
							 | 
						||
| 
								 | 
							
								                $value['value'] = (array)json_decode($value['value'], true);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            $config[$value['name']] = $value['value'];
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        file_put_contents(
							 | 
						||
| 
								 | 
							
								            CONF_PATH . 'extra' . DS . 'site.php',
							 | 
						||
| 
								 | 
							
								            '<?php' . "\n\nreturn " . var_export_short($config) . ";\n"
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								        return true;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}
							 |