From 90ab9a280bf76e9d8780d1c783c1fe78ce23bb8e Mon Sep 17 00:00:00 2001 From: flashwave Date: Tue, 9 Jun 2020 19:21:20 +0000 Subject: [PATCH] Fixed chat ban loading. --- src/Http/Handlers/SockChatHandler.php | 25 +++++++++++++++++-------- src/Users/UserWarning.php | 8 ++++++++ 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/src/Http/Handlers/SockChatHandler.php b/src/Http/Handlers/SockChatHandler.php index 39162056..898ddd33 100644 --- a/src/Http/Handlers/SockChatHandler.php +++ b/src/Http/Handlers/SockChatHandler.php @@ -16,6 +16,7 @@ use Misuzu\Users\UserChatTokenNotFoundException; use Misuzu\Users\UserChatTokenCreationFailedException; use Misuzu\Users\UserSession; use Misuzu\Users\UserSessionNotFoundException; +use Misuzu\Users\UserWarning; final class SockChatHandler extends Handler { private string $hashKey = 'woomy'; @@ -124,14 +125,22 @@ final class SockChatHandler extends Handler { if(!hash_equals($realHash, $userHash)) return []; - return DB::prepare(' - SELECT uw.`user_id` AS `id`, DATE_FORMAT(uw.`warning_duration`, \'%Y-%m-%dT%TZ\') AS `expires`, INET6_NTOA(uw.`user_ip`) AS `ip`, u.`username` - FROM `msz_user_warnings` AS uw - LEFT JOIN `msz_users` AS u - ON u.`user_id` = uw.`user_id` - WHERE uw.`warning_type` = 3 - AND uw.`warning_duration` > NOW() - ')->fetchAll(); + $warnings = UserWarning::byActive(); + $bans = []; + + foreach($warnings as $warning) { + if(!$warning->isBan() || $warning->hasExpired()) + continue; + + $bans[] = [ + 'id' => $warning->getUser()->getId(), + 'expires' => date('c', $warning->isPermanent() ? 0x7FFFFFFF : $warning->getExpirationTime()), + 'ip' => $warning->getUserRemoteAddress(), + 'username' => $warning->getUser()->getUsername() + ]; + } + + return $bans; } public function login(HttpResponse $response, HttpRequest $request) { diff --git a/src/Users/UserWarning.php b/src/Users/UserWarning.php index a0c8f944..346c9315 100644 --- a/src/Users/UserWarning.php +++ b/src/Users/UserWarning.php @@ -259,6 +259,14 @@ class UserWarning { return $getObjects->fetchObjects(self::class); } + public static function byActive(): array { + return DB::prepare( + self::byQueryBase() + . ' WHERE `warning_type` IN (' . implode(',', self::HAS_DURATION) . ')' + . ' AND (`warning_duration` IS NULL OR `warning_duration` >= NOW())' + . ' ORDER BY `warning_type` DESC, `warning_duration` DESC' + )->fetchObjects(self::class); + } public static function all(?User $user = null, ?Pagination $pagination = null): array { $query = self::byQueryBase() . ($user === null ? '' : ' WHERE `user_id` = :user')