ReportController.php 4.7 KB

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