File: /var/www/admin.fixgini.com/app/Services/ActivityLogger.php
<?php
namespace App\Services;
use Jenssegers\Agent\Agent;
use App\Models\UserActivity;
class ActivityLogger
{
public function log($activity, $user_id, $user_role, $device)
{
$ip = request()->ip();
$location = $this->getLocationFromIp($ip);
$userAgent = request()->header('User-Agent');
$agent = new Agent();
$agent->setUserAgent($userAgent);
$deviceDetails = $this->getDeviceDetails($agent);
$deviceJson = json_encode($device ?? $deviceDetails);
UserActivity::create([
'user_id' => $user_id,
'role' => $user_role,
'login_time' => now(),
'activity' => $activity ?? 'Login',
'ip' => $ip,
'location' => $location,
'device' => $deviceJson,
]);
// $adminUsers = 'fixginiservices@gmail.com';
// Notification::send($adminUsers, new ActivityLogged($activity, $user_id, $user_role, $device));
}
protected function getLocationFromIp($ip)
{
$accessKey = config('services.ipinfo.token');
$url = "http://ipinfo.io/{$ip}/json?token={$accessKey}";
$locationData = file_get_contents($url);
$location = json_decode($locationData, true);
$city = $location['city'] ?? 'Unknown City';
$region = $location['region'] ?? 'Unknown Region';
$country = $location['country'] ?? 'Unknown Country';
return "{$city}, {$region}, {$country}";
}
protected function getDeviceDetails(Agent $agent)
{
$device = $agent->device() ?: 'Unknown Device';
$browser = $agent->browser() ?: 'Unknown Browser';
$browserVersion = $agent->version($browser) ?: 'Unknown Version';
$platform = $agent->platform() ?: 'Unknown Platform';
$platformVersion = $agent->version($platform) ?: 'Unknown Version';
return "Device: {$device}, Browser: {$browser} {$browserVersion}, Platform: {$platform} {$platformVersion}";
}
}