136 lines
4.1 KiB
PHP
136 lines
4.1 KiB
PHP
<?php
|
|
/**
|
|
* @copyright Copyright (c) 2021 勾股工作室
|
|
* @license https://opensource.org/licenses/GPL-3.0
|
|
* @link https://www.gougucms.com
|
|
*/
|
|
|
|
declare (strict_types = 1);
|
|
|
|
namespace app\home\middleware;
|
|
use systematic\Systematic;
|
|
use think\facade\Db;
|
|
use think\facade\Session;
|
|
|
|
class Install
|
|
{
|
|
protected $module = '';
|
|
protected $controller = '';
|
|
protected $action = '';
|
|
public function handle($request, \Closure $next)
|
|
{
|
|
if (!is_installed()) {
|
|
return $request->isAjax() ? to_assign(1, '请先完成系统安装引导') : redirect((string) url('/install/index'));
|
|
}
|
|
$module = strtolower(app('http')->getName());
|
|
$this->module = $module;
|
|
$param = $request->param();
|
|
$logtype = isset($param['logtype'])?$param['logtype']:'';
|
|
$module_son = isset($param['module_son'])?$param['module_son']:'';
|
|
$module_old = [];
|
|
if($module_son!='' && ($logtype != 'add' || $logtype != 'delete')){
|
|
$module_old = Db::name($module_son)->where('id',$param['id'])->find();
|
|
}
|
|
//return $next($request);
|
|
//获取响应,获取响应之前的代码为前置中间件,
|
|
//do songthing
|
|
//----------以上部分为前置中间件--------------
|
|
|
|
$response=$next($request);
|
|
|
|
//----------以下部分为后置中间件--------------
|
|
//获取响应之后的为后置中间件的执行内容
|
|
|
|
$this->controller = strtolower($request->controller());
|
|
$this->action = strtolower($request->action());
|
|
//获取返回的HTTPCode
|
|
//$code = $response->getCode();
|
|
$responseData = $response->getData();
|
|
if(isset($responseData['code']) && $responseData['code'] == 0){
|
|
if(isset($responseData['datas'])){
|
|
$logData = $responseData['datas'];
|
|
}
|
|
else{
|
|
$logData = $responseData['data'];
|
|
}
|
|
$log_conf = get_config('log');
|
|
$type_action = $log_conf['type_action'];
|
|
if(isset($logData['logtype']) && isset($logData['id']) && isset($type_action[$logData['logtype']])){
|
|
$logData['type_title'] = $type_action[$logData['logtype']];
|
|
$moduleLogData = [];
|
|
if($module_son!='' && isset($log_conf[$this->module])){
|
|
$log_conf_module = $log_conf[$this->module];
|
|
$module_field_key = $log_conf_module[$module_son];
|
|
$module_new = Db::name($module_son)->where('id',$logData['id'])->find();
|
|
$param_id = $module_new['id'];
|
|
$param_son_id = 0;
|
|
if($module_son!=$this->module){
|
|
$param_id = $module_new[$this->module.'_id'];
|
|
$param_son_id = $module_new['id'];
|
|
}
|
|
else{
|
|
$module_son = '';
|
|
}
|
|
if(isset($module_field_key)){
|
|
$moduleLogData = [
|
|
'param_id'=>$param_id,
|
|
'module_son'=>$module_son,
|
|
'param_son_id'=>$param_son_id,
|
|
'old'=>$module_old,
|
|
'new'=>$module_new,
|
|
'key'=>$module_field_key
|
|
];
|
|
}
|
|
}
|
|
$this->addLog($logData,$moduleLogData);
|
|
}
|
|
}
|
|
|
|
//这里回调本身返回response对象
|
|
return $response;
|
|
}
|
|
/*
|
|
public function end(\think\Response $response){
|
|
|
|
dump($response->getData());
|
|
exit;
|
|
|
|
//dump($response->header());
|
|
}
|
|
*/
|
|
|
|
protected function addLog($logData = [],$moduleLogData=[])
|
|
{
|
|
$session_admin = get_config('app.session_admin');
|
|
$uid = Session::get($session_admin);
|
|
$data = [
|
|
'uid' => $uid,
|
|
'type' => $logData['logtype'],
|
|
'action' => $logData['type_title'],
|
|
'param_id' => $logData['id'],
|
|
'param' => json_encode($logData),
|
|
'module' => $this->module,
|
|
'controller' => $this->controller,
|
|
'function' => $this->action,
|
|
'ip' => app('request')->ip(),
|
|
'create_time' => time(),
|
|
'subject' => '系统'
|
|
];
|
|
if(isset($logData['subject']) && $logData['subject'] != ''){
|
|
$data['subject'] = $logData['subject'];
|
|
}
|
|
else{
|
|
$rule = $data['module'] . '/' . $data['controller'] . '/' . $data['function'];
|
|
$rule_menu = Db::name('AdminRule')->where(array('src' => $rule))->find();
|
|
if($rule_menu){
|
|
$data['subject'] = $rule_menu['name'];
|
|
}
|
|
}
|
|
Db::name('AdminLog')->strict(false)->field(true)->insert($data);
|
|
if(!empty($moduleLogData)){
|
|
$GOUGU = new Systematic();
|
|
$GOUGU->moduleLog($uid,$logData['logtype'],$this->module,$moduleLogData);
|
|
}
|
|
}
|
|
}
|