class CommentRepo {
/**
*
- * @var Comment $comment
+ * @var Comment $comment
*/
protected $comment;
$comment->fill($data);
// new comment
$comment->page_id = $page->id;
- $comment->created_by = $userId;
+ $comment->created_by = $userId;
+ $comment->updated_at = null;
$comment->save();
return $comment;
}
- public function update($comment, $input) {
+ public function update($comment, $input, $activeOnly = true) {
$userId = user()->id;
$comment->updated_by = $userId;
$comment->fill($input);
+
+ // only update active comments by default.
+ $whereClause = ['active' => 1];
+ if (!$activeOnly) {
+ $whereClause = [];
+ }
+ $comment->update($whereClause);
+ return $comment;
+ }
+
+ public function delete($comment) {
+ $comment->text = trans('entities.comment_deleted');
+ $comment->html = trans('entities.comment_deleted');
+ $comment->active = false;
+ $userId = user()->id;
+ $comment->updated_by = $userId;
$comment->save();
return $comment;
}
-
- public function getCommentsForPage($pageId, $commentId, $count = 20) {
- if (empty($commentId)) {
- // requesting parent comments
- $query = $this->comment->getParentCommentsByPage($pageId);
- return $query->paginate($count);
- } else {
- // requesting the child comments.
- return Comment::whereRaw("page_id = $pageId AND parent_id = $commentId")->get();
- }
+
+ public function getPageComments($pageId) {
+ $comments = $this->comment->getAllPageComments($pageId);
+ $index = [];
+ $totalComments = count($comments);
+ $finalCommentList = [];
+
+ // normalizing the response.
+ for ($i = 0; $i < count($comments); ++$i) {
+ $comment = $this->normalizeComment($comments[$i]);
+ $parentId = $comment->parent_id;
+ if (empty($parentId)) {
+ $finalCommentList[] = $comment;
+ $index[$comment->id] = $comment;
+ continue;
+ }
+
+ if (empty($index[$parentId])) {
+ // weird condition should not happen.
+ continue;
+ }
+ if (empty($index[$parentId]->sub_comments)) {
+ $index[$parentId]->sub_comments = [];
+ }
+ array_push($index[$parentId]->sub_comments, $comment);
+ $index[$comment->id] = $comment;
+ }
+ return [
+ 'comments' => $finalCommentList,
+ 'total' => $totalComments
+ ];
+ }
+
+ public function getCommentById($commentId) {
+ return $this->normalizeComment($this->comment->getCommentById($commentId));
+ }
+
+ private function normalizeComment($comment) {
+ if (empty($comment)) {
+ return;
+ }
+ $comment->createdBy->avatar_url = $comment->createdBy->getAvatar(50);
+ $comment->createdBy->profile_url = $comment->createdBy->getProfileUrl();
+ if (!empty($comment->updatedBy)) {
+ $comment->updatedBy->profile_url = $comment->updatedBy->getProfileUrl();
+ }
+ return $comment;
}
}
\ No newline at end of file