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;
 | 
						|
    }
 | 
						|
 | 
						|
}
 |