| 
									
										
										
										
											2017-01-14 00:15:48 +08:00
										 |  |  | <?php namespace BookStack\Repos; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | use BookStack\Comment; | 
					
						
							| 
									
										
										
										
											2017-04-19 03:51:45 +08:00
										 |  |  | use BookStack\Page; | 
					
						
							| 
									
										
										
										
											2017-01-14 00:15:48 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * Class TagRepo | 
					
						
							|  |  |  |  * @package BookStack\Repos | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | class CommentRepo { | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * | 
					
						
							| 
									
										
										
										
											2017-05-16 03:10:14 +08:00
										 |  |  |      * @var Comment $comment | 
					
						
							| 
									
										
										
										
											2017-01-14 00:15:48 +08:00
										 |  |  |      */ | 
					
						
							|  |  |  |     protected $comment; | 
					
						
							| 
									
										
										
										
											2017-04-19 03:51:45 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     public function __construct(Comment $comment) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $this->comment = $comment; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public function create (Page $page, $data = []) { | 
					
						
							|  |  |  |         $userId = user()->id; | 
					
						
							|  |  |  |         $comment = $this->comment->newInstance(); | 
					
						
							|  |  |  |         $comment->fill($data); | 
					
						
							|  |  |  |         // new comment
 | 
					
						
							|  |  |  |         $comment->page_id = $page->id; | 
					
						
							| 
									
										
										
										
											2017-05-16 03:10:14 +08:00
										 |  |  |         $comment->created_by = $userId; | 
					
						
							| 
									
										
										
										
											2017-05-25 10:32:49 +08:00
										 |  |  |         $comment->updated_at = null; | 
					
						
							| 
									
										
										
										
											2017-04-19 03:51:45 +08:00
										 |  |  |         $comment->save(); | 
					
						
							|  |  |  |         return $comment; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-04 21:22:44 +08:00
										 |  |  |     public function update($comment, $input, $activeOnly = true) { | 
					
						
							| 
									
										
										
										
											2017-04-19 03:51:45 +08:00
										 |  |  |         $userId = user()->id; | 
					
						
							|  |  |  |         $comment->updated_by = $userId; | 
					
						
							|  |  |  |         $comment->fill($input); | 
					
						
							| 
									
										
										
										
											2017-06-04 21:22:44 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |         // only update active comments by default.
 | 
					
						
							|  |  |  |         $whereClause = ['active' => 1]; | 
					
						
							|  |  |  |         if (!$activeOnly) { | 
					
						
							|  |  |  |             $whereClause = []; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         $comment->update($whereClause); | 
					
						
							|  |  |  |         return $comment; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public function delete($comment) { | 
					
						
							| 
									
										
										
										
											2017-06-05 02:50:37 +08:00
										 |  |  |         $comment->text = trans('entities.comment_deleted'); | 
					
						
							|  |  |  |         $comment->html = trans('entities.comment_deleted'); | 
					
						
							| 
									
										
										
										
											2017-06-04 21:22:44 +08:00
										 |  |  |         $comment->active = false; | 
					
						
							|  |  |  |         $userId = user()->id; | 
					
						
							|  |  |  |         $comment->updated_by = $userId; | 
					
						
							| 
									
										
										
										
											2017-04-19 03:51:45 +08:00
										 |  |  |         $comment->save(); | 
					
						
							|  |  |  |         return $comment; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2017-05-16 03:10:14 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-30 11:32:47 +08:00
										 |  |  |     public function getPageComments($pageId) { | 
					
						
							|  |  |  |         $comments = $this->comment->getAllPageComments($pageId); | 
					
						
							|  |  |  |         $index = []; | 
					
						
							|  |  |  |         $totalComments = count($comments); | 
					
						
							| 
									
										
										
										
											2017-06-04 13:47:14 +08:00
										 |  |  |         $finalCommentList = []; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-30 11:32:47 +08:00
										 |  |  |         // normalizing the response.
 | 
					
						
							| 
									
										
										
										
											2017-06-04 13:47:14 +08:00
										 |  |  |         for ($i = 0; $i < count($comments); ++$i) { | 
					
						
							|  |  |  |             $comment = $this->normalizeComment($comments[$i]); | 
					
						
							| 
									
										
										
										
											2017-05-30 11:32:47 +08:00
										 |  |  |             $parentId = $comment->parent_id; | 
					
						
							|  |  |  |             if (empty($parentId)) { | 
					
						
							| 
									
										
										
										
											2017-06-04 13:47:14 +08:00
										 |  |  |                 $finalCommentList[] = $comment; | 
					
						
							| 
									
										
										
										
											2017-05-30 11:32:47 +08:00
										 |  |  |                 $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 [ | 
					
						
							| 
									
										
										
										
											2017-06-04 13:47:14 +08:00
										 |  |  |             'comments' => $finalCommentList, | 
					
						
							| 
									
										
										
										
											2017-05-30 11:32:47 +08:00
										 |  |  |             'total' => $totalComments | 
					
						
							|  |  |  |         ]; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public function getCommentById($commentId) { | 
					
						
							|  |  |  |         return $this->normalizeComment($this->comment->getCommentById($commentId)); | 
					
						
							| 
									
										
										
										
											2017-04-27 05:05:29 +08:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2017-05-16 03:10:14 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-30 11:32:47 +08:00
										 |  |  |     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; | 
					
						
							| 
									
										
										
										
											2017-04-19 03:51:45 +08:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2017-01-14 00:15:48 +08:00
										 |  |  | } |