. */ namespace App\Http\Controllers; use App\Ban; use App\Events\UserBannedEvent; use App\Http\Requests\BanUserRequest; use App\User; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; class BanController extends Controller { public function insert(BanUserRequest $request, User $user) { $this->authorize('create', [Ban::class, $user]); // FIXME: Needs refactoring to a simpler format, e.g. parse the user's given date directly. if (is_null($user->bans)) { $reason = $request->reason; $duration = strtolower($request->durationOperator); $durationOperand = $request->durationOperand; $expiryDate = now(); if (! empty($duration)) { switch ($duration) { case 'days': $expiryDate->addDays($durationOperand); break; case 'weeks': $expiryDate->addWeeks($durationOperand); break; case 'months': $expiryDate->addMonths($durationOperand); break; case 'years': $expiryDate->addYears($durationOperand); break; } } else { // Essentially permanent $expiryDate->addYears(40); } $ban = Ban::create([ 'userID' => $user->id, 'reason' => $reason, 'bannedUntil' => $expiryDate->format('Y-m-d H:i:s'), 'userAgent' => 'Unknown', 'authorUserID' => Auth::user()->id, ]); event(new UserBannedEvent($user, $ban)); $request->session()->flash('success', __('Account suspended. Suspension ID #:susId', ['susId', $ban->id])); } else { $request->session()->flash('error', __('Account already suspended!')); } return redirect()->back(); } public function delete(Request $request, User $user) { $this->authorize('delete', $user->bans); if (! is_null($user->bans)) { $user->bans->delete(); $request->session()->flash('success', __('User unsuspended successfully!')); } else { $request->session()->flash('error', __('This user isn\'t suspended!')); } return redirect()->back(); } }