95 lines
2.8 KiB
PHP
95 lines
2.8 KiB
PHP
<?php
|
|
|
|
namespace App\Controllers\Admin;
|
|
|
|
use App\Controllers\BaseController;
|
|
use App\Models\AuditLogModel;
|
|
use App\Models\UserModel;
|
|
|
|
class AuditLogs extends BaseController
|
|
{
|
|
protected $auditLogModel;
|
|
protected $userModel;
|
|
|
|
public function __construct()
|
|
{
|
|
$this->auditLogModel = new AuditLogModel();
|
|
$this->userModel = new UserModel();
|
|
}
|
|
|
|
/**
|
|
* Display audit logs with pagination
|
|
*/
|
|
public function index()
|
|
{
|
|
// Check if user is admin
|
|
if (session()->get('role') !== 'admin') {
|
|
return redirect()->to('/admin/dashboard')
|
|
->with('error', 'Anda tidak memiliki akses ke halaman ini.');
|
|
}
|
|
|
|
// Get search query
|
|
$search = $this->request->getGet('search');
|
|
$actionFilter = $this->request->getGet('action');
|
|
$userFilter = $this->request->getGet('user');
|
|
|
|
// Build query
|
|
$this->auditLogModel->select('audit_logs.*, users.username, users.email')
|
|
->join('users', 'users.id = audit_logs.user_id', 'left')
|
|
->orderBy('audit_logs.created_at', 'DESC');
|
|
|
|
// Apply search filter
|
|
if (!empty($search)) {
|
|
$this->auditLogModel->groupStart()
|
|
->like('audit_logs.action', $search)
|
|
->orLike('users.username', $search)
|
|
->orLike('users.email', $search)
|
|
->orLike('audit_logs.ip_address', $search)
|
|
->groupEnd();
|
|
}
|
|
|
|
// Apply action filter
|
|
if (!empty($actionFilter)) {
|
|
$this->auditLogModel->where('audit_logs.action', $actionFilter);
|
|
}
|
|
|
|
// Apply user filter
|
|
if (!empty($userFilter)) {
|
|
$this->auditLogModel->where('audit_logs.user_id', $userFilter);
|
|
}
|
|
|
|
// Get paginated results
|
|
$perPage = 20;
|
|
$page = (int) ($this->request->getGet('page') ?? 1);
|
|
$auditLogs = $this->auditLogModel->paginate($perPage, 'default', $page);
|
|
$pager = $this->auditLogModel->pager;
|
|
$total = $pager->getTotal();
|
|
|
|
// Get unique actions for filter dropdown
|
|
$actions = $this->auditLogModel->select('action')
|
|
->distinct()
|
|
->orderBy('action', 'ASC')
|
|
->findAll();
|
|
|
|
// Get users for filter dropdown
|
|
$users = $this->userModel->select('id, username, email')
|
|
->orderBy('username', 'ASC')
|
|
->findAll();
|
|
|
|
$data = [
|
|
'title' => 'Audit Log',
|
|
'auditLogs' => $auditLogs,
|
|
'pager' => $pager,
|
|
'search' => $search,
|
|
'actionFilter' => $actionFilter,
|
|
'userFilter' => $userFilter,
|
|
'actions' => $actions,
|
|
'users' => $users,
|
|
'total' => $total,
|
|
];
|
|
|
|
return view('admin/audit-logs/index', $data);
|
|
}
|
|
}
|
|
|