<script data-relocate="true">
- $(function() {
- WCF.Language.addObject({
- 'wcf.like.likes.more': '{lang}wcf.like.likes.more{/lang}',
- 'wcf.like.likes.noMoreEntries': '{lang}wcf.like.likes.noMoreEntries{/lang}',
- 'wcf.like.dislikes.more': '{lang}wcf.like.dislikes.more{/lang}',
- 'wcf.like.dislikes.noMoreEntries': '{lang}wcf.like.dislikes.noMoreEntries{/lang}',
- 'wcf.like.likesReceived': '{lang}wcf.like.likesReceived{/lang}',
- 'wcf.like.likesGiven': '{lang}wcf.like.likesGiven{/lang}',
- 'wcf.like.dislikesReceived': '{lang}wcf.like.dislikesReceived{/lang}',
- 'wcf.like.dislikesGiven': '{lang}wcf.like.dislikesGiven{/lang}'
+ require(['WoltLabSuite/Core/Ui/Reaction/Profile/Loader', 'Language'], function(UiReactionProfileLoader, Language) {
+ Language.addObject({
+ 'wcf.like.reaction.noMoreEntries': '{lang}wcf.like.reaction.noMoreEntries{/lang}',
+ 'wcf.like.reaction.more': '{lang}wcf.like.reaction.more{/lang}'
});
- new WCF.User.LikeLoader({@$userID});
+ new UiReactionProfileLoader({@$userID}, {@$firstReactionTypeID});
});
</script>
<ul id="likeList" class="containerList recentActivityList likeList" data-last-like-time="{@$lastLikeTime}">
<li class="containerListButtonGroup likeTypeSelection">
<ul class="buttonGroup" id="likeType">
- <li><a class="button small active" data-like-type="received">{lang}wcf.like.likesReceived{/lang}</a></li>
- <li><a class="button small" data-like-type="given">{lang}wcf.like.likesGiven{/lang}</a></li>
+ <li><a class="button small active" data-like-type="received">{lang}wcf.like.reactionsReceived{/lang}</a></li>
+ <li><a class="button small" data-like-type="given">{lang}wcf.like.reactionsGiven{/lang}</a></li>
</ul>
- {if LIKE_ENABLE_DISLIKE}
- <ul class="buttonGroup" id="likeValue">
- <li><a class="button small active" data-like-value="1">{lang}wcf.like.details.like{/lang}</a></li>
- <li><a class="button small" data-like-value="-1">{lang}wcf.like.details.dislike{/lang}</a></li>
- </ul>
- {/if}
+ <ul class="buttonGroup" id="reactionType">
+ {foreach from=$__wcf->getReactionHandler()->getReactionTypes() item=reactionType name=reactionTypeLoop}
+ <li><a class="button small jsTooltip{if $tpl.foreach.reactionTypeLoop.first} active{/if}" data-reaction-type-id="{$reactionType->reactionTypeID}" title="{$reactionType->getTitle()}">{@$reactionType->renderIcon()} <span class="invisible">{$reactionType->getTitle()}</span></a></li>
+ {/foreach}
+ </ul>
</li>
{include file='userProfileLikeItem'}
* Loads likes once the user scrolls to the very bottom.
*
* @param integer userID
+ * @deprecated since 3.2
*/
WCF.User.LikeLoader = Class.extend({
/**
--- /dev/null
+/**
+ * Handles the reaction list in the user profile.
+ *
+ * @author Joshua Ruesweg
+ * @copyright 2001-2018 WoltLab GmbH
+ * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
+ * @module WoltLabSuite/Core/Ui/Reaction/Profile/Loader
+ * @since 3.2
+ */
+define(['Ajax', 'Core', 'Language'], function(Ajax, Core, Language) {
+ "use strict";
+
+ /**
+ * @constructor
+ */
+ function UiReactionProfileLoader(userID, firstReactionTypeID) { this.init(userID, firstReactionTypeID); }
+ UiReactionProfileLoader.prototype = {
+ /**
+ * Initializes a new ReactionListLoader object.
+ *
+ * @param integer userID
+ */
+ init: function(userID, firstReactionTypeID) {
+ this._container = elById('likeList');
+ this._userID = userID;
+ this._reactionTypeID = firstReactionTypeID;
+ this._targetType = 'received';
+ this._options = {
+ parameters: []
+ };
+
+ if (!this._userID) {
+ throw new Error("[WoltLabSuite/Core/Ui/Reaction/Profile/Loader] Invalid parameter 'userID' given.");
+ }
+
+ if (!this._reactionTypeID) {
+ throw new Error("[WoltLabSuite/Core/Ui/Reaction/Profile/Loader] Invalid parameter 'firstReactionTypeID' given.");
+ }
+
+ var loadButtonList = elCreate('li');
+ loadButtonList.className = 'likeListMore showMore';
+ this._noMoreEntries = elCreate('small');
+ this._noMoreEntries.innerHTML = Language.get('wcf.like.reaction.noMoreEntries');
+ this._noMoreEntries.style.display = 'none';
+ loadButtonList.appendChild(this._noMoreEntries);
+
+ this._loadButton = elCreate('button');
+ this._loadButton.className = 'small';
+ this._loadButton.innerHTML = Language.get('wcf.like.reaction.more');
+ this._loadButton.addEventListener(WCF_CLICK_EVENT, this._loadReactions.bind(this));
+ this._loadButton.style.display = 'none';
+ loadButtonList.appendChild(this._loadButton);
+ this._container.appendChild(loadButtonList);
+
+ if (elBySel('#likeList > li').length === 2) {
+ this._noMoreEntries.style.display = '';
+ }
+ else {
+ this._loadButton.style.display = '';
+ }
+
+ this._setupReactionTypeButtons();
+ this._setupTargetTypeButtons();
+ },
+
+ /**
+ * Set up the reaction type buttons.
+ */
+ _setupReactionTypeButtons: function() {
+ var element, elements = elBySelAll('#reactionType .button');
+ for (var i = 0, length = elements.length; i < length; i++) {
+ element = elements[i];
+ element.addEventListener(WCF_CLICK_EVENT, this._changeReactionTypeValue.bind(this, ~~elData(element, 'reaction-type-id')));
+ }
+ },
+
+ /**
+ * Set up the target type buttons.
+ */
+ _setupTargetTypeButtons: function() {
+ var element, elements = elBySelAll('#likeType .button');
+ for (var i = 0, length = elements.length; i < length; i++) {
+ element = elements[i];
+ element.addEventListener(WCF_CLICK_EVENT, this._changeTargetType.bind(this, elData(element, 'like-type')));
+ }
+ },
+
+ /**
+ * Changes the reaction target type (given or received) and reload the entire element.
+ *
+ * @param {string} targetType
+ */
+ _changeTargetType: function(targetType) {
+ if (targetType !== 'given' && targetType !== 'received') {
+ throw new Error("[WoltLabSuite/Core/Ui/Reaction/Profile/Loader] Invalid parameter 'targetType' given.");
+ }
+
+ if (targetType !== this._targetType) {
+ // remove old active state
+ elBySel('#likeType .button.active').classList.remove('active');
+
+ // add active status to new button
+ elBySel('#likeType .button[data-like-type="'+ targetType +'"]').classList.add('active');
+
+ this._targetType = targetType;
+ this._reload();
+ }
+ },
+
+ /**
+ * Changes the reaction type value and reload the entire element.
+ *
+ * @param {int} reactionTypeID
+ */
+ _changeReactionTypeValue: function(reactionTypeID) {
+ if (this._reactionTypeID !== reactionTypeID) {
+ // remove old active state
+ elBySel('#reactionType .button.active').classList.remove('active');
+
+ // add active status to new button
+ elBySel('#reactionType .button[data-reaction-type-id="'+ reactionTypeID +'"]').classList.add('active');
+
+ this._reactionTypeID = reactionTypeID;
+ this._reload();
+ }
+ },
+
+ /**
+ * Handles reload.
+ */
+ _reload: function() {
+ var elements = elBySelAll('#likeList > li:not(:first-child):not(:last-child)');
+
+ for (var i = 0, length = elements.length; i < length; i++) {
+ this._container.removeChild(elements[i]);
+ }
+
+ elData(this._container, 'last-like-time', 0);
+
+ this._loadReactions();
+ },
+
+ /**
+ * Load a list of reactions.
+ */
+ _loadReactions: function() {
+ this._options.parameters.userID = this._userID;
+ this._options.parameters.lastLikeTime = elData(this._container, 'last-like-time');
+ this._options.parameters.targetType = this._targetType;
+ this._options.parameters.reactionTypeID = this._reactionTypeID;
+
+ Ajax.api(this, {
+ parameters: this._options.parameters
+ });
+ },
+
+ _ajaxSuccess: function(data) {
+ if (data.returnValues.template) {
+ elBySel('#likeList > li:nth-last-child(1)').insertAdjacentHTML('beforebegin', data.returnValues.template);
+
+ elData(this._container, 'last-like-time', data.returnValues.lastLikeTime);
+ this._noMoreEntries.style.display = 'none';
+ this._loadButton.style.display = '';
+ }
+ else {
+ this._noMoreEntries.style.display = '';
+ this._loadButton.style.display = 'none';
+ }
+ },
+
+ _ajaxSetup: function() {
+ return {
+ data: {
+ actionName: 'load',
+ className: '\\wcf\\data\\reaction\\ReactionAction'
+ }
+ };
+ }
+ };
+
+ return UiReactionProfileLoader;
+});
}
}
}
+
+ /**
+ * Validates parameters to load reactions.
+ */
+ public function validateLoad() {
+ $this->readInteger('lastLikeTime', true);
+ $this->readInteger('userID');
+ $this->readInteger('reactionTypeID');
+ $this->readString('targetType');
+ }
+
+ /**
+ * Loads a list of reactions.
+ *
+ * @return array
+ */
+ public function load() {
+ $likeList = new ViewableLikeList();
+ if ($this->parameters['lastLikeTime']) {
+ $likeList->getConditionBuilder()->add("like_table.time < ?", [$this->parameters['lastLikeTime']]);
+ }
+ if ($this->parameters['targetType'] == 'received') {
+ $likeList->getConditionBuilder()->add("like_table.objectUserID = ?", [$this->parameters['userID']]);
+ }
+ else {
+ $likeList->getConditionBuilder()->add("like_table.userID = ?", [$this->parameters['userID']]);
+ }
+ $likeList->getConditionBuilder()->add("like_table.reactionTypeID = ?", [$this->parameters['reactionTypeID']]);
+ $likeList->readObjects();
+
+ if (!count($likeList)) {
+ return [];
+ }
+
+ // parse template
+ WCF::getTPL()->assign([
+ 'likeList' => $likeList
+ ]);
+
+ return [
+ 'lastLikeTime' => $likeList->getLastLikeTime(),
+ 'template' => WCF::getTPL()->fetch('userProfileLikeItem')
+ ];
+ }
}
<?php
declare(strict_types=1);
namespace wcf\system\menu\user\profile\content;
-use wcf\data\like\Like;
use wcf\data\like\ViewableLikeList;
+use wcf\system\reaction\ReactionHandler;
use wcf\system\SingletonFactory;
use wcf\system\WCF;
* @inheritDoc
*/
public function getContent($userID) {
+ $reactionTypes = ReactionHandler::getInstance()->getReactionTypes();
+ $firstReactionType = reset($reactionTypes);
+
$likeList = new ViewableLikeList();
$likeList->getConditionBuilder()->add("like_table.objectUserID = ?", [$userID]);
- $likeList->getConditionBuilder()->add("like_table.likeValue = ?", [Like::LIKE]);
+ $likeList->getConditionBuilder()->add("like_table.reactionTypeID = ?", [$firstReactionType->reactionTypeID]);
$likeList->readObjects();
WCF::getTPL()->assign([
'likeList' => $likeList,
'userID' => $userID,
- 'lastLikeTime' => $likeList->getLastLikeTime()
+ 'lastLikeTime' => $likeList->getLastLikeTime(),
+ 'firstReactionTypeID' => $firstReactionType->reactionTypeID
]);
return WCF::getTPL()->fetch('userProfileLikes');
return JSON::encode($returnValues);
}
+ /**
+ * Returns all enabled reaction types.
+ *
+ * @return ReactionType[]
+ */
+ public function getReactionTypes() {
+ return ReactionTypeCache::getInstance()->getEnabledReactionTypes();
+ }
+
/**
* Returns a reaction type by id.
*
<item name="wcf.like.likes.noMoreEntries"><![CDATA[Keine weiteren Likes]]></item>
<item name="wcf.like.dislikes.more"><![CDATA[Weitere Dislikes]]></item>
<item name="wcf.like.dislikes.noMoreEntries"><![CDATA[Keine weiteren Dislikes]]></item>
- <item name="wcf.like.title.com.woltlab.wcf.user.profileComment"><![CDATA[Mag den Kommentar {if $commentAuthor}<a href="{link controller='User' object=$commentAuthor}{/link}">von {$commentAuthor->username}</a>{else}eines Gasts{/if} an der <a href="{$comment->getLink()}">Pinnwand von {$user->username}</a>{if $like->isDislike()} nicht{/if}.]]></item>
- <item name="wcf.like.title.com.woltlab.wcf.user.profileComment.response"><![CDATA[Mag die Antwort {if $responseAuthor}<a href="{link controller='User' object=$responseAuthor}{/link}">von {$responseAuthor->username}</a>{else}eines Gasts{/if} zum Kommentar {if $commentAuthor}von <a href="{link controller='User' object=$commentAuthor}{/link}">{$commentAuthor->username}</a>{else}eines Gasts{/if} an der <a href="{$response->getLink()}">Pinnwand von {$user->username}</a>{if $like->isDislike()} nicht{/if}.]]></item>
+ <item name="wcf.like.title.com.woltlab.wcf.user.profileComment"><![CDATA[Hat mit „{$like->getReactionType()->getTitle()}“ auf den Kommentar {if $commentAuthor}<a href="{link controller='User' object=$commentAuthor}{/link}">von {$commentAuthor->username}</a>{else}eines Gasts{/if} an der <a href="{$comment->getLink()}">Pinnwand von {$user->username}</a> reagiert.]]></item>
+ <item name="wcf.like.title.com.woltlab.wcf.user.profileComment.response"><![CDATA[Hat mit „{$like->getReactionType()->getTitle()}“ auf die Antwort {if $responseAuthor}<a href="{link controller='User' object=$responseAuthor}{/link}">von {$responseAuthor->username}</a>{else}eines Gasts{/if} zum Kommentar {if $commentAuthor}von <a href="{link controller='User' object=$commentAuthor}{/link}">{$commentAuthor->username}</a>{else}eines Gasts{/if} an der <a href="{$response->getLink()}">Pinnwand von {$user->username}</a> reagiert.]]></item>
<item name="wcf.like.objectType.com.woltlab.wcf.likeableArticle"><![CDATA[Artikel]]></item>
- <item name="wcf.like.title.com.woltlab.wcf.likeableArticle"><![CDATA[Mag den Artikel <a href="{$article->getLink()}">{$article->getTitle()}</a>{if $like->isDislike()} nicht{/if}.]]></item>
- <item name="wcf.like.title.com.woltlab.wcf.articleComment"><![CDATA[Mag den Kommentar {if $commentAuthor}von <a href="{link controller='User' object=$commentAuthor}{/link}">{$commentAuthor->username}</a>{else}eines Gasts{/if} zum Artikel <a href="{$comment->getLink()}">{$articleContent->getTitle()}</a>{if $like->isDislike()} nicht{/if}.]]></item>
- <item name="wcf.like.title.com.woltlab.wcf.articleComment.response"><![CDATA[Mag die Antwort {if $responseAuthor}von <a href="{link controller='User' object=$responseAuthor}{/link}">{$responseAuthor->username}</a>{else}eines Gasts{/if} zum Kommentar {if $commentAuthor}von <a href="{link controller='User' object=$commentAuthor}{/link}">{$commentAuthor->username}</a>{else}eines Gasts{/if} zum Artikel <a href="{$response->getLink()}">{$articleContent->getTitle()}</a>{if $like->isDislike()} nicht{/if}.]]></item>
- <item name="wcf.like.title.com.woltlab.wcf.pageComment"><![CDATA[Mag den Kommentar {if $commentAuthor}von <a href="{link controller='User' object=$commentAuthor}{/link}">{$commentAuthor->username}</a>{else}eines Gasts{/if} zu der Seite <a href="{$comment->getLink()}">{$page->getTitle()}</a>{if $like->isDislike()} nicht{/if}.]]></item>
- <item name="wcf.like.title.com.woltlab.wcf.pageComment.response"><![CDATA[Mag die Antwort {if $responseAuthor}von <a href="{link controller='User' object=$responseAuthor}{/link}">{$responseAuthor->username}</a>{else}eines Gasts{/if} zum Kommentar {if $commentAuthor}von <a href="{link controller='User' object=$commentAuthor}{/link}">{$commentAuthor->username}</a>{else}eines Gasts{/if} zu der Seite <a href="{$response->getLink()}">{$page->getTitle()}</a>{if $like->isDislike()} nicht{/if}.]]></item>
+ <item name="wcf.like.title.com.woltlab.wcf.likeableArticle"><![CDATA[Hat mit „{$like->getReactionType()->getTitle()}“ auf den Artikel <a href="{$article->getLink()}">{$article->getTitle()}</a> reagiert.]]></item>
+ <item name="wcf.like.title.com.woltlab.wcf.articleComment"><![CDATA[Hat mit „{$like->getReactionType()->getTitle()}“ auf den Kommentar {if $commentAuthor}von <a href="{link controller='User' object=$commentAuthor}{/link}">{$commentAuthor->username}</a>{else}eines Gasts{/if} zum Artikel <a href="{$comment->getLink()}">{$articleContent->getTitle()}</a> reagiert.]]></item>
+ <item name="wcf.like.title.com.woltlab.wcf.articleComment.response"><![CDATA[Hat mit „{$like->getReactionType()->getTitle()}“ auf die Antwort {if $responseAuthor}von <a href="{link controller='User' object=$responseAuthor}{/link}">{$responseAuthor->username}</a>{else}eines Gasts{/if} zum Kommentar {if $commentAuthor}von <a href="{link controller='User' object=$commentAuthor}{/link}">{$commentAuthor->username}</a>{else}eines Gasts{/if} zum Artikel <a href="{$response->getLink()}">{$articleContent->getTitle()}</a> reagiert.]]></item>
+ <item name="wcf.like.title.com.woltlab.wcf.pageComment"><![CDATA[Hat mit „{$like->getReactionType()->getTitle()}“ auf den Kommentar {if $commentAuthor}von <a href="{link controller='User' object=$commentAuthor}{/link}">{$commentAuthor->username}</a>{else}eines Gasts{/if} zu der Seite <a href="{$comment->getLink()}">{$page->getTitle()}</a> reagiert.]]></item>
+ <item name="wcf.like.title.com.woltlab.wcf.pageComment.response"><![CDATA[Hat mit „{$like->getReactionType()->getTitle()}“ auf die Antwort {if $responseAuthor}von <a href="{link controller='User' object=$responseAuthor}{/link}">{$responseAuthor->username}</a>{else}eines Gasts{/if} zum Kommentar {if $commentAuthor}von <a href="{link controller='User' object=$commentAuthor}{/link}">{$commentAuthor->username}</a>{else}eines Gasts{/if} zu der Seite <a href="{$response->getLink()}">{$page->getTitle()}</a> reagiert.]]></item>
+ <item name="wcf.like.reaction.noMoreEntries"><![CDATA[Keine weiteren Reaktionen]]></item>
+ <item name="wcf.like.reaction.more"><![CDATA[Weitere Reaktionen]]></item>
+ <item name="wcf.like.reactionsReceived"><![CDATA[Erhaltene Reaktionen]]></item>
+ <item name="wcf.like.reactionsGiven"><![CDATA[Vergebene Reaktionen]]></item>
</category>
<category name="wcf.map">
<item name="wcf.like.likes.noMoreEntries"><![CDATA[There are not any new likes at the moment.]]></item>
<item name="wcf.like.dislikes.more"><![CDATA[More Dislikes]]></item>
<item name="wcf.like.dislikes.noMoreEntries"><![CDATA[There are not any new dislikes at the moment.]]></item>
- <item name="wcf.like.title.com.woltlab.wcf.user.profileComment"><![CDATA[{if $like->isDislike()}Dislikes{else}Likes{/if} the comment by {if $commentAuthor}<a href="{link controller='User' object=$commentAuthor}{/link}">{$commentAuthor->username}</a>{else}a guest{/if} on <a href="{$comment->getLink()}">{$user->username}’s wall</a>.]]></item>
- <item name="wcf.like.title.com.woltlab.wcf.user.profileComment.response"><![CDATA[{if $like->isDislike()}Dislikes{else}Likes{/if} the response by {if $responseAuthor}<a href="{link controller='User' object=$responseAuthor}{/link}">{$responseAuthor->username}</a>{else}a guest{/if} on the comment by {if $commentAuthor}<a href="{link controller='User' object=$commentAuthor}{/link}">{$commentAuthor->username}</a>{else}a guest{/if} on <a href="{$response->getLink()}">{$user->username}’s wall</a>.]]></item>
+ <item name="wcf.like.title.com.woltlab.wcf.user.profileComment"><![CDATA[Reacted with “{$like->getReactionType()->getTitle()}” to the comment by {if $commentAuthor}<a href="{link controller='User' object=$commentAuthor}{/link}">{$commentAuthor->username}</a>{else}a guest{/if} on <a href="{$comment->getLink()}">{$user->username}’s wall</a>.]]></item>
+ <item name="wcf.like.title.com.woltlab.wcf.user.profileComment.response"><![CDATA[Reacted with “{$like->getReactionType()->getTitle()}” to the response by {if $responseAuthor}<a href="{link controller='User' object=$responseAuthor}{/link}">{$responseAuthor->username}</a>{else}a guest{/if} on the comment by {if $commentAuthor}<a href="{link controller='User' object=$commentAuthor}{/link}">{$commentAuthor->username}</a>{else}a guest{/if} on <a href="{$response->getLink()}">{$user->username}’s wall</a>.]]></item>
<item name="wcf.like.objectType.com.woltlab.wcf.likeableArticle"><![CDATA[Article]]></item>
- <item name="wcf.like.title.com.woltlab.wcf.likeableArticle"><![CDATA[{if $like->isDislike()}Dislikes{else}Likes{/if} the article <a href="{$article->getLink()}">{$article->getTitle()}</a>.]]></item>
- <item name="wcf.like.title.com.woltlab.wcf.articleComment"><![CDATA[{if $like->isDislike()}Dislikes{else}Likes{/if} the comment by {if $commentAuthor}<a href="{link controller='User' object=$commentAuthor}{/link}">{$commentAuthor->username}</a>{else}a guest{/if} on the article <a href="{$comment->getLink()}">{$articleContent->getTitle()}</a>.]]></item>
- <item name="wcf.like.title.com.woltlab.wcf.articleComment.response"><![CDATA[{if $like->isDislike()}Dislikes{else}Likes{/if} the response by {if $responseAuthor}<a href="{link controller='User' object=$responseAuthor}{/link}">{$responseAuthor->username}</a>{else}a guest{/if} on the comment by {if $commentAuthor}<a href="{link controller='User' object=$commentAuthor}{/link}">{$commentAuthor->username}</a>{else}a guest{/if} on the article <a href="{$response->getLink()}">{$articleContent->getTitle()}</a>.]]></item>
- <item name="wcf.like.title.com.woltlab.wcf.pageComment"><![CDATA[{if $like->isDislike()}Dislikes{else}Likes{/if} the comment by {if $commentAuthor}<a href="{link controller='User' object=$commentAuthor}{/link}">{$commentAuthor->username}</a>{else}a guest{/if} on the page <a href="{$comment->getLink()}">{$page->getTitle()}</a>.]]></item>
- <item name="wcf.like.title.com.woltlab.wcf.pageComment.response"><![CDATA[{if $like->isDislike()}Dislikes{else}Likes{/if} the response by {if $responseAuthor}<a href="{link controller='User' object=$responseAuthor}{/link}">{$responseAuthor->username}</a>{else}a guest{/if} on the comment by {if $commentAuthor}<a href="{link controller='User' object=$commentAuthor}{/link}">{$commentAuthor->username}</a>{else}a guest{/if} on the page <a href="{$response->getLink()}">{$page->getTitle()}</a>.]]></item>
+ <item name="wcf.like.title.com.woltlab.wcf.likeableArticle"><![CDATA[Reacted with “{$like->getReactionType()->getTitle()}” to the article <a href="{$article->getLink()}">{$article->getTitle()}</a>.]]></item>
+ <item name="wcf.like.title.com.woltlab.wcf.articleComment"><![CDATA[Reacted with “{$like->getReactionType()->getTitle()}” to the comment by {if $commentAuthor}<a href="{link controller='User' object=$commentAuthor}{/link}">{$commentAuthor->username}</a>{else}a guest{/if} on the article <a href="{$comment->getLink()}">{$articleContent->getTitle()}</a>.]]></item>
+ <item name="wcf.like.title.com.woltlab.wcf.articleComment.response"><![CDATA[Reacted with “{$like->getReactionType()->getTitle()}” to the response by {if $responseAuthor}<a href="{link controller='User' object=$responseAuthor}{/link}">{$responseAuthor->username}</a>{else}a guest{/if} on the comment by {if $commentAuthor}<a href="{link controller='User' object=$commentAuthor}{/link}">{$commentAuthor->username}</a>{else}a guest{/if} on the article <a href="{$response->getLink()}">{$articleContent->getTitle()}</a>.]]></item>
+ <item name="wcf.like.title.com.woltlab.wcf.pageComment"><![CDATA[Reacted with “{$like->getReactionType()->getTitle()}” to the comment by {if $commentAuthor}<a href="{link controller='User' object=$commentAuthor}{/link}">{$commentAuthor->username}</a>{else}a guest{/if} on the page <a href="{$comment->getLink()}">{$page->getTitle()}</a>.]]></item>
+ <item name="wcf.like.title.com.woltlab.wcf.pageComment.response"><![CDATA[Reacted with “{$like->getReactionType()->getTitle()}” to the response by {if $responseAuthor}<a href="{link controller='User' object=$responseAuthor}{/link}">{$responseAuthor->username}</a>{else}a guest{/if} on the comment by {if $commentAuthor}<a href="{link controller='User' object=$commentAuthor}{/link}">{$commentAuthor->username}</a>{else}a guest{/if} on the page <a href="{$response->getLink()}">{$page->getTitle()}</a>.]]></item>
+ <item name="wcf.like.reaction.noMoreEntries"><![CDATA[There are not any new reactions at the moment.]]></item>
+ <item name="wcf.like.reaction.more"><![CDATA[More Reactions]]></item>
+ <item name="wcf.like.reactionsReceived"><![CDATA[Reactions Received]]></item>
+ <item name="wcf.like.reactionsGiven"><![CDATA[Reactions Given]]></item>
</category>
<category name="wcf.map">