Compare commits

...

2 Commits

Author SHA1 Message Date
Josh 2f2abb09a1 fix(Comments): sort by id (not type+id) in getMentions
Updated the getMentions method to inherit documentation and change sorting logic.

Signed-off-by: Josh <josh.t.richards@gmail.com>
2025-11-03 10:52:07 -05:00
Josh 2d6ac6ad74 chore: Update docblock for getMentions method
Updated the docblock for the getMentions method to clarify its return value and sorting behavior.

Signed-off-by: Josh <josh.t.richards@gmail.com>
2025-11-03 10:48:43 -05:00
2 changed files with 13 additions and 14 deletions
+5 -12
View File
@@ -182,15 +182,7 @@ class Comment implements IComment {
}
/**
* returns an array containing mentions that are included in the comment
*
* @return array each mention provides a 'type' and an 'id', see example below
* @psalm-return list<array{type: 'guest'|'email'|'federated_group'|'group'|'federated_team'|'team'|'federated_user'|'user', id: non-empty-lowercase-string}>
* @since 30.0.2 Type 'email' is supported
* @since 29.0.0 Types 'federated_group', 'federated_team', 'team' and 'federated_user' are supported
* @since 23.0.0 Type 'group' is supported
* @since 17.0.0 Type 'guest' is supported
* @since 11.0.0
* @inheritDoc
*/
public function getMentions(): array {
$ok = preg_match_all("/\B(?<![^a-z0-9_\-@\.\'\s])@(\"(guest|email)\/[a-f0-9]+\"|\"(?:federated_)?(?:group|team|user){1}\/[a-z0-9_\-@\.\' \/:]+\"|\"[a-z0-9_\-@\.\' ]+\"|[a-z0-9_\-@\.\']+)/i", $this->getMessage(), $mentions);
@@ -198,9 +190,6 @@ class Comment implements IComment {
return [];
}
$mentionIds = array_unique($mentions[0]);
usort($mentionIds, static function ($mentionId1, $mentionId2) {
return mb_strlen($mentionId2) <=> mb_strlen($mentionId1);
});
$result = [];
foreach ($mentionIds as $mentionId) {
// Cut-off the @ and remove wrapping double-quotes
@@ -237,6 +226,10 @@ class Comment implements IComment {
$result[] = ['type' => 'user', 'id' => $cleanId];
}
}
// Return sorted by id (descending length)
usort($result, static function ($mention1, $mention2) {
return mb_strlen($mention2['id']) <=> mb_strlen($mention1['id']);
});
return $result;
}
+8 -2
View File
@@ -121,13 +121,19 @@ interface IComment {
public function setMessage($message, $maxLength = self::MAX_MESSAGE_LENGTH);
/**
* returns an array containing mentions that are included in the comment
* Returns all mentions from the comment message.
*
* @return array each mention provides a 'type' and an 'id', see example below
* Parses the message, returning an array of mentions.
* Mentions are sorted by descending length of their id before being returned.
*
* Supported mention types: 'user', 'group', 'team', 'guest', 'email', 'federated_group', 'federated_team', 'federated_user'.
*
* @return array Each mention is an associative array with 'type' and 'id' keys, sorted by descending length.
* @psalm-return list<array{type: 'guest'|'email'|'federated_group'|'group'|'federated_team'|'team'|'federated_user'|'user', id: non-empty-lowercase-string}>
* @since 30.0.2 Type 'email' is supported
* @since 29.0.0 Types 'federated_group', 'federated_team', 'team' and 'federated_user' are supported
* @since 23.0.0 Type 'group' is supported
* @since 21.0.1 Sort returned results by
* @since 17.0.0 Type 'guest' is supported
* @since 11.0.0
*/