authorize('view', $website); [$from, $to] = $this->parseDateRange($request); $service = AnalyticsQueryService::for($website, $from, $to); return view('reports.audience.geographic', [ 'website' => $website, 'from' => $from, 'to' => $to, 'countries' => $service->visitorsByCountry(), 'cities' => $service->visitorsByCity(), ]); } public function technology(Request $request, Website $website): View { $this->authorize('view', $website); [$from, $to] = $this->parseDateRange($request); $service = AnalyticsQueryService::for($website, $from, $to); return view('reports.audience.technology', [ 'website' => $website, 'from' => $from, 'to' => $to, 'browsers' => $service->visitorsByBrowser(), 'operatingSystems' => $service->visitorsByOS(), 'devices' => $service->visitorsByDeviceType(), 'resolutions' => $service->visitorsByScreenResolution(), ]); } public function language(Request $request, Website $website): View { $this->authorize('view', $website); [$from, $to] = $this->parseDateRange($request); $service = AnalyticsQueryService::for($website, $from, $to); return view('reports.audience.language', [ 'website' => $website, 'from' => $from, 'to' => $to, 'languages' => $service->visitorsByLanguage(), ]); } public function newVsReturning(Request $request, Website $website): View { $this->authorize('view', $website); [$from, $to] = $this->parseDateRange($request); $service = AnalyticsQueryService::for($website, $from, $to); return view('reports.audience.new-vs-returning', [ 'website' => $website, 'from' => $from, 'to' => $to, 'data' => $service->newVsReturning(), ]); } // ---- Acquisition ---- public function sources(Request $request, Website $website): View { $this->authorize('view', $website); [$from, $to] = $this->parseDateRange($request); $service = AnalyticsQueryService::for($website, $from, $to); return view('reports.acquisition.sources', [ 'website' => $website, 'from' => $from, 'to' => $to, 'sources' => $service->trafficSources(), ]); } public function campaigns(Request $request, Website $website): View { $this->authorize('view', $website); [$from, $to] = $this->parseDateRange($request); $service = AnalyticsQueryService::for($website, $from, $to); return view('reports.acquisition.campaigns', [ 'website' => $website, 'from' => $from, 'to' => $to, 'campaigns' => $service->campaigns(), ]); } public function referrers(Request $request, Website $website): View { $this->authorize('view', $website); [$from, $to] = $this->parseDateRange($request); $service = AnalyticsQueryService::for($website, $from, $to); return view('reports.acquisition.referrers', [ 'website' => $website, 'from' => $from, 'to' => $to, 'referrers' => $service->referrers(), ]); } // ---- Behavior ---- public function pages(Request $request, Website $website): View { $this->authorize('view', $website); [$from, $to] = $this->parseDateRange($request); $service = AnalyticsQueryService::for($website, $from, $to); return view('reports.behavior.pages', [ 'website' => $website, 'from' => $from, 'to' => $to, 'pages' => $service->topPages(), ]); } public function landingPages(Request $request, Website $website): View { $this->authorize('view', $website); [$from, $to] = $this->parseDateRange($request); $service = AnalyticsQueryService::for($website, $from, $to); return view('reports.behavior.landing-pages', [ 'website' => $website, 'from' => $from, 'to' => $to, 'pages' => $service->landingPages(), ]); } public function exitPages(Request $request, Website $website): View { $this->authorize('view', $website); [$from, $to] = $this->parseDateRange($request); $service = AnalyticsQueryService::for($website, $from, $to); return view('reports.behavior.exit-pages', [ 'website' => $website, 'from' => $from, 'to' => $to, 'pages' => $service->exitPages(), ]); } // ---- Events ---- public function events(Request $request, Website $website): View { $this->authorize('view', $website); [$from, $to] = $this->parseDateRange($request); $service = AnalyticsQueryService::for($website, $from, $to); return view('reports.events.overview', [ 'website' => $website, 'from' => $from, 'to' => $to, 'events' => $service->eventsOverview(), ]); } public function eventDetail(Request $request, Website $website, string $eventName): View { $this->authorize('view', $website); [$from, $to] = $this->parseDateRange($request); $service = AnalyticsQueryService::for($website, $from, $to); return view('reports.events.detail', [ 'website' => $website, 'from' => $from, 'to' => $to, 'eventName' => $eventName, 'details' => $service->eventDetail($eventName), 'trending' => $service->eventTrending($eventName), ]); } }