51 lines
1.3 KiB
PHP
51 lines
1.3 KiB
PHP
|
|
<?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';
|
||
|
|
}
|
||
|
|
}
|