includes/dashboard/referrers.php
<?php
declare(strict_types=1);
/*
|--------------------------------------------------------------------------
| Referrers and search engines
|--------------------------------------------------------------------------
*/
$referrersRaw = fetchAll($db, "
SELECT referrer, SUM(views) AS views
FROM referrers_daily
WHERE $rangeSql
GROUP BY referrer
ORDER BY views DESC
", $rangeParams);
if ($includeArchives) {
foreach (archiveGroupedViews('referrers', 'referrer', $rangeStart, $rangeEnd) as $row) {
$referrersRaw[] = $row;
}
}
$searchEnginesGrouped = [];
$referrersGrouped = [];
foreach ($referrersRaw as $row) {
$referrer = (string)($row['referrer'] ?? '');
if ($referrer === '') {
continue;
}
$realCategory = referrerCategory($referrer);
if (
referrerBlocked($referrer) ||
$realCategory === BRIVACIA_CATEGORY_BLOCKED
) {
$canonical = BRIVACIA_BLOCKED;
$label = t('ui.blocked');
$category = BRIVACIA_CATEGORY_BLOCKED;
} elseif (strcasecmp($referrer, BRIVACIA_UNKNOWN) === 0) {
$canonical = BRIVACIA_UNKNOWN;
$label = t('ui.unknown');
$category = BRIVACIA_CATEGORY_REFERRER;
} else {
$canonical = referrerCanonical($referrer);
$label = referrerLabel($referrer);
$category = $realCategory;
}
if ($category === BRIVACIA_CATEGORY_SEARCH) {
$target =& $searchEnginesGrouped;
} else {
$target =& $referrersGrouped;
}
if (!isset($target[$canonical])) {
$target[$canonical] = [
'referrer' => $canonical,
'label' => $label,
'category' => $category,
'views' => 0,
];
}
$target[$canonical]['views'] += (int)($row['views'] ?? 0);
unset($target);
}
$searchEngines = array_values($searchEnginesGrouped);
$referrers = array_values($referrersGrouped);
usort($searchEngines, fn($a, $b) => $b['views'] <=> $a['views']);
usort($referrers, fn($a, $b) => $b['views'] <=> $a['views']);