Simplify recent activity messages
authorMarcel Werk <burntime@woltlab.com>
Thu, 15 Feb 2024 15:33:18 +0000 (16:33 +0100)
committerMarcel Werk <burntime@woltlab.com>
Thu, 15 Feb 2024 15:33:18 +0000 (16:33 +0100)
15 files changed:
wcfsetup/install/files/lib/data/comment/Comment.class.php
wcfsetup/install/files/lib/data/comment/response/CommentResponse.class.php
wcfsetup/install/files/lib/system/box/RecentActivityListBoxController.class.php
wcfsetup/install/files/lib/system/user/activity/event/ArticleCommentResponseUserActivityEvent.class.php
wcfsetup/install/files/lib/system/user/activity/event/ArticleCommentUserActivityEvent.class.php
wcfsetup/install/files/lib/system/user/activity/event/ArticleUserActivityEvent.class.php
wcfsetup/install/files/lib/system/user/activity/event/FollowUserActivityEvent.class.php
wcfsetup/install/files/lib/system/user/activity/event/LikeableArticleUserActivityEvent.class.php
wcfsetup/install/files/lib/system/user/activity/event/PageCommentResponseUserActivityEvent.class.php
wcfsetup/install/files/lib/system/user/activity/event/PageCommentUserActivityEvent.class.php
wcfsetup/install/files/lib/system/user/activity/event/ProfileCommentResponseUserActivityEvent.class.php
wcfsetup/install/files/lib/system/user/activity/event/ProfileCommentUserActivityEvent.class.php
wcfsetup/install/files/lib/system/user/activity/event/TrophyReceivedUserActivityEvent.class.php
wcfsetup/install/lang/de.xml
wcfsetup/install/lang/en.xml

index f1fc84bf14a01619de1376494760d1eb334aa36b..7cd494412520f30f28ffe9363d2ca82d858de1c6 100644 (file)
@@ -99,6 +99,18 @@ class Comment extends DatabaseObject implements IMessage
         return $processor->getHtml();
     }
 
+    /**
+     * @since 6.1
+     */
+    public function getPlainTextMessage(): string
+    {
+        $processor = new HtmlOutputProcessor();
+        $processor->setOutputType('text/plain');
+        $processor->process($this->message, 'com.woltlab.wcf.comment', $this->commentID);
+
+        return $processor->getHtml();
+    }
+
     /**
      * Returns a version of this message optimized for use in emails.
      *
@@ -109,11 +121,7 @@ class Comment extends DatabaseObject implements IMessage
     {
         switch ($mimeType) {
             case 'text/plain':
-                $processor = new HtmlOutputProcessor();
-                $processor->setOutputType('text/plain');
-                $processor->process($this->message, 'com.woltlab.wcf.comment', $this->commentID);
-
-                return $processor->getHtml();
+                return $this->getPlainTextMessage();
             case 'text/html':
                 return $this->getSimplifiedFormattedMessage();
         }
index 37a13a9206b4720150e107f9d9b624ae2c86d293..d515db8a7143098f373b7d489588dcd96bbf764c 100644 (file)
@@ -63,6 +63,18 @@ class CommentResponse extends DatabaseObject implements IMessage
         return $processor->getHtml();
     }
 
+    /**
+     * @since 6.1
+     */
+    public function getPlainTextMessage(): string
+    {
+        $processor = new HtmlOutputProcessor();
+        $processor->setOutputType('text/plain');
+        $processor->process($this->message, 'com.woltlab.wcf.comment.response', $this->responseID);
+
+        return $processor->getHtml();
+    }
+
     /**
      * Returns a version of this message optimized for use in emails.
      *
@@ -73,11 +85,7 @@ class CommentResponse extends DatabaseObject implements IMessage
     {
         switch ($mimeType) {
             case 'text/plain':
-                $processor = new HtmlOutputProcessor();
-                $processor->setOutputType('text/plain');
-                $processor->process($this->message, 'com.woltlab.wcf.comment.response', $this->responseID);
-
-                return $processor->getHtml();
+                return $this->getPlainTextMessage();
             case 'text/html':
                 return $this->getSimplifiedFormattedMessage();
         }
index d237089971ce9638d68fe7b7caf904e8be6b1b46..2101667676d962595eeb99f602bbe740c3e879a4 100644 (file)
@@ -41,12 +41,6 @@ class RecentActivityListBoxController extends AbstractDatabaseObjectListBoxContr
      */
     public $filteredByFollowedUsers = false;
 
-    /**
-     * is true if filtering by followed users yielded no results
-     * @var bool
-     */
-    public $filteredByFollowedUsersOverride = false;
-
     /**
      * @inheritDoc
      */
@@ -113,7 +107,6 @@ class RecentActivityListBoxController extends AbstractDatabaseObjectListBoxContr
                 'eventList' => $this->objectList,
                 'lastEventTime' => $this->objectList->getLastEventTime(),
                 'filteredByFollowedUsers' => $this->filteredByFollowedUsers,
-                'filteredByFollowedUsersOverride' => $this->filteredByFollowedUsersOverride,
             ], true);
         } else {
             return WCF::getTPL()->fetch('boxRecentActivitySidebar', 'wcf', [
@@ -140,11 +133,8 @@ class RecentActivityListBoxController extends AbstractDatabaseObjectListBoxContr
 
         if (!$hasContent) {
             if (($this->getBox()->position == 'contentTop' || $this->getBox()->position == 'contentBottom') && $this->filteredByFollowedUsers) {
-                $this->filteredByFollowedUsersOverride = true;
-
-                $this->loadContent();
-
-                return \count($this->objectList) > 0;
+                // Box is empty, but we show it anyway so that the user can change the filtering.
+                return true;
             }
         }
 
@@ -158,13 +148,11 @@ class RecentActivityListBoxController extends AbstractDatabaseObjectListBoxContr
     {
         // apply filter
         if (($this->getBox()->position == 'contentTop' || $this->getBox()->position == 'contentBottom') && $this->filteredByFollowedUsers) {
-            if (!$this->filteredByFollowedUsersOverride) {
-                /** @noinspection PhpUndefinedMethodInspection */
-                $this->objectList->getConditionBuilder()->add(
-                    'user_activity_event.userID IN (?)',
-                    [WCF::getUserProfileHandler()->getFollowingUsers()]
-                );
-            }
+            /** @noinspection PhpUndefinedMethodInspection */
+            $this->objectList->getConditionBuilder()->add(
+                'user_activity_event.userID IN (?)',
+                [WCF::getUserProfileHandler()->getFollowingUsers()]
+            );
         } elseif (!empty(UserProfileHandler::getInstance()->getIgnoredUsers(UserIgnore::TYPE_HIDE_MESSAGES))) {
             $this->objectList->getConditionBuilder()->add(
                 "user_activity_event.userID NOT IN (?)",
index a063655c8c1716b23abe5f5b8322d280210e2293..e4ee8fdb06f538dc3d505e1eadde698b796774f1 100644 (file)
@@ -5,6 +5,7 @@ namespace wcf\system\user\activity\event;
 use wcf\data\article\ViewableArticleList;
 use wcf\system\SingletonFactory;
 use wcf\system\WCF;
+use wcf\util\StringUtil;
 
 /**
  * User activity event implementation for responses to article comments.
@@ -66,20 +67,24 @@ class ArticleCommentResponseUserActivityEvent extends SingletonFactory implement
                     }
                     $event->setIsAccessible();
 
-                    // title
-                    $text = WCF::getLanguage()->getDynamicVariable(
+                    $event->setTitle(WCF::getLanguage()->getDynamicVariable(
                         'wcf.article.recentActivity.articleCommentResponse',
                         [
                             'commentAuthor' => $this->commentAuthors[$comment->userID],
                             'commentID' => $comment->commentID,
                             'responseID' => $response->responseID,
                             'article' => $article,
+                            'author' => $event->getUserProfile(),
                         ]
+                    ));
+                    $event->setDescription(
+                        StringUtil::encodeHTML(
+                            StringUtil::truncate($response->getPlainTextMessage(), 500)
+                        ),
+                        true
                     );
-                    $event->setTitle($text);
+                    $event->setLink($response->getLink());
 
-                    // description
-                    $event->setDescription($response->getExcerpt());
                     continue;
                 }
             }
index 880913932820c87235da477b91cd53e69cab52c8..72bff7bbd0a0ded7f3fe4043d953f82aacc87eca 100644 (file)
@@ -6,6 +6,7 @@ use wcf\data\article\ViewableArticleList;
 use wcf\system\cache\runtime\ViewableCommentRuntimeCache;
 use wcf\system\SingletonFactory;
 use wcf\system\WCF;
+use wcf\util\StringUtil;
 
 /**
  * User activity event implementation for article comments.
@@ -73,15 +74,19 @@ class ArticleCommentUserActivityEvent extends SingletonFactory implements IUserA
                     }
                     $event->setIsAccessible();
 
-                    // add title
-                    $text = WCF::getLanguage()->getDynamicVariable('wcf.article.recentActivity.articleComment', [
+                    $event->setTitle(WCF::getLanguage()->getDynamicVariable('wcf.article.recentActivity.articleComment', [
                         'article' => $article,
                         'commentID' => $comment->commentID,
-                    ]);
-                    $event->setTitle($text);
+                        'author' => $event->getUserProfile(),
+                    ]));
+                    $event->setDescription(
+                        StringUtil::encodeHTML(
+                            StringUtil::truncate($comment->getPlainTextMessage(), 500)
+                        ),
+                        true
+                    );
+                    $event->setLink($comment->getLink());
 
-                    // add text
-                    $event->setDescription($comment->getExcerpt());
                     continue;
                 }
             }
index b0bf2ad7ad27641992ad5504352b256d0c77ae7e..1503dc7905483864886f310addb605d15648fef5 100644 (file)
@@ -38,12 +38,15 @@ class ArticleUserActivityEvent extends SingletonFactory implements IUserActivity
                 if ($article->canRead()) {
                     $event->setIsAccessible();
 
-                    $text = WCF::getLanguage()->getDynamicVariable(
+                    $event->setTitle(WCF::getLanguage()->getDynamicVariable(
                         'wcf.article.recentActivity',
-                        ['article' => $article]
-                    );
-                    $event->setTitle($text);
-                    $event->setDescription($article->getFormattedTeaser());
+                        [
+                            'article' => $article,
+                            'author' => $event->getUserProfile(),
+                        ]
+                    ));
+                    $event->setDescription(\strip_tags($article->getFormattedTeaser()), true);
+                    $event->setLink($article->getLink());
                 }
             } else {
                 $event->setIsOrphaned();
index 9be31cccc963db7ca2ccbad8940a496fe880e3b4..6d11c9114f05fa96bf41d1a308dca4109310fd07 100644 (file)
@@ -42,9 +42,13 @@ class FollowUserActivityEvent extends SingletonFactory implements IUserActivityE
 
                 $text = WCF::getLanguage()->getDynamicVariable(
                     'wcf.user.profile.recentActivity.follow',
-                    ['user' => $users[$event->objectID]]
+                    [
+                        'user' => $users[$event->objectID],
+                        'author' => $event->getUserProfile(),
+                    ]
                 );
                 $event->setTitle($text);
+                $event->setLink($users[$event->objectID]->getLink());
             } else {
                 $event->setIsOrphaned();
             }
index 45e84d83dfc13dc4983fd70b62113ba4488a33b1..8eff0fcb675073e2b28e1dcf2658835b9ee06fe5 100644 (file)
@@ -48,17 +48,14 @@ class LikeableArticleUserActivityEvent extends SingletonFactory implements IUser
                 }
                 $event->setIsAccessible();
 
-                // short output
-                $text = WCF::getLanguage()->getDynamicVariable('wcf.article.recentActivity.likedArticle', [
+                $event->setTitle(WCF::getLanguage()->getDynamicVariable('wcf.article.recentActivity.likedArticle', [
                     'article' => $article,
                     'reactionType' => ReactionHandler::getInstance()->getReactionTypeByID(
                         $event->reactionTypeID ?? $event->reactionType->reactionTypeID
                     ),
-                ]);
-                $event->setTitle($text);
-
-                // output
-                $event->setDescription($article->getFormattedTeaser());
+                    'author' => $event->getUserProfile(),
+                ]));
+                $event->setLink($article->getLink());
             } else {
                 $event->setIsOrphaned();
             }
index f1786f9571d3bbaa192f5688b0c4a6ecf4ae8fe2..5a62550acdea10d897c26e5d0df9fc321a01ca80 100644 (file)
@@ -5,6 +5,7 @@ namespace wcf\system\user\activity\event;
 use wcf\data\page\PageCache;
 use wcf\system\SingletonFactory;
 use wcf\system\WCF;
+use wcf\util\StringUtil;
 
 /**
  * User activity event implementation for responses to page comments.
@@ -42,17 +43,21 @@ class PageCommentResponseUserActivityEvent extends SingletonFactory implements I
                     }
                     $event->setIsAccessible();
 
-                    // title
-                    $text = WCF::getLanguage()->getDynamicVariable('wcf.page.recentActivity.pageCommentResponse', [
+                    $event->setTitle(WCF::getLanguage()->getDynamicVariable('wcf.page.recentActivity.pageCommentResponse', [
                         'commentAuthor' => $this->commentAuthors[$comment->userID],
                         'commentID' => $comment->commentID,
                         'responseID' => $response->responseID,
                         'page' => $page,
-                    ]);
-                    $event->setTitle($text);
+                        'author' => $event->getUserProfile(),
+                    ]));
+                    $event->setDescription(
+                        StringUtil::encodeHTML(
+                            StringUtil::truncate($response->getPlainTextMessage(), 500)
+                        ),
+                        true
+                    );
+                    $event->setLink($response->getLink());
 
-                    // description
-                    $event->setDescription($response->getExcerpt());
                     continue;
                 }
             }
index 2c57d7900e21576dd05975fdeb9bdf7e90d585b0..db3d36abd34ced3200a4a1b223333eb88aa1b1f0 100644 (file)
@@ -6,6 +6,7 @@ use wcf\data\page\PageCache;
 use wcf\system\cache\runtime\ViewableCommentRuntimeCache;
 use wcf\system\SingletonFactory;
 use wcf\system\WCF;
+use wcf\util\StringUtil;
 
 /**
  * User activity event implementation for page comments.
@@ -44,15 +45,19 @@ class PageCommentUserActivityEvent extends SingletonFactory implements IUserActi
                     }
                     $event->setIsAccessible();
 
-                    // add title
-                    $text = WCF::getLanguage()->getDynamicVariable('wcf.page.recentActivity.pageComment', [
+                    $event->setTitle(WCF::getLanguage()->getDynamicVariable('wcf.page.recentActivity.pageComment', [
                         'page' => $page,
                         'commentID' => $comment->commentID,
-                    ]);
-                    $event->setTitle($text);
+                        'author' => $event->getUserProfile(),
+                    ]));
+                    $event->setDescription(
+                        StringUtil::encodeHTML(
+                            StringUtil::truncate($comment->getPlainTextMessage(), 500)
+                        ),
+                        true
+                    );
+                    $event->setLink($comment->getLink());
 
-                    // add text
-                    $event->setDescription($comment->getExcerpt());
                     continue;
                 }
             }
index ec0f8cfbd95db0f08b538882a05753840305ff31..c3a78b62a6d378bcc3951add7f5666b0b34b1232 100644 (file)
@@ -5,6 +5,7 @@ namespace wcf\system\user\activity\event;
 use wcf\system\cache\runtime\UserProfileRuntimeCache;
 use wcf\system\SingletonFactory;
 use wcf\system\WCF;
+use wcf\util\StringUtil;
 
 /**
  * User activity event implementation for profile comment responses.
@@ -50,20 +51,23 @@ class ProfileCommentResponseUserActivityEvent extends SingletonFactory implement
                     if (!$users[$comment->objectID]->isProtected()) {
                         $event->setIsAccessible();
 
-                        // title
-                        $text = WCF::getLanguage()->getDynamicVariable(
+                        $event->setTitle(WCF::getLanguage()->getDynamicVariable(
                             'wcf.user.profile.recentActivity.profileCommentResponse',
                             [
                                 'commentAuthor' => $this->commentAuthors[$comment->userID],
                                 'commentID' => $comment->commentID,
                                 'responseID' => $response->responseID,
                                 'user' => $users[$comment->objectID],
+                                'author' => $event->getUserProfile(),
                             ]
+                        ));
+                        $event->setDescription(
+                            StringUtil::encodeHTML(
+                                StringUtil::truncate($response->getPlainTextMessage(), 500)
+                            ),
+                            true
                         );
-                        $event->setTitle($text);
-
-                        // description
-                        $event->setDescription($response->getExcerpt());
+                        $event->setLink($response->getLink());
                     }
                     continue;
                 }
index ecc02dee827eb8b62091a05c530c35815a085d05..976e8b1df52cef7423dfff8154c9e0997a544bef 100644 (file)
@@ -6,6 +6,7 @@ use wcf\system\cache\runtime\UserProfileRuntimeCache;
 use wcf\system\cache\runtime\ViewableCommentRuntimeCache;
 use wcf\system\SingletonFactory;
 use wcf\system\WCF;
+use wcf\util\StringUtil;
 
 /**
  * User activity event implementation for profile comments.
@@ -55,18 +56,21 @@ class ProfileCommentUserActivityEvent extends SingletonFactory implements IUserA
                     if (!$users[$comment->objectID]->isProtected()) {
                         $event->setIsAccessible();
 
-                        $user = $users[$comment->objectID];
-                        $text = WCF::getLanguage()->getDynamicVariable(
+                        $event->setTitle(WCF::getLanguage()->getDynamicVariable(
                             'wcf.user.profile.recentActivity.profileComment',
                             [
                                 'commentID' => $comment->commentID,
-                                'user' => $user,
+                                'user' => $users[$comment->objectID],
+                                'author' => $event->getUserProfile(),
                             ]
+                        ));
+                        $event->setDescription(
+                            StringUtil::encodeHTML(
+                                StringUtil::truncate($comment->getPlainTextMessage(), 500)
+                            ),
+                            true
                         );
-                        $event->setTitle($text);
-
-                        // output
-                        $event->setDescription($comment->getExcerpt());
+                        $event->setLink($comment->getLink());
                     }
                     continue;
                 }
index 578ba2869e3e7f1b2637d6a15b57ad2eb84cd022..133791707ca9fde62e0504d11396bfd8d2d06f41 100644 (file)
@@ -44,9 +44,13 @@ class TrophyReceivedUserActivityEvent extends SingletonFactory implements IUserA
 
                 $event->setTitle(WCF::getLanguage()->getDynamicVariable(
                     'wcf.user.trophy.recentActivity.received',
-                    ['userTrophy' => $trophies[$event->objectID]]
+                    [
+                        'userTrophy' => $trophies[$event->objectID],
+                        'author' => $event->getUserProfile(),
+                    ]
                 ));
-                $event->setDescription($trophies[$event->objectID]->getDescription());
+                $event->setDescription(\strip_tags($trophies[$event->objectID]->getDescription()));
+                $event->setLink($event->getUserProfile()->getLink());
             } else {
                 $event->setIsOrphaned();
             }
index c8f9d248792fe28374e4125c374c01337ad3e5ed..94cabff0ef289843ac775ecbe166446d198daf95 100644 (file)
@@ -3294,9 +3294,9 @@ freigeschaltet. {if LANGUAGE_USE_INFORMAL_VARIANT}Du kannst{else}Sie können{/if
                <item name="wcf.article.aboutAuthor"><![CDATA[Über den Autor]]></item>
                <item name="wcf.article.articleComments"><![CDATA[{plural value=$articleContent->comments one='# Kommentar' other='# Kommentare'}]]></item>
                <item name="wcf.article.articleViews"><![CDATA[{#$article->views} Mal gelesen]]></item>
-               <item name="wcf.article.recentActivity.likedArticle"><![CDATA[Hat mit <span title="{$reactionType->getTitle()}" class="jsTooltip">{@$reactionType->renderIcon()}</span> auf den Artikel <a href="{$article->getLink()}">{$article->getTitle()}</a> reagiert.]]></item>
-               <item name="wcf.article.recentActivity.articleComment"><![CDATA[Hat einen Kommentar zum Artikel <a href="{$article->getLink()}#comment{$commentID}">{$article->getTitle()}</a> geschrieben.]]></item>
-               <item name="wcf.article.recentActivity.articleCommentResponse"><![CDATA[Hat auf einen Kommentar von <a href="{link controller='User' object=$commentAuthor}{/link}">{$commentAuthor->username}</a> zum Artikel <a href="{$article->getLink()}#comment{@$commentID}/response{@$responseID}">{$article->getTitle()}</a> geantwortet.]]></item>
+               <item name="wcf.article.recentActivity.likedArticle"><![CDATA[<strong>{$author}</strong> hat mit <span title="{$reactionType->getTitle()}" class="jsTooltip">{unsafe:$reactionType->renderIcon()}</span> auf den Artikel <strong>{$article->getTitle()}</strong> reagiert.]]></item>
+               <item name="wcf.article.recentActivity.articleComment"><![CDATA[<strong>{$author}</strong> hat einen Kommentar zum Artikel <strong>{$article->getTitle()}</strong> geschrieben.]]></item>
+               <item name="wcf.article.recentActivity.articleCommentResponse"><![CDATA[<strong>{$author}</strong> hat auf einen Kommentar von <strong>{$commentAuthor->username}</strong> zum Artikel <strong>{$article->getTitle()}</strong> geantwortet.]]></item>
                <item name="wcf.article.articles"><![CDATA[Artikel]]></item>
                <item name="wcf.article.comment"><![CDATA[Artikel-Kommentar]]></item>
                <item name="wcf.article.commentResponse"><![CDATA[Antwort auf Artikel-Kommentar]]></item>
@@ -3306,7 +3306,7 @@ freigeschaltet. {if LANGUAGE_USE_INFORMAL_VARIANT}Du kannst{else}Sie können{/if
                <item name="wcf.article.sortField.time"><![CDATA[Datum]]></item>
                <item name="wcf.article.sortField.views"><![CDATA[Zugriffe]]></item>
                <item name="wcf.article.showArticlesWritten"><![CDATA[Artikel von {$user->username}]]></item>
-               <item name="wcf.article.recentActivity"><![CDATA[Hat den Artikel {if $article->hasLabels()}<ul class="labelList">{foreach from=$article->getLabels() item=label}<li>{@$label->render()}</li>{/foreach}</ul> {/if}<a href="{$article->getLink()}">{$article->getTitle()}</a> verfasst.]]></item>
+               <item name="wcf.article.recentActivity"><![CDATA[<strong>{$author}</strong> hat den Artikel {if $article->hasLabels()}<ul class="labelList">{foreach from=$article->getLabels() item=label}<li>{unsafe:$label->render()}</li>{/foreach}</ul> {/if}<strong>{$article->getTitle()}</strong> verfasst.]]></item>
                <item name="wcf.article.button.sort"><![CDATA[Sortieren]]></item>
                <item name="wcf.article.search"><![CDATA[Artikel durchsuchen]]></item>
                <item name="wcf.article.search.error.noResults"><![CDATA[Es wurden keine Ergebnisse gefunden.]]></item>
@@ -4432,8 +4432,8 @@ Dateianhänge:
                <item name="wcf.page.search.results"><![CDATA[Suchergebnisse]]></item>
                <item name="wcf.page.comment"><![CDATA[Seiten-Kommentar]]></item>
                <item name="wcf.page.commentResponse"><![CDATA[Antwort auf Seiten-Kommentar]]></item>
-               <item name="wcf.page.recentActivity.pageComment"><![CDATA[Hat einen Kommentar auf der Seite <a href="{$page->getLink()}#comment{$commentID}">{$page->getTitle()}</a> geschrieben.]]></item>
-               <item name="wcf.page.recentActivity.pageCommentResponse"><![CDATA[Hat auf einen Kommentar von <a href="{link controller='User' object=$commentAuthor}{/link}">{$commentAuthor->username}</a> auf der Seite <a href="{$page->getLink()}#comment{@$commentID}/response{@$responseID}">{$page->getTitle()}</a> geantwortet.]]></item>
+               <item name="wcf.page.recentActivity.pageComment"><![CDATA[<strong>{$author}</strong> hat einen Kommentar auf der Seite <strong>{$page->getTitle()}</strong> geschrieben.]]></item>
+               <item name="wcf.page.recentActivity.pageCommentResponse"><![CDATA[<strong>{$author}</strong> hat auf einen Kommentar von <strong>{$commentAuthor}</strong> auf der Seite <strong>{$page->getTitle()}</strong> geantwortet.]]></item>
                <item name="wcf.page.sidebar.left"><![CDATA[Linke Seitenleiste]]></item>
                <item name="wcf.page.sidebar.right"><![CDATA[Rechte Seitenleiste]]></item>
                <item name="wcf.page.breadcrumb"><![CDATA[Verlaufsnavigation]]></item>
@@ -5064,7 +5064,7 @@ Sobald {if LANGUAGE_USE_INFORMAL_VARIANT}dein{else}Ihr{/if} Benutzerkonto freige
                <item name="wcf.user.trophy.specialTrophies.description"><![CDATA[{if LANGUAGE_USE_INFORMAL_VARIANT}Wähle{else}Wählen Sie{/if} hier {if LANGUAGE_USE_INFORMAL_VARIANT}deine{else}Ihre{/if} {if $__wcf->getSession()->getPermission('user.profile.trophy.maxUserSpecialTrophies') > 1}besonderen Trophäen{else}besondere Trophäe{/if} aus, welche im Profil und in der Nachrichten-Seitenleiste angezeigt {if $__wcf->getSession()->getPermission('user.profile.trophy.maxUserSpecialTrophies') > 1}werden. Es können maximal {#$__wcf->getSession()->getPermission('user.profile.trophy.maxUserSpecialTrophies')} Trophäen ausgewählt werden.{else}wird.{/if}]]></item>
                <item name="wcf.user.trophy.specialTrophies.error.tooMany"><![CDATA[{if LANGUAGE_USE_INFORMAL_VARIANT}Du kannst{else}Sie können{/if} maximal {#$__wcf->session->getPermission('user.profile.trophy.maxUserSpecialTrophies')} Trophäen auswählen.]]></item>
                <item name="wcf.user.trophy.specialTrophies.error.invalid"><![CDATA[Die angegebenen Trophäen sind ungültig.]]></item>
-               <item name="wcf.user.trophy.recentActivity.received"><![CDATA[Hat die Trophäe <a href="{$userTrophy->getTrophy()->getLink()}">{$userTrophy->getTrophy()->getTitle()}</a> erhalten.]]></item>
+               <item name="wcf.user.trophy.recentActivity.received"><![CDATA[<strong>{$author}</strong> hat die Trophäe <strong>{$userTrophy->getTrophy()->getTitle()}</strong> erhalten.]]></item>
                <item name="wcf.user.trophy.condition.excludedTrophies"><![CDATA[Ausgeschlossene Trophäen]]></item>
                <item name="wcf.user.trophy.condition.excludedTrophyCategories"><![CDATA[Ausgeschlossene Trophäen Kategorien]]></item>
                <item name="wcf.user.trophy.trophyAwarded"><![CDATA[{#$items} Mal vergeben]]></item>
@@ -5142,7 +5142,7 @@ Sobald {if LANGUAGE_USE_INFORMAL_VARIANT}dein{else}Ihr{/if} Benutzerkonto freige
                <item name="wcf.user.recentActivity.condition.excludedObjectType"><![CDATA[Ausgeschlossene Aktivitäten]]></item>
                <item name="wcf.user.recentActivity.scope.all"><![CDATA[Aktivitäten aller Benutzer]]></item>
                <item name="wcf.user.recentActivity.scope.followedUsers"><![CDATA[Aktivitäten von Benutzern, denen {if LANGUAGE_USE_INFORMAL_VARIANT}du folgst{else}Sie folgen{/if}]]></item>
-               <item name="wcf.user.recentActivity.scope.followedUsers.noResults"><![CDATA[Es gibt aktuell keine Aktivitäten von Benutzern, denen {if LANGUAGE_USE_INFORMAL_VARIANT}du folgst{else}Sie folgen{/if}. Es werden alle Aktivitäten angezeigt.]]></item>
+               <item name="wcf.user.recentActivity.scope.followedUsers.noResults"><![CDATA[Es gibt aktuell keine Aktivitäten von Benutzern, denen {if LANGUAGE_USE_INFORMAL_VARIANT}du folgst{else}Sie folgen{/if}.]]></item>
        </category>
        <category name="wcf.user.3rdparty">
                <item name="wcf.user.3rdparty"><![CDATA[Drittanbieter]]></item>
@@ -5449,15 +5449,15 @@ Benachrichtigungen auf <a href="{link isHtmlEmail=true}{/link}">{PAGE_TITLE|phra
                <item name="wcf.user.profile.menu.about"><![CDATA[Über mich]]></item>
                <item name="wcf.user.profile.menu.recentActivity"><![CDATA[Letzte Aktivitäten]]></item>
                <item name="wcf.user.profile.oldUsername"><![CDATA[Hieß früher {$user->getOldUsername()}]]></item>
-               <item name="wcf.user.profile.recentActivity.follow"><![CDATA[Folgt nun <a href="{link controller='User' object=$user}{/link}">{$user->username}</a>.]]></item>
+               <item name="wcf.user.profile.recentActivity.follow"><![CDATA[<strong>{$author}</strong> folgt nun <strong>{$user}</strong>.]]></item>
                <item name="wcf.user.profile.visitors"><![CDATA[Profil-Besucher]]></item>
                <item name="wcf.user.profile.content.wall.comment"><![CDATA[Kommentar an der Pinnwand]]></item>
                <item name="wcf.user.profile.content.wall.commentResponse"><![CDATA[Antwort auf einen Pinnwand-Kommentar]]></item>
                <item name="wcf.user.profile.content.wall.noEntries"><![CDATA[Es wurden noch keine Einträge an der Pinnwand verfasst.]]></item>
                <item name="wcf.user.profile.menu.wall"><![CDATA[Pinnwand]]></item>
                <item name="wcf.user.profile.menu.likes"><![CDATA[Reaktionen]]></item>
-               <item name="wcf.user.profile.recentActivity.profileComment"><![CDATA[Hat einen Kommentar an die <a href="{link controller='User' object=$user}{/link}#wall/comment{@$commentID}">Pinnwand von {$user->username}</a> geschrieben.]]></item>
-               <item name="wcf.user.profile.recentActivity.profileCommentResponse"><![CDATA[Hat auf einen Kommentar von <a href="{link controller='User' object=$commentAuthor}{/link}">{$commentAuthor->username}</a> an der <a href="{link controller='User' object=$user}{/link}#wall/comment{@$commentID}/response{@$responseID}">Pinnwand von {$user->username}</a> geantwortet.]]></item>
+               <item name="wcf.user.profile.recentActivity.profileComment"><![CDATA[<strong>{$author}</strong> hat einen Kommentar an die <strong>Pinnwand von {$user}</strong> geschrieben.]]></item>
+               <item name="wcf.user.profile.recentActivity.profileCommentResponse"><![CDATA[<strong>{$author}</strong> hat auf einen Kommentar von <strong>{$commentAuthor}</strong> an der <strong>Pinnwand von {$user}</strong> geantwortet.]]></item>
                <item name="wcf.user.profile.report"><![CDATA[Benutzerprofil melden]]></item>
                <item name="wcf.user.profile.protected"><![CDATA[Der Benutzer hat den Zugriff auf sein vollständiges Profil eingeschränkt.]]></item>
                <item name="wcf.user.profile.management"><![CDATA[Verwaltung]]></item>
index d05d95a0889e582e24eb75c57c2d5f651ce06327..6483f3922544eb9189c4d88662a682ee099bdf72 100644 (file)
@@ -3219,9 +3219,9 @@ Your account on {@PAGE_TITLE|phrase} [URL:{link isEmail=true}{/link}] has been a
                <item name="wcf.article.aboutAuthor"><![CDATA[About the Author]]></item>
                <item name="wcf.article.articleComments"><![CDATA[{plural value=$articleContent->comments one='# Comment' other='# Comments'}]]></item>
                <item name="wcf.article.articleViews"><![CDATA[{#$article->views} View{if $article->views != 1}s{/if}]]></item>
-               <item name="wcf.article.recentActivity.likedArticle"><![CDATA[Reacted with <span title="{$reactionType->getTitle()}" class="jsTooltip">{@$reactionType->renderIcon()}</span> to the article <a href="{$article->getLink()}">{$article->getTitle()}</a>.]]></item>
-               <item name="wcf.article.recentActivity.articleComment"><![CDATA[Commented on article <a href="{$article->getLink()}#comment{$commentID}">{$article->getTitle()}</a>.]]></item>
-               <item name="wcf.article.recentActivity.articleCommentResponse"><![CDATA[Replied to a comment by <a href="{link controller='User' object=$commentAuthor}{/link}">{$commentAuthor->username}</a> on article <a href="{$article->getLink()}#comment{@$commentID}/response{@$responseID}">{$article->getTitle()}</a>.]]></item>
+               <item name="wcf.article.recentActivity.likedArticle"><![CDATA[<strong>{$author}</strong> reacted with <span title="{$reactionType->getTitle()}" class="jsTooltip">{unsafe:$reactionType->renderIcon()}</span> to the article <strong>{$article->getTitle()}</strong>.]]></item>
+               <item name="wcf.article.recentActivity.articleComment"><![CDATA[<strong>{$author}</strong> commented on article <strong>{$article->getTitle()}</strong>.]]></item>
+               <item name="wcf.article.recentActivity.articleCommentResponse"><![CDATA[<strong>{$author}</strong> replied to a comment by <strong>{$commentAuthor->username}</strong> on article <strong>{$article->getTitle()}</strong>.]]></item>
                <item name="wcf.article.articles"><![CDATA[Articles]]></item>
                <item name="wcf.article.comment"><![CDATA[Article Comment]]></item>
                <item name="wcf.article.commentResponse"><![CDATA[Reply to Article Comment]]></item>
@@ -3231,7 +3231,7 @@ Your account on {@PAGE_TITLE|phrase} [URL:{link isEmail=true}{/link}] has been a
                <item name="wcf.article.sortField.time"><![CDATA[Date]]></item>
                <item name="wcf.article.sortField.views"><![CDATA[Views]]></item>
                <item name="wcf.article.showArticlesWritten"><![CDATA[Articles by {$user->username}]]></item>
-               <item name="wcf.article.recentActivity"><![CDATA[Wrote the article {if $article->hasLabels()}<ul class="labelList">{foreach from=$article->getLabels() item=label}<li>{@$label->render()}</li>{/foreach}</ul> {/if}<a href="{$article->getLink()}">{$article->getTitle()}</a>.]]></item>
+               <item name="wcf.article.recentActivity"><![CDATA[<strong>{$author}</strong> wrote the article {if $article->hasLabels()}<ul class="labelList">{foreach from=$article->getLabels() item=label}<li>{unsafe:$label->render()}</li>{/foreach}</ul> {/if}<strong>{$article->getTitle()}</strong>.]]></item>
                <item name="wcf.article.button.sort"><![CDATA[Sort]]></item>
                <item name="wcf.article.search"><![CDATA[Search Articles]]></item>
                <item name="wcf.article.search.error.noResults"><![CDATA[The search returned no results.]]></item>
@@ -4384,8 +4384,8 @@ Attachments:
                <item name="wcf.page.search.results"><![CDATA[Search Results]]></item>
                <item name="wcf.page.comment"><![CDATA[Page Comment]]></item>
                <item name="wcf.page.commentResponse"><![CDATA[Reply to Page Comment]]></item>
-               <item name="wcf.page.recentActivity.pageComment"><![CDATA[Commented on page <a href="{$page->getLink()}#comment{$commentID}">{$page->getTitle()}</a>.]]></item>
-               <item name="wcf.page.recentActivity.pageCommentResponse"><![CDATA[Replied to a comment by <a href="{link controller='User' object=$commentAuthor}{/link}">{$commentAuthor->username}</a> on page <a href="{$page->getLink()}#comment{@$commentID}/response{@$responseID}">{$page->getTitle()}</a>.]]></item>
+               <item name="wcf.page.recentActivity.pageComment"><![CDATA[<strong>{$author}</strong> commented on page <strong>{$page->getTitle()}</strong>.]]></item>
+               <item name="wcf.page.recentActivity.pageCommentResponse"><![CDATA[<strong>{$author}</strong> replied to a comment by <strong>{$commentAuthor}</strong> on page <strong>{$page->getTitle()}</strong>.]]></item>
                <item name="wcf.page.sidebar.left"><![CDATA[Left Sidebar]]></item>
                <item name="wcf.page.sidebar.right"><![CDATA[Right Sidebar]]></item>
                <item name="wcf.page.breadcrumb"><![CDATA[Breadcrumb]]></item>
@@ -5063,7 +5063,7 @@ You also received a list of backup codes to use when your second factor becomes
                <item name="wcf.user.trophy.specialTrophies.description"><![CDATA[Choose the special {if $__wcf->getSession()->getPermission('user.profile.trophy.maxUserSpecialTrophies') > 1}trophies{else}trophy{/if} that you want to be shown in your profile and in the message sidebar.{if $__wcf->getSession()->getPermission('user.profile.trophy.maxUserSpecialTrophies') > 1} You can select a maximum of {#$__wcf->getSession()->getPermission('user.profile.trophy.maxUserSpecialTrophies')} trophies.{/if}]]></item>
                <item name="wcf.user.trophy.specialTrophies.error.tooMany"><![CDATA[You can choose a maximum of {#$__wcf->session->getPermission('user.profile.trophy.maxUserSpecialTrophies')} trophies.]]></item>
                <item name="wcf.user.trophy.specialTrophies.error.invalid"><![CDATA[The selected trophies are invalid.]]></item>
-               <item name="wcf.user.trophy.recentActivity.received"><![CDATA[Has received the trophy <a href="{$userTrophy->getTrophy()->getLink()}">{$userTrophy->getTrophy()->getTitle()}</a>.]]></item>
+               <item name="wcf.user.trophy.recentActivity.received"><![CDATA[<strong>{$author}</strong> has received the trophy <strong>{$userTrophy->getTrophy()->getTitle()}</strong>.]]></item>
                <item name="wcf.user.trophy.condition.excludedTrophies"><![CDATA[Excluded Trophies]]></item>
                <item name="wcf.user.trophy.condition.excludedTrophyCategories"><![CDATA[Excluded Trophy Categories]]></item>
                <item name="wcf.user.trophy.trophyAwarded"><![CDATA[{if $items == 1}Awarded once{else}Awarded {#$items} times{/if}]]></item>
@@ -5141,7 +5141,7 @@ You also received a list of backup codes to use when your second factor becomes
                <item name="wcf.user.recentActivity.condition.excludedObjectType"><![CDATA[Excluded Activities]]></item>
                <item name="wcf.user.recentActivity.scope.all"><![CDATA[All Activities]]></item>
                <item name="wcf.user.recentActivity.scope.followedUsers"><![CDATA[Filter by Followed Users]]></item>
-               <item name="wcf.user.recentActivity.scope.followedUsers.noResults"><![CDATA[There are no recent activities by followed users. Displaying activity for all users.]]></item>
+               <item name="wcf.user.recentActivity.scope.followedUsers.noResults"><![CDATA[There are no recent activities by followed users.]]></item>
        </category>
        <category name="wcf.user.3rdparty">
                <item name="wcf.user.3rdparty"><![CDATA[Third-Party Login]]></item>
@@ -5451,15 +5451,15 @@ your notifications on <a href="{link isHtmlEmail=true}{/link}">{PAGE_TITLE|phras
                <item name="wcf.user.profile.menu.about"><![CDATA[About Me]]></item>
                <item name="wcf.user.profile.menu.recentActivity"><![CDATA[Recent Activity]]></item>
                <item name="wcf.user.profile.oldUsername"><![CDATA[Used to be called {$user->getOldUsername()}]]></item>
-               <item name="wcf.user.profile.recentActivity.follow"><![CDATA[Now follows <a href="{link controller='User' object=$user}{/link}">{$user->username}</a>.]]></item>
+               <item name="wcf.user.profile.recentActivity.follow"><![CDATA[<strong>{$author}</strong> now follows <strong>{$user}</strong>.]]></item>
                <item name="wcf.user.profile.visitors"><![CDATA[Profile Visitors]]></item>
                <item name="wcf.user.profile.content.wall.comment"><![CDATA[Wall Comment]]></item>
                <item name="wcf.user.profile.content.wall.commentResponse"><![CDATA[Reply to wall comment]]></item>
                <item name="wcf.user.profile.content.wall.noEntries"><![CDATA[There are no comments at the moment.]]></item>
                <item name="wcf.user.profile.menu.wall"><![CDATA[Wall]]></item>
                <item name="wcf.user.profile.menu.likes"><![CDATA[Reactions]]></item>
-               <item name="wcf.user.profile.recentActivity.profileComment"><![CDATA[Wrote a comment on <a href="{link controller='User' object=$user}{/link}#wall/comment{@$commentID}">{$user->username}’s wall</a>.]]></item>
-               <item name="wcf.user.profile.recentActivity.profileCommentResponse"><![CDATA[Replied to a comment by <a href="{link controller='User' object=$commentAuthor}{/link}">{$commentAuthor->username}</a> on <a href="{link controller='User' object=$user}{/link}#wall/comment{@$commentID}/response{@$responseID}">{$user->username}’s wall</a>.]]></item>
+               <item name="wcf.user.profile.recentActivity.profileComment"><![CDATA[<strong>{$author}</strong> wrote a comment on <strong>{$user}’s wall</strong>.]]></item>
+               <item name="wcf.user.profile.recentActivity.profileCommentResponse"><![CDATA[<strong>{$author}</strong> replied to a comment by <strong>{$commentAuthor}</strong> on <strong>{$user}’s wall</strong>.]]></item>
                <item name="wcf.user.profile.report"><![CDATA[Report User Profile]]></item>
                <item name="wcf.user.profile.protected"><![CDATA[This member limits who may view their full profile.]]></item>
                <item name="wcf.user.profile.management"><![CDATA[Management]]></item>