CommentController.php 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. <?php
  2. namespace App\Http\Controllers;
  3. use Illuminate\Http\Request;
  4. use Auth;
  5. use Cache;
  6. use App\Comment;
  7. use App\Jobs\CommentPipeline\CommentPipeline;
  8. use App\Jobs\StatusPipeline\NewStatusPipeline;
  9. use App\Profile;
  10. use App\Status;
  11. use League\Fractal;
  12. use App\Transformer\Api\StatusTransformer;
  13. use League\Fractal\Serializer\ArraySerializer;
  14. use League\Fractal\Pagination\IlluminatePaginatorAdapter;
  15. class CommentController extends Controller
  16. {
  17. public function show(Request $request, $username, int $id, int $cid)
  18. {
  19. $user = Profile::whereUsername($username)->firstOrFail();
  20. $status = Status::whereProfileId($user->id)->whereInReplyToId($id)->findOrFail($cid);
  21. return view('status.reply', compact('user', 'status'));
  22. }
  23. public function showAll(Request $request, $username, int $id)
  24. {
  25. $user = Profile::whereUsername($username)->firstOrFail();
  26. $status = Status::whereProfileId($user->id)->findOrFail($id);
  27. $replies = Status::whereInReplyToId($id)->paginate(40);
  28. return view('status.comments', compact('user', 'status', 'replies'));
  29. }
  30. public function store(Request $request)
  31. {
  32. if (Auth::check() === false) {
  33. abort(403);
  34. }
  35. $this->validate($request, [
  36. 'item' => 'required|integer',
  37. 'comment' => 'required|string|max:500',
  38. ]);
  39. $comment = $request->input('comment');
  40. $statusId = $request->item;
  41. $user = Auth::user();
  42. $profile = $user->profile;
  43. $status = Status::findOrFail($statusId);
  44. Cache::forget('transform:status:'.$status->url());
  45. $reply = new Status();
  46. $reply->profile_id = $profile->id;
  47. $reply->caption = e($comment);
  48. $reply->rendered = $comment;
  49. $reply->in_reply_to_id = $status->id;
  50. $reply->in_reply_to_profile_id = $status->profile_id;
  51. $reply->save();
  52. NewStatusPipeline::dispatch($reply, false);
  53. CommentPipeline::dispatch($status, $reply);
  54. if ($request->ajax()) {
  55. $fractal = new Fractal\Manager();
  56. $fractal->setSerializer(new ArraySerializer());
  57. $entity = new Fractal\Resource\Item($reply, new StatusTransformer());
  58. $entity = $fractal->createData($entity)->toArray();
  59. $response = [
  60. 'code' => 200,
  61. 'msg' => 'Comment saved',
  62. 'username' => $profile->username,
  63. 'url' => $reply->url(),
  64. 'profile' => $profile->url(),
  65. 'comment' => $reply->caption,
  66. 'entity' => $entity,
  67. ];
  68. } else {
  69. $response = redirect($status->url());
  70. }
  71. return $response;
  72. }
  73. }