1
0

AdminReportController.php 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  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. Cache::forget('profiles:private');
  48. break;
  49. case 'delete':
  50. // Todo: fire delete job
  51. $report->admin_seen = null;
  52. break;
  53. case 'shadowban':
  54. // Todo: fire delete job
  55. $report->admin_seen = null;
  56. break;
  57. case 'ban':
  58. // Todo: fire delete job
  59. $report->admin_seen = null;
  60. break;
  61. default:
  62. $report->admin_seen = null;
  63. break;
  64. }
  65. $report->save();
  66. return $this;
  67. }
  68. protected function actionMap()
  69. {
  70. return [
  71. '1' => 'ignore',
  72. '2' => 'cw',
  73. '3' => 'unlist',
  74. '4' => 'delete',
  75. '5' => 'shadowban',
  76. '6' => 'ban'
  77. ];
  78. }
  79. public function bulkUpdateReport(Request $request)
  80. {
  81. $this->validate($request, [
  82. 'action' => 'required|integer|min:1|max:10',
  83. 'ids' => 'required|array'
  84. ]);
  85. $action = $this->actionMap()[$request->input('action')];
  86. $ids = $request->input('ids');
  87. $reports = Report::whereIn('id', $ids)->whereNull('admin_seen')->get();
  88. foreach($reports as $report) {
  89. $this->handleReportAction($report, $action);
  90. }
  91. $res = [
  92. 'message' => 'Success',
  93. 'code' => 200
  94. ];
  95. return response()->json($res);
  96. }
  97. }