AdminReportController.php 2.8 KB

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