<?php<364666827@qq.com>,开发者QQ群:50304283
namespace app\system\admin;
use app\system\model\SystemConfig as ConfigModel;
use app\system\model\SystemModule as ModuleModel;
use app\system\model\SystemPlugins as PluginsModel;
use think\Validate;
use Env;
class System extends Admin
{
/**
* 系统基础配置
* @author 橘子俊 <364666827@qq.com>
* @return mixed
*/
public function index($group = 'base')
{
if ($this->request->isPost()) {
$webPath = Env::get('root_path').'public/';
$data = $this->request->post();
$types = $data['type'];
if (isset($data['id'])) {
$ids = $data['id'];
} else {
$ids = $data['id'] = '';
}
unset($data['upload'])
$validate = new Validate([
'__token__' => 'token',
]);
if (!$validate->check($data)) {
return $this->error($validate->getError());
}
if (isset($data['module'])) {
$row = ModuleModel::where('name', $data['module'])->field('id,config')->find()->toArray();
if (!isset($row['config'])) {
return $this->error('保存失败(原因:'.$data['module'].'模块无需配置)');
}
$row['config'] = json_decode($row['config'], 1);
foreach ($row['config'] as $key => &$conf) {
if (!isset($ids[$key]) && $conf['type'] =='switch') {
$conf['value'] = 0;
} else if ($conf['type'] =='checkbox' && isset($ids[$key])) {
$conf['value'] = json_encode($ids[$key], 1);
} else {
$conf['value'] = $ids[$key];
}
}
if (ModuleModel::where('id', $row['id'])->setField('config', json_encode($row['config'], 1)) === false) {
return $this->error('保存失败');
}
ModuleModel::getConfig('', true);
return $this->success('保存成功');
}
if (!$types) return false;
$adminPath = config('sys.admin_path');
foreach ($types as $k => $v) {
if ($v == 'switch' && !isset($ids[$k])) {
ConfigModel::where('name', $k)->update(['value' => 0]);
continue;
}
if ($v == 'checkbox' && isset($ids[$k])) {
$ids[$k] = json_encode($ids[$k], 1);
}
if ($k == 'admin_path' && $ids[$k] != config('sys.admin_path')) {
if (is_file($webPath.config('sys.admin_path')) && is_writable($webPath.config('sys.admin_path'))) {
@rename($webPath.config('sys.admin_path'), $webPath.$ids[$k]);
if (!is_file($webPath.$ids[$k])) {
$ids[$k] = config('sys.admin_path');
}
$adminPath = $ids[$k];
}
}
ConfigModel::where('name', $k)->update(['value' => $ids[$k]]);
}
$config = ConfigModel::getConfig('', true);
if ($group == 'sys') {
$rootPath = Env::get('root_path');
if (file_exists($rootPath.'.env')) {
unlink($rootPath.'.env');
}
$env = $env .= "\n//应用Trace\napp_trace = " . ($config['sys']['app_trace'] ? 'true' : 'false');
file_put_contents($rootPath.'.env', $env);
}
return $this->success('保存成功', ROOT_DIR.$adminPath.'/system/system/index/group/'.$group.'.html');
}
$tabData = [];
foreach (config('sys.config_group') as $key => $value) {
$arr = [];
$arr['title'] = $value;
$arr['url'] = '?group='.$key;
$tabData['menu'][] = $arr;
}
$map = [];
$map['group'] = $group;
$map['status'] = 1;
$dataList = ConfigModel::where($map)->order('sort,id')->column('id,name,title,group,url,value,type,options,tips');
foreach ($dataList as $k => &$v) {
$v['id'] = $v['name'];
if (!empty($v['options'])) {
$v['options'] = parse_attr($v['options']);
}
}
$module = ModuleModel::where('status', 2)->column('name,title,config', 'name');
foreach ($module as $mod) {
if (empty($mod['config'])) continue;
$arr = [];
$arr['title'] = $mod['title'];
$arr['url'] = '?group='.$mod['name'];
$tabData['menu'][] = $arr;
if ($group == $mod['name']) {
$dataList = json_decode($mod['config'], 1);
foreach ($dataList as $k => &$v) {
if (!empty($v['options'])) {
$v['options'] = parse_attr($v['options']);
}
$v['id'] = $k;
$v['module'] = $mod['name'];
}
}
}
$tabData['current'] = url('?group='.$group);
$_GET['group'] = $group;
$this->assign('data_list', $dataList);
$this->assign('hisiTabData', $tabData);
$this->assign('hisiTabType', 3);
return $this->fetch();
}
private function mkAdmin($file)
{
$code = <<<INFO
<?php<364666827@qq.com>,开发者QQ群:50304283namespace think;
header('Content-Type:text/html;charset=utf-8');
define('APP_PATH', __DIR__ . '/application/');
define('ENTRANCE', 'admin');
require __DIR__ . '/../thinkphp/base.php';
if(!is_file('./../install.lock')) {
header('location: /');
} else {
Container::get('app')->run()->send();
}
INFO;
if (!file_put_contents(ROOT_PATH.$file, $code)) {
return fasle;
}
return true;
}
}