Fix the handling of mentions with and without leading @
authorAlexander Ebert <ebert@woltlab.com>
Fri, 18 Aug 2023 14:58:07 +0000 (16:58 +0200)
committerAlexander Ebert <ebert@woltlab.com>
Fri, 18 Aug 2023 14:58:07 +0000 (16:58 +0200)
com.woltlab.wcf/templates/userBBCodeTag.tpl
wcfsetup/install/files/acp/templates/userBBCodeTag.tpl
wcfsetup/install/files/lib/system/bbcode/UserBBCode.class.php

index dbe32b29d2a41c5719cef2f17a7ea824a4437370..369371df25c6c0a30c11e90226933546685116e4 100644 (file)
@@ -1,6 +1,6 @@
 {if $userProfile === null}
        {* user no longer exists, use plain output rather than using a broken link *}
-       @{$username}{* no newline after the tag
+       {$username}{* no newline after the tag
 *}{else}
        <a href="{link controller='User' object=$userProfile->getDecoratedObject()}{/link}" class="userMention userLink" data-object-id="{@$userProfile->userID}">{@$userProfile->getFormattedUsername()}</a>{* no newline after the tag
 *}{/if}
index dbe32b29d2a41c5719cef2f17a7ea824a4437370..369371df25c6c0a30c11e90226933546685116e4 100644 (file)
@@ -1,6 +1,6 @@
 {if $userProfile === null}
        {* user no longer exists, use plain output rather than using a broken link *}
-       @{$username}{* no newline after the tag
+       {$username}{* no newline after the tag
 *}{else}
        <a href="{link controller='User' object=$userProfile->getDecoratedObject()}{/link}" class="userMention userLink" data-object-id="{@$userProfile->userID}">{@$userProfile->getFormattedUsername()}</a>{* no newline after the tag
 *}{/if}
index d96c4b5d2e900e4201c7dced991c12587cd6756e..0b0d4c290b3cf1458ab4a8c7c7cf89210f504e12 100644 (file)
@@ -21,6 +21,10 @@ final class UserBBCode extends AbstractBBCode
      */
     public function getParsedTag(array $openingTag, $content, array $closingTag, BBCodeParser $parser): string
     {
+        if (!\str_starts_with($content, "@")) {
+            $content = "@{$content}";
+        }
+
         $userID = (!empty($openingTag['attributes'][0])) ? \intval($openingTag['attributes'][0]) : 0;
         if (!$userID) {
             return "[user]{$content}[/user]";