-
-
Notifications
You must be signed in to change notification settings - Fork 2k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
207 changed files
with
6,165 additions
and
3,676 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -2,7 +2,7 @@ dist: trusty | |
sudo: false | ||
language: php | ||
php: | ||
- 7.0 | ||
- 7.0.7 | ||
|
||
cache: | ||
directories: | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
<?php namespace BookStack; | ||
|
||
class Comment extends Ownable | ||
{ | ||
protected $fillable = ['text', 'html', 'parent_id']; | ||
protected $appends = ['created', 'updated']; | ||
|
||
/** | ||
* Get the entity that this comment belongs to | ||
* @return \Illuminate\Database\Eloquent\Relations\MorphTo | ||
*/ | ||
public function entity() | ||
{ | ||
return $this->morphTo('entity'); | ||
} | ||
|
||
/** | ||
* Check if a comment has been updated since creation. | ||
* @return bool | ||
*/ | ||
public function isUpdated() | ||
{ | ||
return $this->updated_at->timestamp > $this->created_at->timestamp; | ||
} | ||
|
||
/** | ||
* Get created date as a relative diff. | ||
* @return mixed | ||
*/ | ||
public function getCreatedAttribute() | ||
{ | ||
return $this->created_at->diffForHumans(); | ||
} | ||
|
||
/** | ||
* Get updated date as a relative diff. | ||
* @return mixed | ||
*/ | ||
public function getUpdatedAttribute() | ||
{ | ||
return $this->updated_at->diffForHumans(); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,93 @@ | ||
<?php namespace BookStack\Http\Controllers; | ||
|
||
use Activity; | ||
use BookStack\Repos\CommentRepo; | ||
use BookStack\Repos\EntityRepo; | ||
use Illuminate\Database\Eloquent\ModelNotFoundException; | ||
use Illuminate\Http\Request; | ||
|
||
class CommentController extends Controller | ||
{ | ||
protected $entityRepo; | ||
protected $commentRepo; | ||
|
||
/** | ||
* CommentController constructor. | ||
* @param EntityRepo $entityRepo | ||
* @param CommentRepo $commentRepo | ||
*/ | ||
public function __construct(EntityRepo $entityRepo, CommentRepo $commentRepo) | ||
{ | ||
$this->entityRepo = $entityRepo; | ||
$this->commentRepo = $commentRepo; | ||
parent::__construct(); | ||
} | ||
|
||
/** | ||
* Save a new comment for a Page | ||
* @param Request $request | ||
* @param integer $pageId | ||
* @param null|integer $commentId | ||
* @return \Illuminate\Contracts\Routing\ResponseFactory|\Illuminate\Http\JsonResponse|\Symfony\Component\HttpFoundation\Response | ||
*/ | ||
public function savePageComment(Request $request, $pageId, $commentId = null) | ||
{ | ||
$this->validate($request, [ | ||
'text' => 'required|string', | ||
'html' => 'required|string', | ||
]); | ||
|
||
try { | ||
$page = $this->entityRepo->getById('page', $pageId, true); | ||
} catch (ModelNotFoundException $e) { | ||
return response('Not found', 404); | ||
} | ||
|
||
$this->checkOwnablePermission('page-view', $page); | ||
|
||
// Prevent adding comments to draft pages | ||
if ($page->draft) { | ||
return $this->jsonError(trans('errors.cannot_add_comment_to_draft'), 400); | ||
} | ||
|
||
// Create a new comment. | ||
$this->checkPermission('comment-create-all'); | ||
$comment = $this->commentRepo->create($page, $request->only(['html', 'text', 'parent_id'])); | ||
Activity::add($page, 'commented_on', $page->book->id); | ||
return view('comments/comment', ['comment' => $comment]); | ||
} | ||
|
||
/** | ||
* Update an existing comment. | ||
* @param Request $request | ||
* @param integer $commentId | ||
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View | ||
*/ | ||
public function update(Request $request, $commentId) | ||
{ | ||
$this->validate($request, [ | ||
'text' => 'required|string', | ||
'html' => 'required|string', | ||
]); | ||
|
||
$comment = $this->commentRepo->getById($commentId); | ||
$this->checkOwnablePermission('page-view', $comment->entity); | ||
$this->checkOwnablePermission('comment-update', $comment); | ||
|
||
$comment = $this->commentRepo->update($comment, $request->only(['html', 'text'])); | ||
return view('comments/comment', ['comment' => $comment]); | ||
} | ||
|
||
/** | ||
* Delete a comment from the system. | ||
* @param integer $id | ||
* @return \Illuminate\Http\JsonResponse | ||
*/ | ||
public function destroy($id) | ||
{ | ||
$comment = $this->commentRepo->getById($id); | ||
$this->checkOwnablePermission('comment-delete', $comment); | ||
$this->commentRepo->delete($comment); | ||
return response()->json(['message' => trans('entities.comment_deleted')]); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.