first commit from hostslim
This commit is contained in:
@@ -0,0 +1,214 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Http\Controllers\Concerns\ParsesDateRange;
|
||||
use App\Models\Website;
|
||||
use App\Services\AnalyticsQueryService;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\View\View;
|
||||
|
||||
class ReportController extends Controller
|
||||
{
|
||||
use ParsesDateRange;
|
||||
|
||||
// ---- Audience ----
|
||||
|
||||
public function geographic(Request $request, Website $website): View
|
||||
{
|
||||
$this->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),
|
||||
]);
|
||||
}
|
||||
|
||||
// ---- Conversions ----
|
||||
|
||||
public function conversions(Request $request, Website $website): View
|
||||
{
|
||||
$this->authorize('view', $website);
|
||||
[$from, $to] = $this->parseDateRange($request);
|
||||
$service = AnalyticsQueryService::for($website, $from, $to);
|
||||
|
||||
return view('reports.conversions', [
|
||||
'website' => $website,
|
||||
'from' => $from,
|
||||
'to' => $to,
|
||||
'goals' => $service->conversionsReport(),
|
||||
'chartData' => $service->goalCompletionsOverTime(),
|
||||
'totalSessions' => $service->totalSessions(),
|
||||
]);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user