ReportController.php 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Profile;
  4. use App\Report;
  5. use App\Status;
  6. use App\User;
  7. use Auth;
  8. use Illuminate\Http\Request;
  9. class ReportController extends Controller
  10. {
  11. protected $profile;
  12. public function __construct()
  13. {
  14. $this->middleware('auth');
  15. }
  16. public function showForm(Request $request)
  17. {
  18. $this->validate($request, [
  19. 'type' => 'required|alpha_dash',
  20. 'id' => 'required|integer|min:1',
  21. ]);
  22. return view('report.form');
  23. }
  24. public function notInterestedForm(Request $request)
  25. {
  26. return view('report.not-interested');
  27. }
  28. public function spamForm(Request $request)
  29. {
  30. return view('report.spam');
  31. }
  32. public function spamCommentForm(Request $request)
  33. {
  34. return view('report.spam.comment');
  35. }
  36. public function spamPostForm(Request $request)
  37. {
  38. return view('report.spam.post');
  39. }
  40. public function spamProfileForm(Request $request)
  41. {
  42. return view('report.spam.profile');
  43. }
  44. public function sensitiveCommentForm(Request $request)
  45. {
  46. return view('report.sensitive.comment');
  47. }
  48. public function sensitivePostForm(Request $request)
  49. {
  50. return view('report.sensitive.post');
  51. }
  52. public function sensitiveProfileForm(Request $request)
  53. {
  54. return view('report.sensitive.profile');
  55. }
  56. public function abusiveCommentForm(Request $request)
  57. {
  58. return view('report.abusive.comment');
  59. }
  60. public function abusivePostForm(Request $request)
  61. {
  62. return view('report.abusive.post');
  63. }
  64. public function abusiveProfileForm(Request $request)
  65. {
  66. return view('report.abusive.profile');
  67. }
  68. public function formStore(Request $request)
  69. {
  70. $this->validate($request, [
  71. 'report' => 'required|alpha_dash',
  72. 'type' => 'required|alpha_dash',
  73. 'id' => 'required|integer|min:1',
  74. 'msg' => 'nullable|string|max:150',
  75. ]);
  76. $profile = Auth::user()->profile;
  77. $reportType = $request->input('report');
  78. $object_id = $request->input('id');
  79. $object_type = $request->input('type');
  80. $msg = $request->input('msg');
  81. $object = null;
  82. $types = [
  83. // original 3
  84. 'spam',
  85. 'sensitive',
  86. 'abusive',
  87. // new
  88. 'underage',
  89. 'copyright',
  90. 'impersonation',
  91. 'scam',
  92. 'terrorism'
  93. ];
  94. if (!in_array($reportType, $types)) {
  95. if($request->wantsJson()) {
  96. return abort(400, 'Invalid report type');
  97. } else {
  98. return redirect('/timeline')->with('error', 'Invalid report type');
  99. }
  100. }
  101. switch ($object_type) {
  102. case 'post':
  103. $object = Status::findOrFail($object_id);
  104. $object_type = 'App\Status';
  105. $exists = Report::whereUserId(Auth::id())
  106. ->whereObjectId($object->id)
  107. ->whereObjectType('App\Status')
  108. ->count();
  109. break;
  110. default:
  111. if($request->wantsJson()) {
  112. return abort(400, 'Invalid report type');
  113. } else {
  114. return redirect('/timeline')->with('error', 'Invalid report type');
  115. }
  116. break;
  117. }
  118. if ($exists !== 0) {
  119. if($request->wantsJson()) {
  120. return response()->json(200);
  121. } else {
  122. return redirect('/timeline')->with('error', 'You have already reported this!');
  123. }
  124. }
  125. if ($object->profile_id == $profile->id) {
  126. if($request->wantsJson()) {
  127. return response()->json(200);
  128. } else {
  129. return redirect('/timeline')->with('error', 'You cannot report your own content!');
  130. }
  131. }
  132. $report = new Report();
  133. $report->profile_id = $profile->id;
  134. $report->user_id = Auth::id();
  135. $report->object_id = $object->id;
  136. $report->object_type = $object_type;
  137. $report->reported_profile_id = $object->profile_id;
  138. $report->type = $request->input('report');
  139. $report->message = e($request->input('msg'));
  140. $report->save();
  141. if($request->wantsJson()) {
  142. return response()->json(200);
  143. } else {
  144. return redirect('/timeline')->with('status', 'Report successfully sent!');
  145. }
  146. }
  147. }