File: /var/www/uileague/wp-content/themes/uileague/helper/Logger.php
<?php
class Logger
{
public static $table = "orm_log";
public static function log($content, $table, $row_id, $old_data, $new_data, $uid = 0, $wpuid = 0)
{
$tb = Logger::$table;
global $wpdb;
$old = empty($old_data) ? '' : json_encode($old_data);
$new = empty($new_data) ? '' : json_encode($new_data);
$extra = json_encode(array(
'ip' => $_SERVER['REMOTE_ADDR']
));
$table = empty($table) ? '' : $table;
$row_id = empty($row_id) ? 0 : $row_id;
$res = $wpdb->insert(
$tb,
array(
'wpuid' => $wpuid,
'uid' => $uid,
'content' => $content,
'created' => current_time("Y-m-d H:i:s"),
'old_data' => $old,
'new_data' => $new,
'row_id' => $row_id,
'table_name' => $table,
'extra' => $extra,
),
array('%d', '%d', '%s', '%s', '%s', '%s', '%d', '%s', '%s')
);
return $res !== false;
}
/**
* 列表 - 操作记录
*
* @param array $args 参数列表
*/
public static function list($args)
{
global $wpdb;
$keyword = htmlspecialchars($args['keyword']);
$keyword = empty($keyword) ? '' : trim($keyword);
$page = intval($args['cpage']) > 1 ? intval($args['cpage']) : 1;
$all = intval($args['pageLimit']) == -1;
$pageLimit = intval($args['pageLimit']) > 1 ? intval($args['pageLimit']) : 10;
$filterSql = "";
$table = Logger::$table;
$total = intval($wpdb->get_var("SELECT count(id) FROM `{$table}` WHERE (`content` Like '%" . $keyword . "%' ) " . $filterSql));
if ($all) {
$results = $wpdb->get_results("SELECT * FROM `{$table}` WHERE (`content` Like '%" . $keyword . "%' ) " . $filterSql . " order by id desc");
} else {
$results = $wpdb->get_results("SELECT * FROM `{$table}` WHERE (`content` Like '%" . $keyword . "%' ) " . $filterSql . $wpdb->prepare(" order by id desc LIMIT %d,%d", ($page - 1) * $pageLimit, $pageLimit));
}
$dataList = array_map(function ($item) {
return Logger::map_item($item);
}, $results);
// 导出格式
$export_report = new stdClass();
$export_report->header = ["時間", "執行操作", "操作用戶", "操作角色"];
$export_report->body = array_map(function ($item) {
$arr = [];
$arr[] = $item->created;
$arr[] = $item->row_id != null && $item->row_id != 0 ? $item->content . " #" . $item->row_id : $item->content;
if ($item->wp_user != null) {
$arr[] = $item->wp_user->user_name;
$arr[] = $item->wp_user->role_name;
} else if ($item->company_user != null) {
$arr[] = $item->company_user->user_name;
$arr[] = $item->company_user->role_name;
} else {
$arr[] = "";
$arr[] = "";
}
return $arr;
}, $dataList);
$result = new stdClass();
$result->total = $total;
$result->page = $page;
$result->dataList = $dataList;
$result->export_report = $export_report;
return $result;
}
/**
* 额外处理
*
* @param object $row 对象
* @return object 处理后的对象
*/
public static function map_item($row)
{
if ($row == null) return null;
$row->wp_user = AdminHelper::get_by_id($row->wpuid);
$row->company_user = UserHelper::get_by_id($row->uid);
$old_data = stripslashes($row->old_data);
$row->old_data = empty($old_data) ? null : json_decode($old_data);
$new_data = stripslashes($row->new_data);
$row->new_data = empty($new_data) ? null : json_decode($new_data);
return $row;
}
}