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 '';
}, $text);
}