CRMEB/app/admin/model/system/SystemConfig.php
2019-09-16 15:52:59 +08:00

407 lines
15 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/**
* @author: xaboy<365615158@qq.com>
* @day: 2017/11/02
*/
namespace app\admin\model\system;
use crmeb\basic\BaseModel;
use crmeb\services\FormBuilder as Form;
use crmeb\traits\ModelTrait;
class SystemConfig extends BaseModel
{
/**
* 数据表主键
* @var string
*/
protected $pk = 'id';
/**
* 模型名称
* @var string
*/
protected $name = 'system_config';
use ModelTrait;
/**
* 修改单个配置
* @param $menu
* @param $value
* @return bool
*/
public static function setValue($menu,$value){
if(empty($menu) || !($config_one = self::get(['menu_name'=>$menu]))) return self::setErrorInfo('字段名称错误');
if($config_one['type'] == 'radio' || $config_one['type'] == 'checkbox'){
$parameter = array();
$option = array();
$parameter = explode(',',$config_one['parameter']);
foreach ($parameter as $k=>$v){
if(isset($v) && !empty($v)){
$option[$k] = explode('-',$v);
}
}
$value_arr = array();//选项的值
foreach ($option as $k=>$v){
foreach ($v as $kk=>$vv)
if(!$kk){
$value_arr[$k] = $vv;
}
}
$i = 0;//
if(is_array($value)){
foreach ($value as $value_v){
if(in_array($value_v,$value_arr)){
$i++;
}
}
if(count($value) != $i) return self::setErrorInfo('输入的值不属于选项中的参数');
}else{
if(in_array($value,$value_arr)){
$i++;
}
if(!$i) return self::setErrorInfo('输入的值不属于选项中的参数');
}
if($config_one['type'] == 'radio' && is_array($value)) return self::setErrorInfo('单选按钮的值是字符串不是数组');
}
$bool = self::edit(['value' => json_encode($value)],$menu,'menu_name');
return $bool;
}
/**
* 获取单个参数配置
* @param $menu
* @return bool|mixed
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\ModelNotFoundException
* @throws \think\exception\DbException
*/
public static function getConfigValue($menu){
if(empty($menu) || !($config_one = self::where('menu_name', $menu)->find())) return false;
return json_decode($config_one['value'],true);
}
/**
* 获得多个参数
* @param $menus
* @return array
*/
public static function getMore($menus)
{
$menus = is_array($menus) ? implode(',',$menus) : $menus;
$list = self::where('menu_name','IN',$menus)->column('value','menu_name')?:[];
foreach ($list as $menu => $value){
$list[$menu] = json_decode($value,true);
}
return $list;
}
/**
* @return array
*/
public static function getAllConfig()
{
$list = self::column('value','menu_name')?:[];
foreach ($list as $menu => $value){
$list[$menu] = json_decode($value,true);
}
return $list;
}
/**
* text 判断
* @param $data
* @return bool
*/
public static function valiDateTextRole($data){
if (!$data['width']) return self::setErrorInfo('请输入文本框的宽度');
if ($data['width'] <= 0) return self::setErrorInfo('请输入正确的文本框的宽度');
return true;
}
/**
* radio 和 checkbox规则的判断
* @param $data
* @return bool
*/
public static function valiDateRadioAndCheckbox($data){
$parameter = array();
$option = array();
$option_new = array();
$data['parameter'] = str_replace("\r\n","\n",$data['parameter']);//防止不兼容
$parameter = explode("\n",$data['parameter']);
if(count($parameter) < 2)return self::setErrorInfo('请输入正确格式的配置参数');
foreach ($parameter as $k=>$v){
if(isset($v) && !empty($v)){
$option[$k] = explode('=>',$v);
}
}
if(count($option) < 2)return self::setErrorInfo('请输入正确格式的配置参数');
$bool = 1;
foreach ($option as $k=>$v){
$option_new[$k] = $option[$k][0];
foreach ($v as $kk=>$vv){
$vv_num = strlen($vv);
if(!$vv_num){
$bool = 0;
}
}
}
if(!$bool)return self::setErrorInfo('请输入正确格式的配置参数');
$num1 = count($option_new);//提取该数组的数目
$arr2 = array_unique($option_new);//合并相同的元素
$num2 = count($arr2);//提取合并后数组个数
if($num1>$num2)return self::setErrorInfo('请输入正确格式的配置参数');
return true;
}
/**
* textarea 判断
* @param $data
* @return bool
*/
public static function valiDateTextareaRole($data){
if (!$data['width']) return self::setErrorInfo('请输入多行文本框的宽度');
if (!$data['high']) return self::setErrorInfo('请输入多行文本框的高度');
if ($data['width'] < 0) return self::setErrorInfo('请输入正确的多行文本框的宽度');
if ($data['high'] < 0) return self::setErrorInfo('请输入正确的多行文本框的宽度');
return true;
}
/**
* 获取一数据
* @param $filed
* @param $value
* @return array|null|\think\Model
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\ModelNotFoundException
* @throws \think\exception\DbException
*/
public static function getOneConfig($filed,$value){
$where[$filed] = $value;
return self::where($where)->find();
}
/**
* 获取配置分类
* @param $id
* @return \think\Collection
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\ModelNotFoundException
* @throws \think\exception\DbException
*/
public static function getAll($id){
$where['config_tab_id'] = $id;
$where['status'] = 1;
return self::where($where)->order('sort desc,id asc')->select();
}
/**
* 获取所有配置分类
* @param int $type
* @return array
*/
public static function getConfigTabAll($type=0){
$configAll = SystemConfigTab::getAll($type);
$config_tab = array();
foreach ($configAll as $k=>$v){
if(!$v['info']){
$config_tab[$k]['value'] = $v['id'];
$config_tab[$k]['label'] = $v['title'];
$config_tab[$k]['icon'] = $v['icon'];
$config_tab[$k]['type'] = $v['type'];
}
}
return $config_tab;
}
/**
* 选择类型
* @param string $type
* @return array
*/
public static function radiotype($type='text'){
return [
['value'=>'text','label'=>'文本框','disabled'=>1]
,['value'=>'textarea','label'=>'多行文本框','disabled'=>1]
,['value'=>'radio','label'=>'单选按钮','disabled'=>1]
,['value'=>'upload','label'=>'文件上传','disabled'=>1]
,['value'=>'checkbox','label'=>'多选按钮','disabled'=>1]
];
}
/**
* 选择文本框类型
* @param string $type
* @return array
*/
public static function texttype($type='text'){
return [
['value'=>'input','label'=>'文本框']
,['value'=>'dateTime','label'=>'时间']
,['value'=>'color','label'=>'颜色']
,['value'=>'number','label'=>'数字']
];
}
/**
* 选择文文件类型
* @param string $type
* @return array
*/
public static function uploadtype($type='text'){
return [['value'=>1,'label'=>'单图']
,['value'=>2,'label'=>'多图']
,['value'=>3,'label'=>'文件']];
}
/**
* 字段状态
* @param string $type
* @return array
*/
public static function formstatus($type='text'){
return [['value'=>1,'label'=>'显示'],['value'=>2,'label'=>'隐藏']];
}
/**
* 文本框
* @param $tab_id
* @return array
* @throws \FormBuilder\exception\FormBuilderException
*/
public static function createInputRule($tab_id){
$formbuider = array();
$formbuider[] = Form::hidden('type','text');
$formbuider[] = Form::select('config_tab_id','分类',$tab_id)->setOptions(SystemConfig::getConfigTabAll(-1));
$formbuider[] = Form::select('input_type','类型')->setOptions(self::texttype());
$formbuider[] = Form::input('info','配置名称')->autofocus(1);
$formbuider[] = Form::input('menu_name','字段变量')->placeholder('例如site_url');
$formbuider[] = Form::input('desc','配置简介');
$formbuider[] = Form::input('value','默认值');
$formbuider[] = Form::number('width','文本框宽(%)',100);
$formbuider[] = Form::input('required','验证规则')->placeholder('多个请用,隔开例如required:true,url:true');
$formbuider[] = Form::number('sort','排序');
$formbuider[] = Form::radio('status','状态',1)->options(self::formstatus());
return $formbuider;
}
/**
* 多行文本框
* @param $tab_id
* @return array
* @throws \FormBuilder\exception\FormBuilderException
*/
public static function createTextAreaRule($tab_id){
$formbuider = array();
$formbuider[] = Form::hidden('type','textarea');
$formbuider[] = Form::select('config_tab_id','分类',$tab_id)->setOptions(SystemConfig::getConfigTabAll(-1));
$formbuider[] = Form::input('info','配置名称')->autofocus(1);
$formbuider[] = Form::input('menu_name','字段变量')->placeholder('例如site_url');
$formbuider[] = Form::input('desc','配置简介');
$formbuider[] = Form::textarea('value','默认值');
$formbuider[] = Form::number('width','文本框宽(%)',100);
$formbuider[] = Form::number('high','多行文本框高(%)',5);
$formbuider[] = Form::number('sort','排序');
$formbuider[] = Form::radio('status','状态',1)->options(self::formstatus());
return $formbuider;
}
/**
* 单选按钮
* @param $tab_id
* @return array
* @throws \FormBuilder\exception\FormBuilderException
*/
public static function createRadioRule($tab_id){
$formbuider = array();
$formbuider[] = Form::hidden('type','radio');
$formbuider[] = Form::select('config_tab_id','分类',$tab_id)->setOptions(SystemConfig::getConfigTabAll(-1));
$formbuider[] = Form::input('info','配置名称')->autofocus(1);
$formbuider[] = Form::input('menu_name','字段变量')->placeholder('例如site_url');
$formbuider[] = Form::input('desc','配置简介');
$formbuider[] = Form::textarea('parameter','配置参数')->placeholder("参数方式例如:\n1=>男\n2=>女\n3=>保密");
$formbuider[] = Form::input('value','默认值');
$formbuider[] = Form::number('sort','排序');
$formbuider[] = Form::radio('status','状态',1)->options(self::formstatus());
return $formbuider;
}
/**
* 文件上传
* @param $tab_id
* @return array
* @throws \FormBuilder\exception\FormBuilderException
*/
public static function createUploadRule($tab_id){
$formbuider = array();
$formbuider[] = Form::hidden('type','upload');
$formbuider[] = Form::select('config_tab_id','分类',$tab_id)->setOptions(SystemConfig::getConfigTabAll(-1));
$formbuider[] = Form::input('info','配置名称')->autofocus(1);
$formbuider[] = Form::input('menu_name','字段变量')->placeholder('例如site_url');
$formbuider[] = Form::input('desc','配置简介');
$formbuider[] = Form::radio('upload_type','上传类型',1)->options(self::uploadtype());
$formbuider[] = Form::number('sort','排序');
$formbuider[] = Form::radio('status','状态',1)->options(self::formstatus());
return $formbuider;
}
/**
* 多选框
* @param $tab_id
* @return array
* @throws \FormBuilder\exception\FormBuilderException
*/
public static function createCheckboxRule($tab_id){
$formbuider = array();
$formbuider[] = Form::hidden('type','checkbox');
$formbuider[] = Form::select('config_tab_id','分类',$tab_id)->setOptions(SystemConfig::getConfigTabAll(-1));
$formbuider[] = Form::input('info','配置名称')->autofocus(1);
$formbuider[] = Form::input('menu_name','字段变量')->placeholder('例如site_url');
$formbuider[] = Form::input('desc','配置简介');
$formbuider[] = Form::textarea('parameter','配置参数')->placeholder("参数方式例如:\n1=>白色\n2=>红色\n3=>黑色");
// $formbuider[] = Form::input('value','默认值');
$formbuider[] = Form::number('sort','排序');
$formbuider[] = Form::radio('status','状态',1)->options(self::formstatus());
return $formbuider;
}
/**
* 下拉框
* @param $tab_id
* @return array
* @throws \FormBuilder\exception\FormBuilderException
*/
public static function createSelectRule($tab_id){
$formbuider = array();
$formbuider[] = Form::hidden('type','select');
$formbuider[] = Form::select('config_tab_id','分类',$tab_id)->setOptions(SystemConfig::getConfigTabAll(-1));
$formbuider[] = Form::input('info','配置名称')->autofocus(1);
$formbuider[] = Form::input('menu_name','字段变量')->placeholder('例如site_url');
$formbuider[] = Form::input('desc','配置简介');
$formbuider[] = Form::textarea('parameter','配置参数')->placeholder("参数方式例如:\n1=>白色\n2=>红色\n3=>黑色");
// $formbuider[] = Form::input('value','默认值');
$formbuider[] = Form::number('sort','排序');
$formbuider[] = Form::radio('status','状态',1)->options(self::formstatus());
return $formbuider;
}
/**
* 配置短信信息
* @param $account
* @param $token
* @return bool
*/
public static function setConfigSmsInfo($account, $token)
{
self::beginTrans();
$res1 = self::where('menu_name', 'sms_account')->where('value', '"'.$account.'"')->count();
if(!$res1) $res1 = self::where('menu_name', 'sms_account')->update(['value'=>'"'.$account.'"']);
$res2 = self::where('menu_name', 'sms_token')->where('value', '"'.$token.'"')->count();
if(!$res2) $res2 = self::where('menu_name', 'sms_token')->update(['value'=>'"'.$token.'"']);
$res = $res1 && $res2;
self::checkTrans($res);
return $res;
}
}