cms/app/Http/Middleware/TrackAnalytics.php

51 lines
1.3 KiB
PHP
Raw Permalink Normal View History

<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use App\Models\PageView;
use Jenssegers\Agent\Agent;
class TrackAnalytics
{
/**
* Handle an incoming request.
*/
public function handle(Request $request, Closure $next)
{
$response = $next($request);
// Only track successful GET requests for public pages (outside admin)
if ($request->isMethod('get') &&
$response->getStatusCode() === 200 &&
!$request->is(env('ADMIN_PATH', 'loom') . '*')) {
$agent = new Agent();
$agent->setUserAgent($request->userAgent());
$view = PageView::create([
'path' => $request->getPathInfo(),
'referrer' => $request->headers->get('referer'),
'browser' => $agent->browser() ?: 'Unknown',
'os' => $agent->platform() ?: 'Unknown',
'device_type' => $this->getDeviceType($agent),
'view_date' => now()->toDateString(),
]);
}
return $response;
}
protected function getDeviceType($agent)
{
if ($agent->isTablet()) {
return 'tablet';
}
if ($agent->isMobile()) {
return 'mobile';
}
return 'desktop';
}
}