diff options
author | Joas Schilling <coding@schilljs.com> | 2024-10-17 12:37:14 +0200 |
---|---|---|
committer | Joas Schilling <coding@schilljs.com> | 2024-10-17 14:27:42 +0200 |
commit | b61a8cfeba5e5fc8eecb9d4d10cd55096b527608 (patch) | |
tree | 1302af2c9ae2a2d6140ef7fd6b38ffa0f66c2a72 /lib/private/Comments | |
parent | 9d6c0afad60fbdcaaa0a58fec3775f1291f8a44c (diff) | |
download | nextcloud-server-b61a8cfeba5e5fc8eecb9d4d10cd55096b527608.tar.gz nextcloud-server-b61a8cfeba5e5fc8eecb9d4d10cd55096b527608.zip |
fix(comments): Document supported types and provide psalm typing
Signed-off-by: Joas Schilling <coding@schilljs.com>
Diffstat (limited to 'lib/private/Comments')
-rw-r--r-- | lib/private/Comments/Comment.php | 40 |
1 files changed, 21 insertions, 19 deletions
diff --git a/lib/private/Comments/Comment.php b/lib/private/Comments/Comment.php index 46912720a3c..7190f252c82 100644 --- a/lib/private/Comments/Comment.php +++ b/lib/private/Comments/Comment.php @@ -185,21 +185,12 @@ 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 - * - * The return array looks like: - * [ - * [ - * 'type' => 'user', - * 'id' => 'citizen4' - * ], - * [ - * 'type' => 'group', - * 'id' => 'media' - * ], - * … - * ] - * */ 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); @@ -213,6 +204,7 @@ class Comment implements IComment { $result = []; foreach ($mentionIds as $mentionId) { // Cut-off the @ and remove wrapping double-quotes + /** @var non-empty-lowercase-string $cleanId */ $cleanId = trim(substr($mentionId, 1), '"'); if (str_starts_with($cleanId, 'guest/')) { @@ -222,15 +214,25 @@ class Comment implements IComment { $cleanId = substr($cleanId, 6); $result[] = ['type' => 'email', 'id' => $cleanId]; } elseif (str_starts_with($cleanId, 'federated_group/')) { - $result[] = ['type' => 'federated_group', 'id' => substr($cleanId, 16)]; + /** @var non-empty-lowercase-string $cleanId */ + $cleanId = substr($cleanId, 16); + $result[] = ['type' => 'federated_group', 'id' => $cleanId]; } elseif (str_starts_with($cleanId, 'group/')) { - $result[] = ['type' => 'group', 'id' => substr($cleanId, 6)]; + /** @var non-empty-lowercase-string $cleanId */ + $cleanId = substr($cleanId, 6); + $result[] = ['type' => 'group', 'id' => $cleanId]; } elseif (str_starts_with($cleanId, 'federated_team/')) { - $result[] = ['type' => 'federated_team', 'id' => substr($cleanId, 15)]; + /** @var non-empty-lowercase-string $cleanId */ + $cleanId = substr($cleanId, 15); + $result[] = ['type' => 'federated_team', 'id' => $cleanId]; } elseif (str_starts_with($cleanId, 'team/')) { - $result[] = ['type' => 'team', 'id' => substr($cleanId, 5)]; + /** @var non-empty-lowercase-string $cleanId */ + $cleanId = substr($cleanId, 5); + $result[] = ['type' => 'team', 'id' => $cleanId]; } elseif (str_starts_with($cleanId, 'federated_user/')) { - $result[] = ['type' => 'federated_user', 'id' => substr($cleanId, 15)]; + /** @var non-empty-lowercase-string $cleanId */ + $cleanId = substr($cleanId, 15); + $result[] = ['type' => 'federated_user', 'id' => $cleanId]; } else { $result[] = ['type' => 'user', 'id' => $cleanId]; } |