264 lines
10 KiB
PHP
Executable File
264 lines
10 KiB
PHP
Executable File
<?php
|
||
|
||
/*
|
||
* @link http://kodcloud.com/
|
||
* @author warlee | e-mail:kodcloud@qq.com
|
||
* @copyright warlee 2014.(Shanghai)Co.,Ltd
|
||
* @license http://kodcloud.com/tools/license/license.txt
|
||
*/
|
||
|
||
class adminSetting extends Controller {
|
||
function __construct() {
|
||
parent::__construct();
|
||
}
|
||
|
||
public function get(){
|
||
$data = Model('SystemOption')->get();
|
||
$data = array_merge($this->config['settingSystemDefault'],$data);
|
||
$removeKey = array(
|
||
'versionLicense','versionUser','versionHashUser','versionHash',
|
||
'systemSecret','systemPassword','deviceUUID',
|
||
);
|
||
foreach ($removeKey as $key) {
|
||
unset($data[$key]);
|
||
}
|
||
unset($data['regist']['loginWith']); // 兼容旧版已存在的数据
|
||
|
||
// 根部门名称;
|
||
$groupRoot = Model('Group')->where(array("parentID"=>0))->find();
|
||
if($groupRoot){$data['groupRootName'] = $groupRoot['name'];}
|
||
show_json($data);
|
||
}
|
||
//管理员 系统设置全局数据
|
||
public function set() {
|
||
$data = json_decode($this->in['data'], true);
|
||
if (!$data) {
|
||
show_json(LNG('explorer.error'), false);
|
||
}
|
||
|
||
if (isset($data['chunkSize'])) {
|
||
$postMax = get_post_max();
|
||
if($data['chunkSize']*1024*1024 >= $postMax){
|
||
$sizeTips = ($postMax/(1024*1024)) .'MB';
|
||
show_json(LNG('admin.setting.transferChunkSizeDescError1').
|
||
":$sizeTips,<br/>".LNG('admin.setting.transferChunkSizeDescError2'),false);
|
||
}
|
||
}
|
||
Model('SystemOption')->set($data);
|
||
show_json(LNG('explorer.success'));
|
||
}
|
||
|
||
/**
|
||
* 发送邮件测试-用户注册功能设置
|
||
*/
|
||
public function mailTest() {
|
||
$input = Input::get('address', 'require');
|
||
|
||
$systemName = Input::get('systemName');
|
||
if (!$systemName) $systemName = Model('SystemOption')->get('systemName');
|
||
$systemDesc = Input::get('systemDesc');
|
||
if (!$systemDesc) $systemDesc = Model('SystemOption')->get('systemDesc');
|
||
|
||
$user = Session::get('kodUser');
|
||
$name = _get($user, 'nickName', _get($user, 'name'));
|
||
$data = array(
|
||
'type' => 'email',
|
||
'input' => $input,
|
||
'emailType' => 1,
|
||
'action' => 'email_test',
|
||
'config' => array(
|
||
'address' => $input,
|
||
'subject' => "[{$systemName}]" . LNG('user.emailVerify') . '-' . LNG('common.test'),
|
||
'content' => array(
|
||
'type' => 'code',
|
||
'data' => array(
|
||
'user' => $name,
|
||
'code' => rand_string(6)
|
||
)
|
||
),
|
||
'system' => array( // 系统信息
|
||
'icon' => STATIC_PATH.'images/icon/fav.png',
|
||
'name' => $systemName,
|
||
'desc' => $systemDesc
|
||
),
|
||
'server' => Input::getArray(array(
|
||
'host' => array('check' => 'require'),
|
||
'email' => array('check' => 'require'),
|
||
'password' => array('check' => 'require'),
|
||
'secure' => array('default' => 'null'),
|
||
))
|
||
)
|
||
);
|
||
$res = Action('user.msg')->send($data);
|
||
if (!$res['code']) {
|
||
show_json(LNG('user.sendFail') . ': ' . $res['data'], false);
|
||
}
|
||
show_json(LNG('user.sendSuccess'), true);
|
||
}
|
||
|
||
/**
|
||
* 动态添加菜单;
|
||
*/
|
||
public function addMenu($options,$menu=array()){
|
||
$menus = &$options['system']['options']['menu'];
|
||
$menusKeys = array_to_keyvalue($menus,'name');
|
||
if( isset($menusKeys[$menu['name']]) ) return $options;
|
||
|
||
$menus[] = $menu;$menuNum = 0;
|
||
foreach ($menus as &$theMenu) {
|
||
if(!isset($theMenu['subMenu']) || $theMenu['subMenu'] == '0'){
|
||
$menuNum += 1;
|
||
}
|
||
// 一级目录最多5个;超出自动添加到子目录; 前端自适应处理
|
||
// if($menuNum >= 5){$theMenu['subMenu'] = 1;}
|
||
};unset($theMenu);
|
||
return $options;
|
||
}
|
||
|
||
public function clearCache(){
|
||
if($this->clearCacheType()){return;}
|
||
Cache::clearTimeout();
|
||
Cache::deleteAll();
|
||
http_close();
|
||
@del_dir(TEMP_PATH);
|
||
@del_dir('/tmp/fileThumb');
|
||
mk_dir(TEMP_PATH . 'log');
|
||
Model("File")->clearEmpty();
|
||
$this->removeFolder('zipView');
|
||
$this->removeEmptyFolder();
|
||
Action('explorer.attachment')->clearCache();
|
||
AutoTask::restart();//停止计划任务; (再次访问自动开启)
|
||
}
|
||
|
||
private function clearCacheType(){
|
||
$clearType = $this->in['type'];
|
||
switch($clearType){
|
||
case 'image':$this->removeFolder('thumb');break;
|
||
case 'video':$this->removeFolder('plugin/fileThumb');break;
|
||
case 'plugin':
|
||
$this->removeFolder('zipView');
|
||
$this->removeFolder('plugin',true);
|
||
break;
|
||
default:$clearType = false;break;
|
||
}
|
||
if(!$clearType) return;
|
||
$this->removeEmptyFolder();
|
||
return true;
|
||
}
|
||
|
||
// 清理插件目录下的空文件夹;
|
||
private function removeEmptyFolder(){
|
||
$info = IO::infoFullSimple(IO_PATH_SYSTEM_TEMP.'plugin');
|
||
if (!$info || !$info['sourceID'] || !$info['parentLevel']) return;
|
||
$where = array('parentLevel'=>array('like',$info['parentLevel'].'%'),'size'=>0);
|
||
$lists = Model("Source")->field('sourceID,name')->where($where)->limit(5000)->select();
|
||
$lists = $lists ? $lists : array();
|
||
foreach ($lists as $item){
|
||
Model("Source")->removeNow($item['sourceID'],false);
|
||
}
|
||
}
|
||
|
||
// 清理文件夹;
|
||
private function removeFolder($folder,$children=false){
|
||
$model = Model("Source");
|
||
$pathInfo = IO::infoFullSimple(IO_PATH_SYSTEM_TEMP . $folder);
|
||
if(!$folder || !$pathInfo || !$pathInfo['sourceID']) return;
|
||
if(!$children){$model->removeNow($pathInfo['sourceID'],false);return;}
|
||
|
||
$where = array('parentID'=>$pathInfo['sourceID']);
|
||
$lists = $model->field("sourceID,name")->where($where)->select();
|
||
$lists = $lists ? $lists : array();
|
||
foreach ($lists as $item){
|
||
$model->removeNow($item['sourceID'],false);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 服务器管理:基础信息、缓存、db
|
||
* @return void
|
||
*/
|
||
public function server(){
|
||
$data = Input::getArray(array(
|
||
'tab' => array('default'=>'', 'aliasKey'=>'type'),
|
||
'action' => array('check'=>'in', 'param'=>array('get', 'pinfo', 'save', 'task', 'clear'))
|
||
));
|
||
$function = ($data['type'] ? $data['type'] : 'srv') . ucfirst($data['action']);
|
||
// srvGet/cacheSave/dbSave/recoverySave
|
||
Action('admin.server')->$function();
|
||
}
|
||
|
||
// 将mysql表转为mb4编码; >= 5.53支持mb4;
|
||
public function updateMysqlCharset(){
|
||
$dbType = $this->config['database']['DB_TYPE'];
|
||
if($dbType != 'mysql' && $dbType != 'mysqli'){echoLog("not Mysql!");return;}
|
||
|
||
$version = Model()->query('select VERSION() as version');
|
||
$version = ($version[0] && isset($version[0]['version'])) ? floatval($version[0]['version']) : 0;
|
||
if($version < 5.53){echoLog("Mysql version need bigger than 5.53");return;}
|
||
|
||
//CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
|
||
$db = Model()->db();
|
||
$reset = isset($this->in['reset']) && $this->in['reset'] == '1';
|
||
$charsetSimple = $reset ? 'utf8':'utf8mb4';
|
||
$charset = $reset ? 'utf8_general_ci':'utf8mb4_general_ci';
|
||
$tables = $db->getTables();
|
||
$tables = is_array($tables) ? $tables:array();
|
||
|
||
$sqlArray = array(// 索引长度要小于1000;否则转为utf8mb4_general_ci会失败(转mb4后会变成4字节)
|
||
"ALTER TABLE `comment_meta` ADD INDEX `key` (`key`(200)),DROP INDEX `key`",
|
||
"ALTER TABLE `group` ADD INDEX `name` (`name`(200)),DROP INDEX `name`",
|
||
"ALTER TABLE `comment_meta` ADD UNIQUE `commentID_key` (`commentID`, `key`(200)),DROP INDEX `commentID_key`",
|
||
"ALTER TABLE `group_meta` ADD INDEX `key` (`key`(200)),DROP INDEX `key`",
|
||
"ALTER TABLE `group_meta` ADD UNIQUE `groupID_key` (`groupID`, `key`(200)),DROP INDEX `groupID_key`;",
|
||
"ALTER TABLE `io_file` ADD INDEX `name` (`name`(200)), DROP INDEX `name`",
|
||
"ALTER TABLE `io_file` ADD INDEX `path` (`path`(200)), DROP INDEX `path`",
|
||
"ALTER TABLE `io_file_meta` ADD INDEX `key` (`key`(200)),DROP INDEX `key`",
|
||
"ALTER TABLE `io_file_meta` ADD UNIQUE `fileID_key` (`fileID`, `key`(200)),DROP INDEX `fileID_key`",
|
||
"ALTER TABLE `io_source` ADD INDEX `name` (`name`(200)),DROP INDEX `name`",
|
||
|
||
"ALTER TABLE `io_source_meta` ADD INDEX `key` (`key`(200)),DROP INDEX `key`",
|
||
"ALTER TABLE `io_source_meta` ADD UNIQUE `sourceID_key` (`sourceID`, `key`(200)),DROP INDEX `sourceID_key`",
|
||
"ALTER TABLE `user_meta` ADD INDEX `metaKey` (`key`(200)),DROP INDEX `metaKey`",
|
||
"ALTER TABLE `user_meta` ADD UNIQUE `userID_metaKey` (`userID`, `key`(200)),DROP INDEX `userID_metaKey`",
|
||
"ALTER TABLE `user_option` ADD INDEX `key` (`key`(200)),DROP INDEX `key`",
|
||
"ALTER TABLE `user_option` ADD UNIQUE `userID_key_type` (`userID`, `key`(200), `type`),DROP INDEX `userID_key_type`",
|
||
"ALTER TABLE `system_option` ADD UNIQUE `key_type` (`key`(200), `type`),DROP INDEX `key_type`",
|
||
);
|
||
|
||
echoLog("update index:".count($sqlArray));
|
||
foreach ($sqlArray as $i=>$sql){
|
||
// $sql = str_replace('(200)','',$sql);
|
||
echoLog($sql);
|
||
try{
|
||
$db->execute($sql);
|
||
}catch(Exception $e){echoLog("==error==:".$e->getMessage());}
|
||
}
|
||
|
||
// $config['databaseDefault'] = array('DB_CHARSET' => 'utf8') // 数据库编码默认采用utf8
|
||
// ALTER TABLE `group_meta` CHANGE `key` `key` varchar(255) NOT NULL COMMENT '存储key'
|
||
echoLog(str_repeat('-',50)."\ntabls:".count($tables)." (speed ≈ 5w row/s);\n".str_repeat('-',50)."\n");
|
||
foreach ($tables as $i=>$table){ //速度取决于表大小; 5w/s;
|
||
echoLog($table.":".$charset.";row=".Model($table)->count().'; '.($i+1).'/'.count($tables));
|
||
//$res = $db->query('show create table `'.$table.'`');// 字段varchar 编码和表编码维持一致;
|
||
// $sql = "ALTER TABLE `".$table."` COLLATE ".$charset;
|
||
$sql = "ALTER TABLE `".$table."` convert to character set ".$charsetSimple." collate ".$charset;
|
||
try {
|
||
$db->execute($sql);
|
||
}catch(Exception $e){echoLog("==error==:".$e->getMessage());}
|
||
}
|
||
|
||
// 自动更新数据库配置charset;
|
||
$content = file_get_contents(BASIC_PATH.'config/setting_user.php');
|
||
$content = preg_replace("/[ \t]*'DB_CHARSET'\s*=\>.*\n?/",'',$content);
|
||
if(!$reset){
|
||
$replaceTo = " 'DB_SQL_BUILD_CACHE'=>false,\n 'DB_CHARSET'=>'utf8mb4',\n";
|
||
$content = preg_replace("/[ \t]*'DB_SQL_BUILD_CACHE'\s*=\>.*\n?/",$replaceTo,$content);
|
||
}
|
||
file_put_contents(BASIC_PATH.'config/setting_user.php',$content);
|
||
|
||
echoLog(str_repeat('-',50));
|
||
echoLog("update config/setting_user.php DB_CHARSET'=>'${charsetSimple}',");
|
||
echoLog("Successfull!");
|
||
}
|
||
}
|