2 namespace wcf\data\comment
;
3 use wcf\data\like\
object\ILikeObject
;
4 use wcf\data\like\ILikeObjectTypeProvider
;
5 use wcf\data\
object\type\AbstractObjectTypeProvider
;
6 use wcf\system\comment\CommentHandler
;
7 use wcf\system\like\IViewableLikeProvider
;
10 * Object type provider for comments
12 * @author Alexander Ebert
13 * @copyright 2001-2014 WoltLab GmbH
14 * @license GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
15 * @package com.woltlab.wcf
16 * @subpackage data.comment
17 * @category Community Framework
19 class LikeableCommentProvider
extends AbstractObjectTypeProvider
implements ILikeObjectTypeProvider
, IViewableLikeProvider
{
21 * @see \wcf\data\object\type\AbstractObjectTypeProvider::$className
23 public $className = 'wcf\data\comment\Comment';
26 * @see \wcf\data\object\type\AbstractObjectTypeProvider::$decoratorClassName
28 public $decoratorClassName = 'wcf\data\comment\LikeableComment';
31 * @see \wcf\data\object\type\AbstractObjectTypeProvider::$listClassName
33 public $listClassName = 'wcf\data\comment\CommentList';
36 * @see \wcf\data\like\ILikeObjectTypeProvider::checkPermissions()
38 public function checkPermissions(ILikeObject
$comment) {
39 if (!$comment->commentID
) return false;
41 $objectType = CommentHandler
::getInstance()->getObjectType($comment->objectTypeID
);
42 return CommentHandler
::getInstance()->getCommentManager($objectType->objectType
)->isAccessible($comment->objectID
);
46 * @see \wcf\system\like\IViewableLikeProvider::prepare()
48 public function prepare(array $likes) {
49 $commentIDs = array();
50 foreach ($likes as $like) {
51 $commentIDs[] = $like->objectID
;
55 $commentList = new CommentList();
56 $commentList->getConditionBuilder()->add("comment.commentID IN (?)", array($commentIDs));
57 $commentList->readObjects();
58 $comments = $commentList->getObjects();
60 // group likes by object type id
62 foreach ($likes as $like) {
63 if (isset($comments[$like->objectID
])) {
64 if (!isset($likeData[$comments[$like->objectID
]->objectTypeID
])) {
65 $likeData[$comments[$like->objectID
]->objectTypeID
] = array();
67 $likeData[$comments[$like->objectID
]->objectTypeID
][] = $like;
71 foreach ($likeData as $objectTypeID => $likes) {
72 $objectType = CommentHandler
::getInstance()->getObjectType($objectTypeID);
73 if (CommentHandler
::getInstance()->getCommentManager($objectType->objectType
) instanceof IViewableLikeProvider
) {
74 CommentHandler
::getInstance()->getCommentManager($objectType->objectType
)->prepare($likes);