$target->email, 'suspended_by' => Auth::user()->email, 'reason' => $reason ]); if ($type == "on") { $expiryDate = now()->addDays($duration); } $ban = Ban::create([ 'userID' => $target->id, 'reason' => $reason, 'bannedUntil' => ($type == "on") ? $expiryDate->format('Y-m-d H:i:s') : null, 'authorUserID' => Auth::user()->id, 'isPermanent' => ($type == "off") ? true : false ]); return $ban; } /** * Lifts someone's suspension * * @param User $user The user to unsuspend */ public function unsuspend(User $user): void { Log::alert("A suspension has just been lifted.", [ 'target_email' => $user->email, ]); $user->bans->delete(); } /** * Checks whether a user is suspended * * @param User $user The user to check * @return bool Whether the mentioned user is suspended */ public function isSuspended(User $user): bool { return !is_null($user->bans); } /** * Takes a suspension directly and makes it permanent. * * @param Ban $ban The suspension to make permanent */ public function makePermanent(Ban $ban): void { Log::alert('A suspension has just been made permanent.', [ 'target_email' => $ban->user->email ]); $ban->bannedUntil = null; $ban->isPermanent = true; $ban->save(); } /** * Purges old, expired suspensions from the database * * @return bool Whether any suspensions were lifted */ public function purgeExpired() { // Unban on the last day, not on the exact time (with Carbon::now()). return (bool) Ban::whereDate('bannedUntil', '=', Carbon::today())->delete(); } }