HEX
Server: Apache/2.4.59 (Debian)
System: Linux keymana 4.19.0-21-cloud-amd64 #1 SMP Debian 4.19.249-2 (2022-06-30) x86_64
User: lijunjie (1003)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
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;
    }
}