AzuraCast/src/Controller/Stations/Reports/OverviewAction.php

52 lines
1.8 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Controller\Stations\Reports;
use App\Entity;
use App\Http\Response;
use App\Http\ServerRequest;
use Psr\Http\Message\ResponseInterface;
final class OverviewAction
{
public function __construct(
private readonly Entity\Repository\SettingsRepository $settingsRepo
) {
}
public function __invoke(
ServerRequest $request,
Response $response,
string $station_id
): ResponseInterface {
// Get current analytics level.
$settings = $this->settingsRepo->readSettings();
if (!$settings->isAnalyticsEnabled()) {
// The entirety of the dashboard can't be shown, so redirect user to the profile page.
return $request->getView()->renderToResponse($response, 'stations/reports/restricted');
}
$router = $request->getRouter();
$analyticsLevel = $settings->getAnalyticsEnum();
return $request->getView()->renderVuePage(
response: $response,
component: 'Vue_StationsReportsOverview',
id: 'vue-reports-overview',
title: __('Station Statistics'),
props: [
'stationTz' => $request->getStation()->getTimezone(),
'showFullAnalytics' => Entity\Enums\AnalyticsLevel::All === $analyticsLevel,
'listenersByTimePeriodUrl' => (string)$router->fromHere('api:stations:reports:overview-charts'),
'bestAndWorstUrl' => (string)$router->fromHere('api:stations:reports:best-and-worst'),
'byStreamUrl' => (string)$router->fromHere('api:stations:reports:by-stream'),
'byBrowserUrl' => (string)$router->fromHere('api:stations:reports:by-browser'),
'byCountryUrl' => (string)$router->fromHere('api:stations:reports:by-country'),
]
);
}
}