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'; } }