Skip to main content

Black Friday 2025! Only until December 1st: coupon FRIDAY25 for 40% off Yearly/Lifetime membership!

Read more here

luadotsh/lua

324 stars
2 code files
View luadotsh/lua on GitHub

app/Services/UserAgentService.php

Open in GitHub
class UserAgentService
{
public function getBrowser(string $userAgent): string
{
$browserArray = [
'Chrome' => 'Chrome',
'Firefox' => 'Firefox',
'Safari' => 'Safari',
'Edge' => 'Edge',
'Opera' => 'Opera',
'Internet Explorer' => 'MSIE|Trident',
];
 
foreach ($browserArray as $key => $pattern) {
if (preg_match("/$pattern/i", $userAgent)) {
return $key;
}
}
 
return 'Unknown Browser';
}
 
public function getOS(string $userAgent): string
{
$osArray = [
'Windows' => 'Windows',
'MacOS' => '(Mac_PowerPC)|(Macintosh)',
'Linux' => 'Linux',
'iOS' => 'iPhone|iPad',
'Android' => 'Android',
];
 
foreach ($osArray as $key => $pattern) {
if (preg_match("/$pattern/i", $userAgent)) {
return $key;
}
}
 
return 'Unknown OS';
}
 
public function getDevice(string $userAgent): string
{
if (preg_match("/Mobile|Android|iPhone|iPad/i", $userAgent)) {
return 'Mobile';
} elseif (preg_match("/Tablet|iPad/i", $userAgent)) {
return 'Tablet';
}
 
return 'Desktop';
}
 
public function getLanguage(array $languages): string
{
if (!empty($languages)) {
return trim($languages[0]);
}
 
return 'Unknown Language';
}
 
public function getReferer(?string $referers): string
{
if ($referers && !empty($referers)) {
return $referers;
}
 
return 'Direct';
}
 
public function getUserDetails(string $userAgent, array $languages): array
{
return [
'browser' => $this->getBrowser($userAgent),
'os' => $this->getOS($userAgent),
'device' => $this->getDevice($userAgent),
'language' => $this->getLanguage($languages),
];
}
}

app/Jobs/ProcessLinkStat.php

Open in GitHub
use Illuminate\Contracts\Queue\ShouldQueue;
use App\Services\UserAgentService;
use App\Enums\LinkStat\Event;
use App\Models\LinkStat;
 
class ProcessLinkStat implements ShouldQueue
{
// ...
 
public function handle(): void
{
$service = new UserAgentService();
 
$geo = geoip($this->ip);
 
$linkStat = LinkStat::create([
'workspace_id' => $this->link->workspace_id,
'link_id' => $this->link->id,
'event' => $this->qr ? Event::QR_SCAN : Event::CLICK,
'country' => $geo->iso_code,
'region' => $geo->state_name,
'city' => $geo->city,
'browser' => $service->getBrowser($this->userAgent),
'os' => $service->getOS($this->userAgent),
'device' => $service->getDevice($this->userAgent),
'language' => $service->getLanguage($this->languages),
'referer' => $service->getReferer($this->referer),
'ip' => $this->ip,
]);
 
$this->link->update([
'clicks' => $this->link->clicks + 1,
'last_click' => now(),
]);
}
}

We'd Love Your Feedback

Tell us what you like or what we can improve

Feel free to share anything you like or dislike about this page or the platform in general.