diff --git a/assets/less/mio/classes/comment.less b/assets/less/mio/classes/comment.less index 348624b1..ba819dc4 100644 --- a/assets/less/mio/classes/comment.less +++ b/assets/less/mio/classes/comment.less @@ -21,6 +21,16 @@ margin-bottom: 3px; } + &__mention { + color: inherit; + text-decoration: none; + font-weight: 700; + + &:hover { + text-decoration: underline; + } + } + &__actions { list-style: none; display: flex; diff --git a/src/Users/user.php b/src/Users/user.php index 231c9784..a1e9b12b 100644 --- a/src/Users/user.php +++ b/src/Users/user.php @@ -55,13 +55,6 @@ function user_id_from_username(string $username): int return $getId->execute() ? (int)$getId->fetchColumn() : 0; } -function user_username_from_id(int $userId): string -{ - $getId = Database::prepare('SELECT `username` FROM `msz_users` WHERE `user_id` = :user_id'); - $getId->bindValue('user_id', $userId); - return $getId->execute() ? (string)$getId->fetchColumn() : 'deleted'; -} - define('MSZ_USER_AVATAR_FORMAT', '%d.msz'); function user_avatar_delete(int $userId): void diff --git a/src/comments.php b/src/comments.php index b8d969db..53dc83ea 100644 --- a/src/comments.php +++ b/src/comments.php @@ -39,7 +39,32 @@ function comments_parse_for_store(string $text): string function comments_parse_for_display(string $text): string { return preg_replace_callback(MSZ_COMMENTS_MARKUP_USER_ID, function ($matches) { - return '@' . user_username_from_id($matches[1]) . ''; + $getInfo = Database::prepare(' + SELECT + u.`user_id`, u.`username`, + COALESCE(u.`user_colour`, r.`role_colour`) as `user_colour` + FROM `msz_users` as u + LEFT JOIN `msz_roles` as r + ON u.`display_role` = r.`role_id` + WHERE `user_id` = :user_id + '); + $getInfo->bindValue('user_id', $matches[1]); + $info = $getInfo->execute() ? $getInfo->fetch(PDO::FETCH_ASSOC) : []; + + if (!$info) { + return $matches[0]; + } + + return '@' + . $info['username'] + . ''; }, $text); }