Notifications about reactions to article comments
authorMarcel Werk <burntime@woltlab.com>
Fri, 6 May 2022 21:47:38 +0000 (23:47 +0200)
committerMarcel Werk <burntime@woltlab.com>
Fri, 6 May 2022 21:47:38 +0000 (23:47 +0200)
com.woltlab.wcf/objectType.xml
com.woltlab.wcf/userNotificationEvent.xml
wcfsetup/install/files/lib/system/user/notification/event/ArticleCommentLikeUserNotificationEvent.class.php [new file with mode: 0644]
wcfsetup/install/files/lib/system/user/notification/event/ArticleCommentResponseLikeUserNotificationEvent.class.php [new file with mode: 0644]
wcfsetup/install/lang/de.xml
wcfsetup/install/lang/en.xml

index 510afec5dc6ad1316b0e6efc19311504a5f8fce1..64489461c9b05ad0543abacfc2bdc0d526afeb2f 100644 (file)
                        <classname>wcf\system\user\notification\object\type\LikeUserNotificationObjectType</classname>
                        <category>com.woltlab.wcf.page</category>
                </type>
+               <type>
+                       <name>com.woltlab.wcf.articleComment.like.notification</name>
+                       <definitionname>com.woltlab.wcf.notification.objectType</definitionname>
+                       <classname>wcf\system\user\notification\object\type\LikeUserNotificationObjectType</classname>
+                       <category>com.woltlab.wcf.page</category>
+                       <supportsReactions>1</supportsReactions>
+               </type>
+               <type>
+                       <name>com.woltlab.wcf.articleComment.response.like.notification</name>
+                       <definitionname>com.woltlab.wcf.notification.objectType</definitionname>
+                       <classname>wcf\system\user\notification\object\type\LikeUserNotificationObjectType</classname>
+                       <category>com.woltlab.wcf.page</category>
+                       <supportsReactions>1</supportsReactions>
+               </type>
                <type>
                        <name>com.woltlab.wcf.article.recentActivityEvent</name>
                        <definitionname>com.woltlab.wcf.user.recentActivityEvent</definitionname>
index 6d2f7ba38fc04dc995d5169e9f02404a1f743cf7..3a21566bae01261bea22acbb2a992d5b7c857da0 100644 (file)
                        <preset>1</preset>
                        <options>module_like,module_article</options>
                </event>
+               <event>
+                       <name>like</name>
+                       <objecttype>com.woltlab.wcf.articleComment.like.notification</objecttype>
+                       <classname>wcf\system\user\notification\event\ArticleCommentLikeUserNotificationEvent</classname>
+                       <preset>1</preset>
+                       <options>module_like,module_article</options>
+               </event>
+               <event>
+                       <name>like</name>
+                       <objecttype>com.woltlab.wcf.articleComment.response.like.notification</objecttype>
+                       <classname>wcf\system\user\notification\event\ArticleCommentResponseLikeUserNotificationEvent</classname>
+                       <preset>1</preset>
+                       <options>module_like,module_article</options>
+               </event>
                
                <event>
                        <name>registration</name>
diff --git a/wcfsetup/install/files/lib/system/user/notification/event/ArticleCommentLikeUserNotificationEvent.class.php b/wcfsetup/install/files/lib/system/user/notification/event/ArticleCommentLikeUserNotificationEvent.class.php
new file mode 100644 (file)
index 0000000..e50081e
--- /dev/null
@@ -0,0 +1,130 @@
+<?php
+
+namespace wcf\system\user\notification\event;
+
+use wcf\system\cache\runtime\ViewableArticleContentRuntimeCache;
+use wcf\system\user\notification\event\AbstractSharedUserNotificationEvent;
+use wcf\system\user\notification\event\ITestableUserNotificationEvent;
+use wcf\system\user\notification\event\TReactionUserNotificationEvent;
+use wcf\system\user\notification\event\TTestableCommentLikeUserNotificationEvent;
+use wcf\system\user\notification\object\LikeUserNotificationObject;
+
+/**
+ * User notification event for article comment likes.
+ *
+ * @author  Marcel Werk
+ * @copyright   2001-2022 WoltLab GmbH
+ * @license WoltLab License <http://www.woltlab.com/license-agreement.html>
+ * @package WoltLabSuite\Core\System\User\Notification\Event
+ * @since 5.5
+ *
+ * @method  LikeUserNotificationObject  getUserNotificationObject()
+ */
+class ArticleCommentLikeUserNotificationEvent extends AbstractSharedUserNotificationEvent implements
+    ITestableUserNotificationEvent
+{
+    use TTestableCommentLikeUserNotificationEvent;
+    use TTestableArticleCommentUserNotificationEvent;
+    use TReactionUserNotificationEvent;
+
+    /**
+     * @inheritDoc
+     */
+    protected $stackable = true;
+
+    /**
+     * @inheritDoc
+     */
+    protected function prepare()
+    {
+        ViewableArticleContentRuntimeCache::getInstance()->cacheObjectID($this->additionalData['objectID']);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function getTitle()
+    {
+        $count = \count($this->getAuthors());
+        if ($count > 1) {
+            return $this->getLanguage()->getDynamicVariable('wcf.user.notification.articleComment.like.title.stacked', [
+                'count' => $count,
+                'timesTriggered' => $this->notification->timesTriggered,
+            ]);
+        }
+
+        return $this->getLanguage()->get('wcf.user.notification.articleComment.like.title');
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function getMessage()
+    {
+        $article = ViewableArticleContentRuntimeCache::getInstance()->getObject($this->additionalData['objectID']);
+        $authors = \array_values($this->getAuthors());
+        $count = \count($authors);
+
+        if ($count > 1) {
+            return $this->getLanguage()->getDynamicVariable('wcf.user.notification.articleComment.like.message.stacked', [
+                'author' => $this->author,
+                'authors' => $authors,
+                'commentID' => $this->getCommentID(),
+                'count' => $count,
+                'others' => $count - 1,
+                'article' => $article,
+                'reactions' => $this->getReactionsForAuthors(),
+            ]);
+        }
+
+        return $this->getLanguage()->getDynamicVariable('wcf.user.notification.articleComment.like.message', [
+            'author' => $this->author,
+            'commentID' => $this->getCommentID(),
+            'article' => $article,
+            'reactions' => $this->getReactionsForAuthors(),
+        ]);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function getEmailMessage($notificationType = 'instant')
+    {
+        // not supported
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function getLink()
+    {
+        return ViewableArticleContentRuntimeCache::getInstance()->getObject($this->additionalData['objectID'])->getLink() . '#comment' . $this->getCommentID();
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function getEventHash()
+    {
+        return \sha1($this->eventID . '-' . $this->getCommentID());
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function supportsEmailNotification()
+    {
+        return false;
+    }
+
+    /**
+     * Returns the liked comment's id.
+     *
+     * @return      int
+     */
+    protected function getCommentID()
+    {
+        // this is the `wcfN_like.objectID` value
+        return $this->getUserNotificationObject()->objectID;
+    }
+}
diff --git a/wcfsetup/install/files/lib/system/user/notification/event/ArticleCommentResponseLikeUserNotificationEvent.class.php b/wcfsetup/install/files/lib/system/user/notification/event/ArticleCommentResponseLikeUserNotificationEvent.class.php
new file mode 100644 (file)
index 0000000..03c3d39
--- /dev/null
@@ -0,0 +1,136 @@
+<?php
+
+namespace wcf\system\user\notification\event;
+
+use wcf\system\cache\runtime\UserRuntimeCache;
+use wcf\system\cache\runtime\ViewableArticleContentRuntimeCache;
+use wcf\system\user\notification\event\AbstractSharedUserNotificationEvent;
+use wcf\system\user\notification\event\ITestableUserNotificationEvent;
+use wcf\system\user\notification\event\TReactionUserNotificationEvent;
+use wcf\system\user\notification\event\TTestableCommentResponseLikeUserNotificationEvent;
+use wcf\system\user\notification\object\LikeUserNotificationObject;
+use wcf\system\WCF;
+
+/**
+ * User notification event for article comment response likes.
+ *
+ * @author  Marcel Werk
+ * @copyright   2001-2022 WoltLab GmbH
+ * @license WoltLab License <http://www.woltlab.com/license-agreement.html>
+ * @package WoltLabSuite\Core\System\User\Notification\Event
+ * @since 5.5
+ *
+ * @method  LikeUserNotificationObject  getUserNotificationObject()
+ */
+class ArticleCommentResponseLikeUserNotificationEvent extends AbstractSharedUserNotificationEvent implements
+    ITestableUserNotificationEvent
+{
+    use TTestableCommentResponseLikeUserNotificationEvent;
+    use TTestableArticleCommentUserNotificationEvent;
+    use TReactionUserNotificationEvent;
+
+    /**
+     * @inheritDoc
+     */
+    protected $stackable = true;
+
+    /**
+     * @inheritDoc
+     */
+    protected function prepare()
+    {
+        ViewableArticleContentRuntimeCache::getInstance()->cacheObjectID($this->additionalData['objectID']);
+        UserRuntimeCache::getInstance()->cacheObjectID($this->additionalData['commentUserID']);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function getTitle()
+    {
+        $count = \count($this->getAuthors());
+        if ($count > 1) {
+            return $this->getLanguage()->getDynamicVariable(
+                'wcf.user.notification.articleComment.response.like.title.stacked',
+                [
+                    'count' => $count,
+                    'timesTriggered' => $this->notification->timesTriggered,
+                ]
+            );
+        }
+
+        return $this->getLanguage()->get('wcf.user.notification.articleComment.response.like.title');
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function getMessage()
+    {
+        $article = ViewableArticleContentRuntimeCache::getInstance()->getObject($this->additionalData['objectID']);
+        $authors = \array_values($this->getAuthors());
+        $count = \count($authors);
+        $commentUser = null;
+        if ($this->additionalData['commentUserID'] != WCF::getUser()->userID) {
+            $commentUser = UserRuntimeCache::getInstance()->getObject($this->additionalData['commentUserID']);
+        }
+
+        if ($count > 1) {
+            return $this->getLanguage()->getDynamicVariable(
+                'wcf.user.notification.articleComment.response.like.message.stacked',
+                [
+                    'author' => $this->author,
+                    'authors' => $authors,
+                    'commentID' => $this->additionalData['commentID'],
+                    'commentUser' => $commentUser,
+                    'count' => $count,
+                    'others' => $count - 1,
+                    'article' => $article,
+                    'responseID' => $this->getUserNotificationObject()->objectID,
+                    'reactions' => $this->getReactionsForAuthors(),
+                ]
+            );
+        }
+
+        return $this->getLanguage()->getDynamicVariable('wcf.user.notification.articleComment.response.like.message', [
+            'author' => $this->author,
+            'commentID' => $this->additionalData['commentID'],
+            'article' => $article,
+            'responseID' => $this->getUserNotificationObject()->objectID,
+            'reactions' => $this->getReactionsForAuthors(),
+        ]);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function getEmailMessage($notificationType = 'instant')
+    {
+        // not supported
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function getLink()
+    {
+        return ViewableArticleContentRuntimeCache::getInstance()->getObject($this->additionalData['objectID'])->getLink()
+            . '#comment' . $this->additionalData['commentID'] . '/response' . $this->getUserNotificationObject()->objectID;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function getEventHash()
+    {
+        return \sha1($this->eventID . '-' . $this->getUserNotificationObject()->objectID);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function supportsEmailNotification()
+    {
+        return false;
+    }
+}
index cba516de56a38f78b63dd47e01954bdd049e048e..f1c7916fae2f581e9aecd6777119da23d429598f 100644 (file)
@@ -5424,12 +5424,20 @@ Benachrichtigungen auf <a href="{link isHtmlEmail=true}{/link}">{PAGE_TITLE|phra
                <item name="wcf.user.notification.articleComment.message.stacked"><![CDATA[{@'wcf.user.notification.stacked.authorList'|language} haben Kommentare zu dem Artikel <strong>{$article->getTitle()}</strong> verfasst.]]></item>
                <item name="wcf.user.notification.articleComment.mail.plaintext"><![CDATA[{@$authorList} {if $count == 1 && $guestTimesTriggered < 2 && (!$event->getAuthor()->userID || $guestTimesTriggered == 0)}hat einen Kommentar{else}haben Kommentare{/if} zu dem Artikel „{@$article->getTitle()}“ [URL:{@$article->getLink()}#comment{@$commentID}] verfasst{if $count == 1 && !$guestTimesTriggered}:{else}.{/if}]]></item>
                <item name="wcf.user.notification.articleComment.mail.html"><![CDATA[<p>{@$authorList} {if $count == 1 && $guestTimesTriggered < 2 && (!$event->getAuthor()->userID || $guestTimesTriggered == 0)}hat einen Kommentar{else}haben Kommentare{/if} zu dem Artikel <a href="{$article->getLink()}#comment{@$commentID}">{$article->getTitle()}</a> verfasst:</p>]]></item>
+               <item name="wcf.user.notification.articleComment.like.title"><![CDATA[Reaktion auf einen Kommentar (Artikel)]]></item>
+               <item name="wcf.user.notification.articleComment.like.title.stacked"><![CDATA[{#$count} Benutzer haben auf {if LANGUAGE_USE_INFORMAL_VARIANT}deinen{else}Ihren{/if} Kommentar reagiert (Artikel)]]></item>
+               <item name="wcf.user.notification.articleComment.like.message"><![CDATA[<strong>{$author}</strong> hat auf {if LANGUAGE_USE_INFORMAL_VARIANT}deinen{else}Ihren{/if} Kommentar zum Artikel <strong>{$article->getTitle()}</strong> reagiert ({@$__wcf->getReactionHandler()->renderInlineList($reactions)}).]]></item>
+               <item name="wcf.user.notification.articleComment.like.message.stacked"><![CDATA[{@'wcf.user.notification.stacked.authorList'|language} haben auf {if LANGUAGE_USE_INFORMAL_VARIANT}deinen{else}Ihren{/if} Kommentar zum Artikel <strong>{$article->getTitle()}</strong> reagiert ({@$__wcf->getReactionHandler()->renderInlineList($reactions)}).]]></item>
                <item name="wcf.user.notification.articleComment.response.title"><![CDATA[Neue Antwort (Artikel)]]></item>
                <item name="wcf.user.notification.articleComment.response.title.stacked"><![CDATA[{#$timesTriggered} neue Antworten (Artikel)]]></item>
                <item name="wcf.user.notification.articleComment.response.message"><![CDATA[{if $author->userID}<strong>{$author}</strong>{else}Ein Gast{/if} hat eine Antwort zu einem Kommentar in dem Artikel <strong>{$article->getTitle()}</strong> verfasst.]]></item>
                <item name="wcf.user.notification.articleComment.response.message.stacked"><![CDATA[{@'wcf.user.notification.stacked.authorList'|language} haben Antworten zu einem Kommentar in dem Artikel <strong>{$article->getTitle()}</strong> verfasst.]]></item>
                <item name="wcf.user.notification.articleComment.response.mail.plaintext"><![CDATA[{@$authorList} {if $count == 1 && $guestTimesTriggered < 2 && (!$event->getAuthor()->userID || $guestTimesTriggered == 0)}hat eine Antwort{else}haben Antworten{/if} zu einem Kommentar in dem Artikel „{@$article->getTitle()}“ [URL:{@$article->getLink()}#comments/comment{@$commentID}/response{@$responseID}] verfasst{if $count == 1 && !$guestTimesTriggered}:{else}.{/if}]]></item>
                <item name="wcf.user.notification.articleComment.response.mail.html"><![CDATA[<p>{@$authorList} {if $count == 1 && $guestTimesTriggered < 2 && (!$event->getAuthor()->userID || $guestTimesTriggered == 0)}hat eine Antwort{else}haben Antworten{/if} zu einem Kommentar in dem Artikel <a href="{$article->getLink()}#comments/comment{@$commentID}/response{@$responseID}">{$article->getTitle()}</a> verfasst{if $count == 1 && !$guestTimesTriggered}:{else}.{/if}</p>]]></item>
+               <item name="wcf.user.notification.articleComment.response.like.title"><![CDATA[Reaktion auf eine Antwort eines Kommentars (Artikel)]]></item>
+               <item name="wcf.user.notification.articleComment.response.like.title.stacked"><![CDATA[{#$count} Benutzer haben auf {if LANGUAGE_USE_INFORMAL_VARIANT}deine{else}Ihre{/if} Antwort auf einen Kommentar reagiert (Artikel)]]></item>
+               <item name="wcf.user.notification.articleComment.response.like.message"><![CDATA[<strong>{$author}</strong> hat auf {if LANGUAGE_USE_INFORMAL_VARIANT}deine{else}Ihre{/if} Antwort auf einen Kommentar zum Artikel <strong>{$article->getTitle()}</strong> reagiert ({@$__wcf->getReactionHandler()->renderInlineList($reactions)}).]]></item>
+               <item name="wcf.user.notification.articleComment.response.like.message.stacked"><![CDATA[{@'wcf.user.notification.stacked.authorList'|language} haben auf {if LANGUAGE_USE_INFORMAL_VARIANT}deine{else}Ihre{/if} Antwort auf einen Kommentar zum Artikel <strong>{$article->getTitle()}</strong> reagiert ({@$__wcf->getReactionHandler()->renderInlineList($reactions)}).]]></item>
                <item name="wcf.user.notification.articleComment.responseOwner.title"><![CDATA[Neue Antwort (Artikel)]]></item>
                <item name="wcf.user.notification.articleComment.responseOwner.title.stacked"><![CDATA[{#$timesTriggered} neue Antworten (Artikel)]]></item>
                <item name="wcf.user.notification.articleComment.responseOwner.message"><![CDATA[{if $author->userID}<strong>{$author}</strong>{else}Ein Gast{/if} hat eine Antwort zum Kommentar von <strong>{$commentAuthor}</strong> zu {if LANGUAGE_USE_INFORMAL_VARIANT}deinem{else}Ihrem{/if} Artikel <strong>{$article->getTitle()}</strong> verfasst.]]></item>
@@ -5444,6 +5452,8 @@ Benachrichtigungen auf <a href="{link isHtmlEmail=true}{/link}">{PAGE_TITLE|phra
                <item name="wcf.user.notification.com.woltlab.wcf.articleComment.response.notification.commentResponseOwner"><![CDATA[Neue Antwort auf einen Kommentar zu {if LANGUAGE_USE_INFORMAL_VARIANT}deinem{else}Ihrem{/if} Artikel]]></item>
                <item name="wcf.user.notification.com.woltlab.wcf.articleComment.response.notification.commentResponse"><![CDATA[Neue Antwort auf einen Kommentar von {if LANGUAGE_USE_INFORMAL_VARIANT}dir{else}Ihnen{/if}]]></item>
                <item name="wcf.user.notification.com.woltlab.wcf.articleComment.notification.comment"><![CDATA[Neuer Kommentar zu {if LANGUAGE_USE_INFORMAL_VARIANT}deinem{else}Ihrem{/if} Artikel und Artikeln aus abonnierten Kategorien]]></item>
+               <item name="wcf.user.notification.com.woltlab.wcf.articleComment.like.notification.like"><![CDATA[Reaktion auf {if LANGUAGE_USE_INFORMAL_VARIANT}deinen{else}Ihren{/if} Artikel-Kommentar]]></item>
+               <item name="wcf.user.notification.com.woltlab.wcf.articleComment.response.like.notification.like"><![CDATA[Reaktion auf {if LANGUAGE_USE_INFORMAL_VARIANT}deine{else}Ihre{/if} Antwort auf einen Artikel-Kommentar]]></item>
                <item name="wcf.user.notification.userRegistration.title"><![CDATA[Neue Benutzer-Registrierung]]></item>
                <item name="wcf.user.notification.userRegistration.title.stacked"><![CDATA[{#$count} neue Benutzer-Registrierungen]]></item>
                <item name="wcf.user.notification.userRegistration.message"><![CDATA[<strong>{$author}</strong> hat sich registriert.]]></item>
index 5856e6b897dc5553f71c70549caac6f22faba77f..3c8362934631008193f62ae80270f3a4c0fc203e 100644 (file)
@@ -5425,12 +5425,20 @@ your notifications on <a href="{link isHtmlEmail=true}{/link}">{PAGE_TITLE|phras
                <item name="wcf.user.notification.articleComment.message.stacked"><![CDATA[{@'wcf.user.notification.stacked.authorList'|language} commented on the article <strong>{$article->getTitle()}</strong>.]]></item>
                <item name="wcf.user.notification.articleComment.mail.plaintext"><![CDATA[{@$authorList} commented on the article “{@$article->getTitle()}” [URL:{@$article->getLink()}#comment{@$commentID}]{if $count == 1 && !$guestTimesTriggered}:{else}.{/if}]]></item>
                <item name="wcf.user.notification.articleComment.mail.html"><![CDATA[<p>{@$authorList} commented on the article <a href="{$article->getLink()}#comments/comment{@$commentID}">{$article->getTitle()}</a>:</p>]]></item>
+               <item name="wcf.user.notification.articleComment.like.title"><![CDATA[Reaction to a comment (Article)]]></item>
+               <item name="wcf.user.notification.articleComment.like.title.stacked"><![CDATA[{#$count} users reacted to your comment (Article)]]></item>
+               <item name="wcf.user.notification.articleComment.like.message"><![CDATA[<strong>{$author}</strong> reacted to your comment on the article <strong>{$article->getTitle()}</strong> ({@$__wcf->getReactionHandler()->renderInlineList($reactions)}).]]></item>
+               <item name="wcf.user.notification.articleComment.like.message.stacked"><![CDATA[{@'wcf.user.notification.stacked.authorList'|language} reacted to your comment on the article <strong>{$article->getTitle()}</strong> ({@$__wcf->getReactionHandler()->renderInlineList($reactions)}).]]></item>
                <item name="wcf.user.notification.articleComment.response.title"><![CDATA[New Reply (Article)]]></item>
                <item name="wcf.user.notification.articleComment.response.title.stacked"><![CDATA[{#$timesTriggered} new Replies (Article)]]></item>
                <item name="wcf.user.notification.articleComment.response.message"><![CDATA[{if $author->userID}<strong>{$author}</strong>{else}A guest{/if} replied to a comment on the article <strong>{$article->getTitle()}</strong>.]]></item>
                <item name="wcf.user.notification.articleComment.response.message.stacked"><![CDATA[{@'wcf.user.notification.stacked.authorList'|language} replied to a comment on the article <strong>{$article->getTitle()}</strong>.]]></item>
                <item name="wcf.user.notification.articleComment.response.mail.plaintext"><![CDATA[{@$authorList} replied to a comment on the article “{@$article->getTitle()}” [URL:{@$article->getLink()}#comments/comment{@$commentID}/response{@$responseID}]{if $count == 1 && !$guestTimesTriggered}:{else}.{/if}]]></item>
                <item name="wcf.user.notification.articleComment.response.mail.html"><![CDATA[<p>{@$authorList} replied to a comment on the article <a href="{$article->getLink()}#comments/comment{@$commentID}/response{@$responseID}">{$article->getTitle()}</a>:</p>]]></item>
+               <item name="wcf.user.notification.articleComment.response.like.title"><![CDATA[Reaction to your reply to a comment (Article)]]></item>
+               <item name="wcf.user.notification.articleComment.response.like.title.stacked"><![CDATA[{#$count} users reacted to your reply to a comment (Article)]]></item>
+               <item name="wcf.user.notification.articleComment.response.like.message"><![CDATA[<strong>{$author}</strong> reacted to your reply to a comment on the article <strong>{$article->getTitle()}</strong> ({@$__wcf->getReactionHandler()->renderInlineList($reactions)}).]]></item>
+               <item name="wcf.user.notification.articleComment.response.like.message.stacked"><![CDATA[{@'wcf.user.notification.stacked.authorList'|language} reacted to your reply to a comment on the article <strong>{$article->getTitle()}</strong> ({@$__wcf->getReactionHandler()->renderInlineList($reactions)}).]]></item>
                <item name="wcf.user.notification.articleComment.responseOwner.title"><![CDATA[New Reply (Article)]]></item>
                <item name="wcf.user.notification.articleComment.responseOwner.title.stacked"><![CDATA[{#$timesTriggered} new Replies (Article)]]></item>
                <item name="wcf.user.notification.articleComment.responseOwner.message"><![CDATA[{if $author->userID}<strong>{$author}</strong>{else}A guest{/if} replied to a comment by <strong>{$commentAuthor}</strong> on your article <strong>{$article->getTitle()}</strong>.]]></item>
@@ -5445,6 +5453,8 @@ your notifications on <a href="{link isHtmlEmail=true}{/link}">{PAGE_TITLE|phras
                <item name="wcf.user.notification.com.woltlab.wcf.articleComment.response.notification.commentResponseOwner"><![CDATA[Notify me of new replies to comments on my articles]]></item>
                <item name="wcf.user.notification.com.woltlab.wcf.articleComment.response.notification.commentResponse"><![CDATA[Notify me of new replies to my comments]]></item>
                <item name="wcf.user.notification.com.woltlab.wcf.articleComment.notification.comment"><![CDATA[Notify me of new comments on my articles and on articles in subscribed categories]]></item>
+               <item name="wcf.user.notification.com.woltlab.wcf.articleComment.like.notification.like"><![CDATA[Notify me when someone reacted to my article comments]]></item>
+               <item name="wcf.user.notification.com.woltlab.wcf.articleComment.response.like.notification.like"><![CDATA[Notify me when someone reacted to my replies to article comments]]></item>
                <item name="wcf.user.notification.pageComment.responseOwner.title"><![CDATA[New reply (Page)]]></item>
                <item name="wcf.user.notification.userRegistration.title"><![CDATA[New user registration]]></item>
                <item name="wcf.user.notification.userRegistration.title.stacked"><![CDATA[{#$count} new user registrations]]></item>