header('DNT') === '1') return null; $path=ltrim((string)($payload['path'] ?? ''), '/'); foreach (config('analytics.exclude_paths',[]) as $excluded) if ($excluded !== '' && str_starts_with($path, trim($excluded,'/'))) return null; $ip=(string)$request->ip(); return AnalyticsEvent::create([ 'event_id'=>(string)Str::uuid(), 'site_id'=>app()->bound('currentSite') ? app('currentSite')?->id : null, 'event_type'=>$payload['event_type'] ?? 'page_view', 'path'=>'/'.$path, 'title'=>$payload['title'] ?? null, 'referrer'=>$payload['referrer'] ?? $request->headers->get('referer'), 'visitor_hash'=>hash('sha256', (string)($payload['visitor_id'] ?? $request->cookie('analytics_visitor','guest'))), 'session_hash'=>hash('sha256', (string)($payload['session_id'] ?? $request->session()->getId())), 'ip_hash'=>config('analytics.anonymize_ip') ? hash('sha256',$ip.config('app.key')) : $ip, 'device_type'=>$payload['device_type'] ?? null, 'browser'=>$payload['browser'] ?? null, 'operating_system'=>$payload['operating_system'] ?? null, 'subject_type'=>$payload['subject_type'] ?? null, 'subject_id'=>$payload['subject_id'] ?? null, 'properties'=>$payload['properties'] ?? [], 'occurred_at'=>now(), ]); } }