includes/dashboard/_init.php
<?php
declare(strict_types=1);
/*
|--------------------------------------------------------------------------
| Search engines
|--------------------------------------------------------------------------
|
| Move along, bots. Nothing to index here.
|
*/
header('X-Robots-Tag: noindex, nofollow, noarchive, nosnippet');
/*
|--------------------------------------------------------------------------
| Dashboard bootstrap
|--------------------------------------------------------------------------
*/
$db = brivaciaDb();
$day = $_GET['day'] ?? date('Y-m-d');
$showCountries = brivacia_setting('privacy.country_provider', 'none') !== 'none';
/*
|--------------------------------------------------------------------------
| Date range
|--------------------------------------------------------------------------
*/
$view = $_GET['view'] ?? 'today';
$allowedViews = ['today', 'week', 'month', 'year', 'all'];
if (!in_array($view, $allowedViews, true)) {
$view = 'today';
}
$day = $_GET['day'] ?? date('Y-m-d');
$week = $_GET['week'] ?? date('o-\WW');
$month = $_GET['month'] ?? date('Y-m');
$year = $_GET['year'] ?? date('Y');
$year = substr($year, 0, 4);
$periodInputName = 'day';
$periodInputType = 'date';
$periodInputValue = $day;
$periodLabel = $day;
$rangeStart = $day;
$rangeEnd = $day;
switch ($view) {
case 'today':
$rangeSql = 'day = ?';
$rangeParams = [$day];
break;
case 'week':
$weekStart = date('Y-m-d', strtotime($week));
$weekEnd = date('Y-m-d', strtotime($weekStart . ' +6 days'));
$rangeSql = 'day BETWEEN ? AND ?';
$rangeParams = [$weekStart, $weekEnd];
$rangeStart = $weekStart;
$rangeEnd = $weekEnd;
$periodInputName = 'week';
$periodInputType = 'week';
$periodInputValue = $week;
$periodLabel = $week;
break;
case 'month':
$rangeSql = 'day BETWEEN ? AND ?';
$rangeParams = [
$month . '-01',
date('Y-m-t', strtotime($month . '-01')),
];
$rangeStart = $rangeParams[0];
$rangeEnd = $rangeParams[1];
$periodInputName = 'month';
$periodInputType = 'month';
$periodInputValue = $month;
$periodLabel = $month;
break;
case 'year':
$rangeSql = 'day BETWEEN ? AND ?';
$rangeParams = [
$year . '-01-01',
$year . '-12-31',
];
$rangeStart = $rangeParams[0];
$rangeEnd = $rangeParams[1];
$periodInputType = 'month';
$periodInputValue = $year . '-01';
$periodLabel = $periodIosInputValue = $year;
$periodIosInputType = 'number';
$periodIosInputValue = $periodLabel;
break;
case 'all':
$rangeSql = '1 = 1';
$rangeParams = [];
$rangeStart = null;
$rangeEnd = null;
$periodInputName = '';
$periodInputType = '';
$periodInputValue = '';
$periodLabel = t('form.all');
break;
}
/*
|--------------------------------------------------------------------------
| Site filter
|--------------------------------------------------------------------------
*/
if ($currentSite !== '' && isset(brivacia_sites()[$currentSite])) {
$rangeSql .= ' AND site = ?';
$rangeParams[] = $currentSite;
} else {
$currentSite = '';
}
/*
|--------------------------------------------------------------------------
| Local helpers
|--------------------------------------------------------------------------
*/
function one(PDO $db, string $sql, array $params = []): array {
return fetchAll($db, $sql, $params)[0] ?? [];
}
function dashboardRangeNeedsArchives(?string $start, ?string $end): bool {
if ($start === null || $end === null) {
return true;
}
return $start < date('Y') . '-01-01';
}
$includeArchives = dashboardRangeNeedsArchives($rangeStart, $rangeEnd);
function dashboardViewUrl(string $view, string $day, string $week, string $month, string $year, array $extra = []): string {
$params = ['view' => $view];
if (($extra['site'] ?? '') !== '') {
$params['site'] = $extra['site'];
}
match ($view) {
'today' => $params['day'] = $day,
'week' => $params['week'] = $week,
'month' => $params['month'] = $month,
'year' => $params['year'] = $year,
'all' => null,
default => $params = ['view' => 'today', 'day' => $day],
};
return '?' . http_build_query($params);
}
function dashboardPaginationParams(string $view, string $day, string $week, string $month, string $year, array $extra = []): string {
return ltrim(
dashboardViewUrl($view, $day, $week, $month, $year, $extra),
'?'
);
}