View file app/Controllers/User/BanController.php

File size: 2.48Kb
<?php

namespace App\Controllers\User;

use App\Classes\Validator;
use App\Controllers\BaseController;
use App\Models\Banhist;
use App\Models\User;
use Illuminate\Http\Request;

class BanController extends BaseController
{
    /**
     * Бан пользователя
     *
     * @param Request   $request
     * @param Validator $validator
     * @return string
     */
    public function ban(Request $request, Validator $validator): string
    {
        if (! $user = getUser()) {
            abort(403, 'Вы не авторизованы!');
        }

        if ($user->level !== User::BANNED) {
            abort('default', 'Вы не забанены или срок бана истек!');
        }

        if ($user->timeban <= SITETIME) {

            $user->update([
                'level'   => User::USER,
                'timeban' => 0,
            ]);

            setFlash('success', 'Поздравляем! Время вашего бана истекло!');
            redirect('/');
        }

        $banhist = Banhist::query()
            ->where('user_id', $user->id)
            ->whereIn('type', ['ban', 'change'])
            ->orderBy('created_at', 'desc')
            ->first();

        if ($banhist && $request->isMethod('post')) {
            $msg = check($request->input('msg'));

            $sendUser = getUserById($banhist->send_user_id);

            $validator
                ->true(setting('addbansend'), 'Писать объяснительные запрещено администрацией!')
                ->true($banhist->explain, 'Ошибка! Вы уже писали объяснение!')
                ->true($sendUser->id, 'Пользователь который вас забанил не найден!')
                ->length($msg, 5, 1000, ['text' => 'Слишком длинное или короткое объяснение!']);

            if ($validator->isValid()) {

                $message = 'Объяснение нарушения: '.antimat($msg);

                $sendUser->sendMessage($user, $message);

                $banhist->update([
                    'explain' => 0
                ]);

                setFlash('success', 'Объяснение успешно отправлено!');
                redirect('/ban');
            } else {
                setInput($request->all());
                setFlash('danger', $validator->getErrors());
            }
        }

        return view('users/bans', compact('user', 'banhist'));
    }
}