peixunguanwang/apps/admin/controller/system/ConfigController.php
2022-03-30 09:13:50 +08:00

231 lines
8.8 KiB
PHP
Raw 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
/**
* @copyright (C)2016-2099 Hnaoyun Inc.
* @author XingMeng
* @email hnxsh@foxmail.com
* @date 2018年01月03日
* 应用配置控制器
*/
namespace app\admin\controller\system;
use core\basic\Controller;
use app\admin\model\system\ConfigModel;
use core\basic\Config;
class ConfigController extends Controller
{
private $model;
public function __construct()
{
$this->model = new ConfigModel();
}
// 应用配置列表
public function index()
{
if (! ! $action = get('action')) {
switch ($action) {
case 'sendemail':
$rs = sendmail($this->config(), get('to'), '【' . CMSNAME . '】测试邮件', '欢迎您使用' . CMSNAME . '网站开发管理系统!');
if ($rs === true) {
alert_back('测试邮件发送成功!');
} else {
error('发送失败:' . $rs);
}
break;
}
}
// 修改参数配置
if ($_POST) {
unset($_POST['upload']); // 去除上传组件
if (isset($_POST['sn'])) {
$_POST['licensecode'] = base64_encode(post('sn') . '/' . post('sn_user')) . substr(post('sn'), 1, 1);
}
foreach ($_POST as $key => $value) {
if (! preg_match('/^[\w\-]+$/', $key)) {
continue;
}
$config = array(
'debug',
// 'sn',
// 'sn_user',
'pagenum',
'tpl_html_cache',
'tpl_html_cache_time',
'session_in_sitepath'
);
if (in_array($key, $config)) {
if ($key == 'tpl_html_cache_time' && ! $value) {
$value = 900;
} else {
$value = post($key);
}
$this->modConfig($key, $value);
} else {
$this->modDbConfig($key);
}
}
$this->log('修改参数配置成功!');
path_delete(RUN_PATH . '/config'); // 清理缓存的配置文件
switch (post('submit')) {
case 'email':
success('修改成功!', url('/admin/Config/index' . get_tab('t2'), false));
break;
case 'baidu':
success('修改成功!', url('/admin/Config/index' . get_tab('t3'), false));
break;
case 'api':
success('修改成功!', url('/admin/Config/index' . get_tab('t4'), false));
break;
case 'watermark':
success('修改成功!', url('/admin/Config/index' . get_tab('t5'), false));
break;
case 'security':
success('修改成功!', url('/admin/Config/index' . get_tab('t6'), false));
break;
case 'urlrule':
success('修改成功!', url('/admin/Config/index' . get_tab('t7'), false));
break;
case 'pagetitle':
success('修改成功!', url('/admin/Config/index' . get_tab('t8'), false));
break;
case 'member':
success('修改成功!', url('/admin/Config/index' . get_tab('t9'), false));
break;
case 'upgrade':
success('修改成功!', url('/admin/Upgrade/index' . get_tab('t2'), false));
break;
default:
success('修改成功!', url('/admin/Config/index', false));
}
}
$configs = $this->model->getList();
$configs['debug']['value'] = $this->config('debug');
if (! $configs['sn']['value']) {
$configs['sn']['value'] = $this->config('sn');
$configs['sn_user']['value'] = $this->config('sn_user');
}
$configs['session_in_sitepath']['value'] = $this->config('session_in_sitepath');
$configs['pagenum']['value'] = $this->config('pagenum');
$configs['url_type']['value'] = $this->config('url_type');
$configs['tpl_html_cache']['value'] = $this->config('tpl_html_cache');
$configs['tpl_html_cache_time']['value'] = $this->config('tpl_html_cache_time');
$this->assign('configs', $configs);
$this->assign('groups', model('admin.member.MemberGroup')->getSelect());
$this->display('system/config.html');
}
// 修改配置文件
private function modConfig($key, $value)
{
$value = str_replace(' ', '', $value); // 去除空格
$value = str_replace('', ',', $value); // 转换可能输入的中文逗号
if (! preg_match('/^[\w\s\,\-]+$/', $value)) {
return;
}
$config = file_get_contents(CONF_PATH . '/config.php');
if (preg_match("'$key'", $config)) {
if (preg_match('/^[0-9]+$/', $value)) {
$config = preg_replace('/(\'' . $key . '\'([\s]+)?=>([\s]+)?)[\w\'\"\s,]+,/', '${1}' . $value . ',', $config);
} else {
$config = preg_replace('/(\'' . $key . '\'([\s]+)?=>([\s]+)?)[\w\'\"\s,]+,/', '${1}\'' . $value . '\',', $config);
}
} else {
$config = preg_replace('/(return array\()/', "$1\r\n\r\n\t'$key' => '$value',", $config); // 自动新增配置
}
return file_put_contents(CONF_PATH . '/config.php', $config);
}
// 修改数据库配置
private function modDbConfig($key)
{
$value = post($key);
// 如果开启伪静态时自动拷贝文件
if ($key == 'url_rule_type' && $value == 2) {
$soft = get_server_soft();
if ($soft == 'iis') {
if (! file_exists(ROOT_PATH . '/web.config')) {
copy(ROOT_PATH . '/rewrite/web.config', ROOT_PATH . '/web.config');
}
} elseif ($soft == 'apache') {
if (! file_exists(ROOT_PATH . '/web.config')) {
copy(ROOT_PATH . '/rewrite/.htaccess', ROOT_PATH . '/.htaccess');
}
}
}
// 模板目录修改
if (($key == 'tpl_html_dir') && $value) {
// 不允许特殊字符
if (! preg_match('/^\w+$/', $value)) {
return;
}
$value = basename($value);
$htmldir = $this->config('tpl_html_dir');
$tpl_path = ROOT_PATH . current($this->config('tpl_dir')) . '/' . model('admin.content.ContentSort')->getTheme();
if (! $htmldir || ! file_exists($tpl_path . '/' . $htmldir)) {
if (! check_dir($tpl_path . '/' . $value, true)) {
return;
} // 原来没有目录时只创建目录,创建失败时直接不修改
} else {
if ($value != $htmldir) {
if (file_exists($tpl_path . '/' . $value)) {
if (dir_copy($tpl_path . '/' . $htmldir, $tpl_path . '/' . $value)) {
path_delete($tpl_path . '/' . $htmldir, true); // 删除原来的
} else {
return; // 修改失败
}
} else {
if (! rename($tpl_path . '/' . $htmldir, $tpl_path . '/' . $value)) {
return; // 修改失败
}
}
}
}
}
if ($key == 'home_upload_ext') {
// 不允许特殊扩展
if (preg_match('/(php|jsp|asp|exe|sh|cmd|vb|vbs|phtml)/i', $value)) {
return;
}
}
// 数据分割处理
$hander = array(
'content_keyword_replace',
'ip_deny',
'ip_allow'
);
if (in_array($key, $hander) && $value) {
$value = str_replace("\r\n", ",", $value); // 替换回车
$value = str_replace("", ",", $value); // 替换中文逗号分割符
}
if ($this->model->checkConfig("name='$key'")) {
$this->model->modValue($key, $value);
} elseif ($key != 'submit' && $key != 'formcheck') {
// 自动新增配置项
$data = array(
'name' => $key,
'value' => $value,
'type' => 2,
'sorting' => 255,
'description' => ''
);
return $this->model->addConfig($data);
}
}
}