AdminReportController.php 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. <?php
  2. namespace App\Http\Controllers\Admin;
  3. use App\Report;
  4. use Carbon\Carbon;
  5. use Illuminate\Http\Request;
  6. trait AdminReportController
  7. {
  8. public function updateReport(Request $request, $id)
  9. {
  10. $this->validate($request, [
  11. 'action' => 'required|string',
  12. ]);
  13. $action = $request->input('action');
  14. $actions = [
  15. 'ignore',
  16. 'cw',
  17. 'unlist',
  18. 'delete',
  19. 'shadowban',
  20. 'ban',
  21. ];
  22. if (!in_array($action, $actions)) {
  23. return abort(403);
  24. }
  25. $report = Report::findOrFail($id);
  26. $this->handleReportAction($report, $action);
  27. return response()->json(['msg'=> 'Success']);
  28. }
  29. public function handleReportAction(Report $report, $action)
  30. {
  31. $item = $report->reported();
  32. $report->admin_seen = Carbon::now();
  33. switch ($action) {
  34. case 'ignore':
  35. $report->not_interested = true;
  36. break;
  37. case 'cw':
  38. $item->is_nsfw = true;
  39. $item->save();
  40. $report->nsfw = true;
  41. break;
  42. case 'unlist':
  43. $item->visibility = 'unlisted';
  44. $item->save();
  45. break;
  46. case 'delete':
  47. // Todo: fire delete job
  48. $report->admin_seen = null;
  49. break;
  50. case 'shadowban':
  51. // Todo: fire delete job
  52. $report->admin_seen = null;
  53. break;
  54. case 'ban':
  55. // Todo: fire delete job
  56. $report->admin_seen = null;
  57. break;
  58. default:
  59. $report->admin_seen = null;
  60. break;
  61. }
  62. $report->save();
  63. return $this;
  64. }
  65. protected function actionMap()
  66. {
  67. return [
  68. '1' => 'ignore',
  69. '2' => 'cw',
  70. '3' => 'unlist',
  71. '4' => 'delete',
  72. '5' => 'shadowban',
  73. '6' => 'ban'
  74. ];
  75. }
  76. public function bulkUpdateReport(Request $request)
  77. {
  78. $this->validate($request, [
  79. 'action' => 'required|integer|min:1|max:10',
  80. 'ids' => 'required|array'
  81. ]);
  82. $action = $this->actionMap()[$request->input('action')];
  83. $ids = $request->input('ids');
  84. $reports = Report::whereIn('id', $ids)->whereNull('admin_seen')->get();
  85. foreach($reports as $report) {
  86. $this->handleReportAction($report, $action);
  87. }
  88. $res = [
  89. 'message' => 'Success',
  90. 'code' => 200
  91. ];
  92. return response()->json($res);
  93. }
  94. }