Added detailed list of received/given likes in user profiles
[GitHub/WoltLab/WCF.git] / wcfsetup / install / files / lib / data / comment / LikeableCommentProvider.class.php
1 <?php
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;
8
9 /**
10 * Object type provider for comments
11 *
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
18 */
19 class LikeableCommentProvider extends AbstractObjectTypeProvider implements ILikeObjectTypeProvider, IViewableLikeProvider {
20 /**
21 * @see \wcf\data\object\type\AbstractObjectTypeProvider::$className
22 */
23 public $className = 'wcf\data\comment\Comment';
24
25 /**
26 * @see \wcf\data\object\type\AbstractObjectTypeProvider::$decoratorClassName
27 */
28 public $decoratorClassName = 'wcf\data\comment\LikeableComment';
29
30 /**
31 * @see \wcf\data\object\type\AbstractObjectTypeProvider::$listClassName
32 */
33 public $listClassName = 'wcf\data\comment\CommentList';
34
35 /**
36 * @see \wcf\data\like\ILikeObjectTypeProvider::checkPermissions()
37 */
38 public function checkPermissions(ILikeObject $comment) {
39 if (!$comment->commentID) return false;
40
41 $objectType = CommentHandler::getInstance()->getObjectType($comment->objectTypeID);
42 return CommentHandler::getInstance()->getCommentManager($objectType->objectType)->isAccessible($comment->objectID);
43 }
44
45 /**
46 * @see \wcf\system\like\IViewableLikeProvider::prepare()
47 */
48 public function prepare(array $likes) {
49 $commentIDs = array();
50 foreach ($likes as $like) {
51 $commentIDs[] = $like->objectID;
52 }
53
54 // fetch comments
55 $commentList = new CommentList();
56 $commentList->getConditionBuilder()->add("comment.commentID IN (?)", array($commentIDs));
57 $commentList->readObjects();
58 $comments = $commentList->getObjects();
59
60 // group likes by object type id
61 $likeData = array();
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();
66 }
67 $likeData[$comments[$like->objectID]->objectTypeID][] = $like;
68 }
69 }
70
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);
75 }
76 }
77 }
78 }