You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

231 lines
8.8 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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