2 namespace wcf\system\like
;
3 use wcf\data\like\
object\ILikeObject
;
4 use wcf\data\like\
object\LikeObject
;
5 use wcf\data\like\Like
;
6 use wcf\data\
object\type\ObjectType
;
7 use wcf\data\reaction\type\ReactionType
;
8 use wcf\data\reaction\type\ReactionTypeCache
;
9 use wcf\data\user\User
;
10 use wcf\system\reaction\ReactionHandler
;
11 use wcf\system\SingletonFactory
;
15 * Handles the likes of liked objects.
17 * Usage (retrieve all likes for a list of objects):
19 * $objectType = LikeHandler::getInstance()->getObjectType('com.woltlab.wcf.foo.bar');
21 * LikeHandler::getInstance()->loadLikeObjects($objectType, $objectIDs);
23 * $likeObjects = LikeHandler::getInstance()->getLikeObjects($objectType);
26 * @copyright 2001-2018 WoltLab GmbH
27 * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
28 * @package WoltLabSuite\Core\System\Like
29 * @deprecated The LikeHandler is deprecated since 3.2 in favor of the \wcf\system\reaction\ReactionHandler
31 class LikeHandler
extends SingletonFactory
{
36 protected $likeObjectCache = [];
42 protected $cache = null;
45 * Creates a new LikeHandler instance.
47 protected function init() {
52 * Returns an object type from cache.
54 * @param string $objectName
57 public function getObjectType($objectName) {
58 return ReactionHandler
::getInstance()->getObjectType($objectName);
62 * Returns a like object.
64 * @param ObjectType $objectType
65 * @param integer $objectID
66 * @return LikeObject|null
68 public function getLikeObject(ObjectType
$objectType, $objectID) {
69 return ReactionHandler
::getInstance()->getLikeObject($objectType, $objectID);
73 * Returns the like objects of a specific object type.
75 * @param ObjectType $objectType
76 * @return LikeObject[]
78 public function getLikeObjects(ObjectType
$objectType) {
79 return ReactionHandler
::getInstance()->getLikeObjects($objectType);
83 * Loads the like data for a set of objects and returns the number of loaded
86 * @param ObjectType $objectType
87 * @param array $objectIDs
90 public function loadLikeObjects(ObjectType
$objectType, array $objectIDs) {
91 return ReactionHandler
::getInstance()->loadLikeObjects($objectType, $objectIDs);
95 * Saves the like of an object.
97 * @param ILikeObject $likeable
99 * @param integer $likeValue
100 * @param integer $time
103 public function like(ILikeObject
$likeable, User
$user, $likeValue, $time = TIME_NOW
) {
104 if ($likeValue == 1) {
105 $reactionTypeID = ReactionHandler
::getInstance()->getLegacyReactionTypeID(ReactionType
::REACTION_TYPE_POSITIVE
);
108 $reactionTypeID = ReactionHandler
::getInstance()->getLegacyReactionTypeID(ReactionType
::REACTION_TYPE_NEGATIVE
);
111 if ($reactionTypeID === null) {
121 $reactData = ReactionHandler
::getInstance()->react($likeable, $user, $reactionTypeID, $time);
122 if ($reactData['reactionTypeID'] === null) {
125 else if (ReactionTypeCache
::getInstance()->getReactionTypeByID($reactData['reactionTypeID'])->type
== ReactionType
::REACTION_TYPE_NEGATIVE
) {
133 'data' => $this->loadLikeStatus($reactData['likeObject'], $user),
134 'like' => $reactData['likeObject'],
135 'newValue' => $newValue,
136 'oldValue' => 0, // this value is currently a dummy value, maybe determine a real value
142 * Reverts the like of an object.
145 * @param ILikeObject $likeable
146 * @param LikeObject $likeObject
150 public function revertLike(Like
$like, ILikeObject
$likeable, LikeObject
$likeObject, User
$user) {
151 $reactData = ReactionHandler
::getInstance()->revertReact($like, $likeable, $likeObject, $user);
154 'data' => $this->loadLikeStatus($reactData['likeObject'], $user),
157 'oldValue' => 0, // this value is currently a dummy value, maybe determine a real value
163 * Removes all likes for given objects.
165 * @param string $objectType
166 * @param integer[] $objectIDs
167 * @param string[] $notificationObjectTypes
169 public function removeLikes($objectType, array $objectIDs, array $notificationObjectTypes = []) {
170 ReactionHandler
::getInstance()->removeReacts($objectType, $objectIDs, $notificationObjectTypes);
174 * Returns current like object status.
176 * @param LikeObject $likeObject
180 protected function loadLikeStatus(LikeObject
$likeObject, User
$user) {
181 $sql = "SELECT like_object.likes, like_object.dislikes, like_object.cumulativeLikes,
182 CASE WHEN like_table.likeValue IS NOT NULL THEN like_table.likeValue ELSE 0 END AS liked
183 FROM wcf".WCF_N
."_like_object like_object
184 LEFT JOIN wcf".WCF_N
."_like like_table
185 ON (like_table.objectTypeID = ?
186 AND like_table.objectID = like_object.objectID
187 AND like_table.userID = ?)
188 WHERE like_object.likeObjectID = ?";
189 $statement = WCF
::getDB()->prepareStatement($sql);
190 $statement->execute([
191 $likeObject->objectTypeID
,
193 $likeObject->likeObjectID
196 return $statement->fetchArray();