62 lines
2.0 KiB
PHP
62 lines
2.0 KiB
PHP
<?php
|
|
|
|
namespace App\Helpers;
|
|
|
|
use Illuminate\Support\Facades\Auth;
|
|
use App\Models\AuditTrail;
|
|
use Illuminate\Support\Facades\Request;
|
|
|
|
class AuditTrailHelper
|
|
{
|
|
/**
|
|
* Mencatat aktivitas umum (Insert, Update, Delete, Approve, Reject)
|
|
*/
|
|
public static function AddAuditTrail($action, $activity)
|
|
{
|
|
// Menggunakan guard 'admin' sesuai spesifikasi login aplikasi Anda
|
|
$user = Auth::guard('admin')->user();
|
|
|
|
$audit = new AuditTrail();
|
|
$audit->user_id = $user ? $user->id : null;
|
|
$audit->ip_address = Request::ip();
|
|
$audit->activity = $activity;
|
|
$audit->action = $action;
|
|
$audit->user_agent = Request::userAgent();
|
|
$audit->browser = self::getBrowserName(Request::userAgent());
|
|
|
|
$audit->save();
|
|
}
|
|
|
|
/**
|
|
* Mencatat percobaan otentikasi (Login/Logout)
|
|
*/
|
|
public static function AuthAttempt($action, $activity)
|
|
{
|
|
$audit = new AuditTrail();
|
|
$audit->user_id = Auth::guard('admin')->id(); // Tetap coba ambil ID jika ada (misal saat logout)
|
|
$audit->ip_address = Request::ip();
|
|
$audit->activity = $activity;
|
|
$audit->action = $action;
|
|
$audit->user_agent = Request::userAgent();
|
|
$audit->browser = self::getBrowserName(Request::userAgent());
|
|
|
|
$audit->save();
|
|
}
|
|
|
|
/**
|
|
* Helper internal untuk deteksi browser yang lebih bersih
|
|
*/
|
|
private static function getBrowserName($userAgent)
|
|
{
|
|
if (!$userAgent) return 'Unknown';
|
|
|
|
if (strpos($userAgent, 'Opera') || strpos($userAgent, 'OPR')) return 'Opera';
|
|
if (strpos($userAgent, 'Edge')) return 'Edge';
|
|
if (strpos($userAgent, 'Chrome')) return 'Chrome';
|
|
if (strpos($userAgent, 'Safari')) return 'Safari';
|
|
if (strpos($userAgent, 'Firefox')) return 'Firefox';
|
|
if (strpos($userAgent, 'MSIE') || strpos($userAgent, 'Trident/7')) return 'Internet Explorer';
|
|
|
|
return explode('/', $userAgent)[0] ?? 'Unknown';
|
|
}
|
|
} |