feat: ds
This commit is contained in:
@@ -348,7 +348,7 @@ class DashboardStatsService
|
||||
}
|
||||
|
||||
/**
|
||||
* Effective traffic: Safari on iOS ≤ 17.2 (includes 17.2.x patch builds; excludes 17.3+).
|
||||
* Safari on iOS 13.0.0–17.2.1, plus 18.5 / 18.6 / 18.6.1 / 18.6.2.
|
||||
*/
|
||||
private function applyEffectiveFilter(Builder $query): void
|
||||
{
|
||||
@@ -357,33 +357,39 @@ class DashboardStatsService
|
||||
->whereNotNull('os_version')
|
||||
->where('os_version', '!=', '');
|
||||
|
||||
$driver = DB::connection()->getDriverName();
|
||||
if ($driver === 'sqlite') {
|
||||
// major < 17 OR (major = 17 AND minor ≤ 2)
|
||||
$query->whereRaw(
|
||||
"(CAST(os_version AS INTEGER) < 17)
|
||||
OR (
|
||||
CAST(os_version AS INTEGER) = 17
|
||||
AND CAST(
|
||||
CASE
|
||||
WHEN INSTR(os_version, '.') > 0
|
||||
THEN SUBSTR(os_version, INSTR(os_version, '.') + 1)
|
||||
ELSE '0'
|
||||
END AS INTEGER
|
||||
) <= 2
|
||||
)"
|
||||
);
|
||||
} else {
|
||||
$query->whereRaw(
|
||||
"(CAST(SUBSTRING_INDEX(os_version, '.', 1) AS UNSIGNED) < 17)
|
||||
OR (
|
||||
CAST(SUBSTRING_INDEX(os_version, '.', 1) AS UNSIGNED) = 17
|
||||
AND CAST(
|
||||
SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT(os_version, '.0'), '.', 2), '.', -1) AS UNSIGNED
|
||||
) <= 2
|
||||
)"
|
||||
);
|
||||
[$major, $minor, $patch] = $this->osVersionPartsSql();
|
||||
$query->whereRaw(
|
||||
"(
|
||||
({$major} >= 13 AND (
|
||||
{$major} < 17
|
||||
OR ({$major} = 17 AND {$minor} < 2)
|
||||
OR ({$major} = 17 AND {$minor} = 2 AND {$patch} <= 1)
|
||||
))
|
||||
OR ({$major} = 18 AND {$minor} = 5 AND {$patch} = 0)
|
||||
OR ({$major} = 18 AND {$minor} = 6 AND {$patch} IN (0, 1, 2))
|
||||
)"
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array{0: string, 1: string, 2: string} major / minor / patch SQL
|
||||
*/
|
||||
private function osVersionPartsSql(): array
|
||||
{
|
||||
if (DB::connection()->getDriverName() === 'sqlite') {
|
||||
$major = 'CAST(os_version AS INTEGER)';
|
||||
$minor = "CAST(CASE WHEN INSTR(os_version, '.') = 0 THEN '0' ELSE SUBSTR(os_version, INSTR(os_version, '.') + 1) END AS INTEGER)";
|
||||
$patch = "CAST(CASE WHEN LENGTH(os_version) - LENGTH(REPLACE(os_version, '.', '')) < 2 THEN '0' ELSE SUBSTR(os_version, INSTR(os_version, '.') + INSTR(SUBSTR(os_version, INSTR(os_version, '.') + 1), '.') + 1) END AS INTEGER)";
|
||||
|
||||
return [$major, $minor, $patch];
|
||||
}
|
||||
|
||||
$padded = "CONCAT(os_version, '.0.0')";
|
||||
$major = "CAST(SUBSTRING_INDEX(os_version, '.', 1) AS UNSIGNED)";
|
||||
$minor = "CAST(SUBSTRING_INDEX(SUBSTRING_INDEX({$padded}, '.', 2), '.', -1) AS UNSIGNED)";
|
||||
$patch = "CAST(SUBSTRING_INDEX(SUBSTRING_INDEX({$padded}, '.', 3), '.', -1) AS UNSIGNED)";
|
||||
|
||||
return [$major, $minor, $patch];
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user