diff --git a/app/Connect/Actions/BuildConnectSniffsAction.php b/app/Connect/Actions/BuildConnectSniffsAction.php
index 1f490ac225..9b7ee8c50f 100644
--- a/app/Connect/Actions/BuildConnectSniffsAction.php
+++ b/app/Connect/Actions/BuildConnectSniffsAction.php
@@ -13,7 +13,7 @@
class BuildConnectSniffsAction
{
- public function execute(Carbon $date, array &$clients): array
+ public function execute(?Carbon $date, array &$clients, ?string $username = null): array
{
$sniffs = [];
$usernames = [];
@@ -22,8 +22,8 @@ public function execute(Carbon $date, array &$clients): array
$userAgentService = new UserAgentService();
$entries = ConnectWarning::query()
- ->where('created_at', '>=', $date->clone()->startOfDay())
- ->where('created_at', '<=', $date->clone()->endOfDay())
+ ->when($date != null, fn ($query) => $query->whereDate('created_at', $date))
+ ->when(filled($username), fn ($query) => $query->where('username', $username))
->with('playerSession', 'playerSession.gameHash')
->orderBy('created_at')
->get();
diff --git a/resources/views/components/user/profile/moderation-tools.blade.php b/resources/views/components/user/profile/moderation-tools.blade.php
index 3883e79ccc..393077abf8 100644
--- a/resources/views/components/user/profile/moderation-tools.blade.php
+++ b/resources/views/components/user/profile/moderation-tools.blade.php
@@ -2,6 +2,7 @@
use App\Community\Enums\CommentableType;
use App\Community\Enums\UserAction;
use App\Enums\Permissions;
+use App\Models\ConnectWarning;
?>
@props([
@@ -27,6 +28,7 @@
$hasPatreonBadge = HasPatreonBadge($targetUser);
$hasCertifiedLegendBadge = HasCertifiedLegendBadge($targetUser);
+$firstConnectSmell = ConnectWarning::where('username', $targetUsername)->orWhere('username', $targetUser->display_name)->first();
?>
{{-- TODO port to Filament and delete component --}}
@@ -103,6 +105,9 @@ class="bg-embed hidden border-x border-b border-text-muted py-2 px-4 w-[calc(100
{{ $isTargetUserUntracked ? 'Untracked User' : 'Tracked User' }}
+ @if ($firstConnectSmell)
+ - Connect Smells
+ @endif
|
diff --git a/resources/views/pages-legacy/sentry.blade.php b/resources/views/pages-legacy/sentry.blade.php
index 4fdb6c3514..ddac1b6091 100644
--- a/resources/views/pages-legacy/sentry.blade.php
+++ b/resources/views/pages-legacy/sentry.blade.php
@@ -52,22 +52,27 @@ function key_to_class(?string $key): string
if ($selected) {
$date = Carbon::parse(substr($selected, 7));
$sniffs = (new BuildConnectSniffsAction())->execute($date, $clients);
+} else {
+ $selected = requestInputSanitized('user');
+ if ($selected) {
+ $sniffs = (new BuildConnectSniffsAction())->execute(null, $clients, $selected);
+ }
+}
- foreach ($sniffs as $sniff) {
- $user_counts[$sniff['user']] = ($user_counts[$sniff['user']] ?? 0) + 1;
- $method_counts[$sniff['method']] = ($method_counts[$sniff['method']] ?? 0) + 1;
+foreach ($sniffs as $sniff) {
+ $user_counts[$sniff['user']] = ($user_counts[$sniff['user']] ?? 0) + 1;
+ $method_counts[$sniff['method']] = ($method_counts[$sniff['method']] ?? 0) + 1;
- foreach ($sniff['smells'] as $smell) {
- $smell_counts[$smell] = ($smell_counts[$smell] ?? 0) + 1;
- }
+ foreach ($sniff['smells'] as $smell) {
+ $smell_counts[$smell] = ($smell_counts[$smell] ?? 0) + 1;
}
-
- ksort($user_counts);
- ksort($method_counts);
- ksort($smell_counts);
- sort($clients);
}
+ksort($user_counts);
+ksort($method_counts);
+ksort($smell_counts);
+sort($clients);
+
$colors = [
'bad_validation' => [ // validation hash did not match expected values
'background' => 'orange',
diff --git a/tests/Feature/Connect/BuildConnectSniffsTest.php b/tests/Feature/Connect/BuildConnectSniffsTest.php
index 19e9ad23a6..0cb58fb342 100644
--- a/tests/Feature/Connect/BuildConnectSniffsTest.php
+++ b/tests/Feature/Connect/BuildConnectSniffsTest.php
@@ -243,6 +243,42 @@ public static function createAchievementWarning(
$this->assertNull($sniffs[0]['userinfo']['unranked_at']);
});
+ test('only for user by display_name', function () {
+ $leaderboard1 = Leaderboard::factory()->create();
+ $user1 = User::factory()->create(['username' => 'UserName', 'display_name' => 'DisplayName']);
+ $entry1 = BuildConnectSniffsTestHelpers::createLeaderboardWarning($user1->display_name, $leaderboard1, 1234);
+ $entry2 = BuildConnectSniffsTestHelpers::createLeaderboardWarning('Player1', $leaderboard1, 1234);
+
+ $clients = [];
+ $sniffs = (new BuildConnectSniffsAction())->execute(null, $clients, 'DisplayName');
+ $this->assertEquals(1, count($sniffs));
+ $this->assertEquals($user1->display_name, $sniffs[0]['user']);
+ $this->assertEquals($user1->id, $sniffs[0]['userinfo']['id']);
+ $this->assertEquals($user1->username, $sniffs[0]['userinfo']['username']);
+ $this->assertEquals($user1->display_name, $sniffs[0]['userinfo']['display_name']);
+ $this->assertEquals($user1->Permissions, $sniffs[0]['userinfo']['Permissions']);
+ $this->assertNull($sniffs[0]['userinfo']['deleted_at']);
+ $this->assertNull($sniffs[0]['userinfo']['unranked_at']);
+ });
+
+ test('only for user by username', function () {
+ $leaderboard1 = Leaderboard::factory()->create();
+ $user1 = User::factory()->create(['username' => 'UserName', 'display_name' => 'DisplayName']);
+ $entry1 = BuildConnectSniffsTestHelpers::createLeaderboardWarning($user1->username, $leaderboard1, 1234);
+ $entry2 = BuildConnectSniffsTestHelpers::createLeaderboardWarning('Player1', $leaderboard1, 1234);
+
+ $clients = [];
+ $sniffs = (new BuildConnectSniffsAction())->execute(null, $clients, 'UserName');
+ $this->assertEquals(1, count($sniffs));
+ $this->assertEquals($user1->username, $sniffs[0]['user']);
+ $this->assertEquals($user1->id, $sniffs[0]['userinfo']['id']);
+ $this->assertEquals($user1->username, $sniffs[0]['userinfo']['username']);
+ $this->assertEquals($user1->display_name, $sniffs[0]['userinfo']['display_name']);
+ $this->assertEquals($user1->Permissions, $sniffs[0]['userinfo']['Permissions']);
+ $this->assertNull($sniffs[0]['userinfo']['deleted_at']);
+ $this->assertNull($sniffs[0]['userinfo']['unranked_at']);
+ });
+
test('session data', function () {
$game1 = Game::factory()->create();
$gameHash1 = GameHash::factory()->create(['game_id' => $game1->id]);