123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 |
- <?php
- namespace App\Http\Controllers\Admin;
- use Cache;
- use App\Report;
- use App\User;
- use Carbon\Carbon;
- use Illuminate\Http\Request;
- use Illuminate\Support\Facades\Redis;
- use App\Services\AccountService;
- use App\Services\StatusService;
- trait AdminReportController
- {
- public function updateReport(Request $request, $id)
- {
- $this->validate($request, [
- 'action' => 'required|string',
- ]);
- $action = $request->input('action');
- $actions = [
- 'ignore',
- 'cw',
- 'unlist',
- 'delete',
- 'shadowban',
- 'ban',
- ];
- if (!in_array($action, $actions)) {
- return abort(403);
- }
- $report = Report::findOrFail($id);
- $this->handleReportAction($report, $action);
- Cache::forget('admin-dash:reports:list-cache');
- return response()->json(['msg'=> 'Success']);
- }
- public function handleReportAction(Report $report, $action)
- {
- $item = $report->reported();
- $report->admin_seen = Carbon::now();
- switch ($action) {
- case 'ignore':
- $report->not_interested = true;
- break;
- case 'cw':
- Cache::forget('status:thumb:'.$item->id);
- $item->is_nsfw = true;
- $item->save();
- $report->nsfw = true;
- StatusService::del($item->id);
- break;
- case 'unlist':
- $item->visibility = 'unlisted';
- $item->save();
- Cache::forget('profiles:private');
- StatusService::del($item->id);
- break;
- case 'delete':
- // Todo: fire delete job
- $report->admin_seen = null;
- StatusService::del($item->id);
- break;
- case 'shadowban':
- // Todo: fire delete job
- $report->admin_seen = null;
- break;
- case 'ban':
- // Todo: fire delete job
- $report->admin_seen = null;
- break;
- default:
- $report->admin_seen = null;
- break;
- }
- $report->save();
- return $this;
- }
- protected function actionMap()
- {
- return [
- '1' => 'ignore',
- '2' => 'cw',
- '3' => 'unlist',
- '4' => 'delete',
- '5' => 'shadowban',
- '6' => 'ban'
- ];
- }
- public function bulkUpdateReport(Request $request)
- {
- $this->validate($request, [
- 'action' => 'required|integer|min:1|max:10',
- 'ids' => 'required|array'
- ]);
- $action = $this->actionMap()[$request->input('action')];
- $ids = $request->input('ids');
- $reports = Report::whereIn('id', $ids)->whereNull('admin_seen')->get();
- foreach($reports as $report) {
- $this->handleReportAction($report, $action);
- }
- $res = [
- 'message' => 'Success',
- 'code' => 200
- ];
- return response()->json($res);
- }
- public function reportMailVerifications(Request $request)
- {
- $ids = Redis::smembers('email:manual');
- $ignored = Redis::smembers('email:manual-ignored');
- $reports = [];
- if($ids) {
- $reports = collect($ids)
- ->filter(function($id) use($ignored) {
- return !in_array($id, $ignored);
- })
- ->map(function($id) {
- $account = AccountService::get($id);
- $user = User::whereProfileId($id)->first();
- if(!$user) {
- return [];
- }
- $account['email'] = $user->email;
- return $account;
- })
- ->filter(function($res) {
- return isset($res['id']);
- })
- ->values();
- }
- return view('admin.reports.mail_verification', compact('reports', 'ignored'));
- }
- public function reportMailVerifyIgnore(Request $request)
- {
- $id = $request->input('id');
- Redis::sadd('email:manual-ignored', $id);
- return redirect('/i/admin/reports');
- }
- public function reportMailVerifyApprove(Request $request)
- {
- $id = $request->input('id');
- $user = User::whereProfileId($id)->firstOrFail();
- Redis::srem('email:manual', $id);
- Redis::srem('email:manual-ignored', $id);
- $user->email_verified_at = now();
- $user->save();
- return redirect('/i/admin/reports');
- }
- public function reportMailVerifyClearIgnored(Request $request)
- {
- Redis::del('email:manual-ignored');
- return [200];
- }
- }
|