This commit is contained in:
Gitea
2022-01-24 10:43:35 +08:00
commit 15dfc6576b
786 changed files with 219240 additions and 0 deletions

View File

@@ -0,0 +1,226 @@
<?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'), '【PbootCMS】测试邮件', '欢迎您使用PbootCMS网站开发管理系统');
if ($rs === true) {
alert_back('测试邮件发送成功!');
} else {
error('发送失败:' . $rs);
}
break;
}
}
// 修改参数配置
if ($_POST) {
unset($_POST['upload']); // 去除上传组件
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');
$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);
}
}
}