diff --git a/app/Http/Controllers/Admin/AdminReportController.php b/app/Http/Controllers/Admin/AdminReportController.php index acfa1739..8b4c9d0d 100644 --- a/app/Http/Controllers/Admin/AdminReportController.php +++ b/app/Http/Controllers/Admin/AdminReportController.php @@ -22,6 +22,8 @@ use App\{ }; use Illuminate\Validation\Rule; use App\Services\StoryService; +use App\Services\ModLogService; +use App\Jobs\DeletePipeline\DeleteAccountPipeline; trait AdminReportController { @@ -243,7 +245,7 @@ trait AdminReportController public function updateSpam(Request $request, $id) { $this->validate($request, [ - 'action' => 'required|in:dismiss,approve,dismiss-all,approve-all' + 'action' => 'required|in:dismiss,approve,dismiss-all,approve-all,delete-account' ]); $action = $request->input('action'); @@ -257,6 +259,41 @@ trait AdminReportController Cache::forget('admin-dash:reports:spam-count:total'); Cache::forget('admin-dash:reports:spam-count:30d'); + if($action == 'delete-account') { + if(config('pixelfed.account_deletion') == false) { + abort(404); + } + + $user = User::findOrFail($appeal->user_id); + $profile = $user->profile; + + if($user->is_admin == true) { + $mid = $request->user()->id; + abort_if($user->id < $mid, 403); + } + + $ts = now()->addMonth(); + $user->status = 'delete'; + $profile->status = 'delete'; + $user->delete_after = $ts; + $profile->delete_after = $ts; + $user->save(); + $profile->save(); + + ModLogService::boot() + ->objectUid($user->id) + ->objectId($user->id) + ->objectType('App\User::class') + ->user($request->user()) + ->action('admin.user.delete') + ->accessLevel('admin') + ->save(); + + Cache::forget('profiles:private'); + DeleteAccountPipeline::dispatch($user)->onQueue('high'); + return; + } + if($action == 'dismiss') { $appeal->is_spam = true; $appeal->appeal_handled_at = $now; diff --git a/resources/views/admin/reports/show_spam.blade.php b/resources/views/admin/reports/show_spam.blade.php index 970f881e..c001b39a 100644 --- a/resources/views/admin/reports/show_spam.blade.php +++ b/resources/views/admin/reports/show_spam.blade.php @@ -48,7 +48,8 @@
- + + @endif
@@ -105,6 +106,12 @@ return; } break; + + case 'delete-account': + if(!window.confirm('Are you sure you want to delete this account?')) { + return; + } + break; } axios.post(window.location.href, {