Add flag for comments, to mark them compatible with the reaction system
authorJoshua Rüsweg <josh@bastelstu.be>
Sun, 1 Jul 2018 15:37:50 +0000 (17:37 +0200)
committerJoshua Rüsweg <josh@bastelstu.be>
Sun, 1 Jul 2018 15:37:50 +0000 (17:37 +0200)
Comments of different object types do not have their own LikeableProvider, but are all controlled by a central provider.  Therefore it is difficult to mark the comments as compatible to the reaction system. Therefore, we introduce a new flag that allows the global provider to control whether the comment is already compatible with the new system or not. If the "supportReactions" flag with the value "1" is passed to the object type, the notification of a reaction to the comment is sent. Otherwise the notification will not be sent.
See #2508

wcfsetup/install/files/lib/data/comment/LikeableComment.class.php

index f3d06a927e60b0b2dff1cf2e66a7617bc9d0b98e..206dab49116f168a7e003683f1a8085f5bac37f7 100644 (file)
@@ -3,6 +3,7 @@ declare(strict_types=1);
 namespace wcf\data\comment;
 use wcf\data\like\object\AbstractLikeObject;
 use wcf\data\like\Like;
+use wcf\data\reaction\object\IReactionObject;
 use wcf\system\comment\CommentHandler;
 use wcf\system\user\notification\object\LikeUserNotificationObject;
 use wcf\system\user\notification\UserNotificationHandler;
@@ -19,7 +20,7 @@ use wcf\system\WCF;
  * @method     Comment         getDecoratedObject()
  * @mixin      Comment
  */
-class LikeableComment extends AbstractLikeObject {
+class LikeableComment extends AbstractLikeObject implements IReactionObject {
        /**
         * @inheritDoc
         */
@@ -51,7 +52,7 @@ class LikeableComment extends AbstractLikeObject {
         */
        public function sendNotification(Like $like) {
                $objectType = CommentHandler::getInstance()->getObjectType($this->getDecoratedObject()->objectTypeID);
-               if (UserNotificationHandler::getInstance()->getObjectTypeID($objectType->objectType.'.like.notification')) {
+               if (UserNotificationHandler::getInstance()->getObjectTypeID($objectType->objectType.'.like.notification') && UserNotificationHandler::getInstance()->getObjectTypeProcessor($objectType->objectType.'.like.notification')->supportReactions) {
                        if ($this->userID != WCF::getUser()->userID) {
                                $notificationObject = new LikeUserNotificationObject($like);
                                UserNotificationHandler::getInstance()->fireEvent(