AdminController.php 5.44 KB
<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Models\Employer;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;

class AdminController extends Controller
{
    /**
     * Handle the incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function __invoke(Request $request)
    {
        //
    }

    public function register() {
       return view('admin.register');
    }

    public function create(Request $request) {

       $rules = [
            'name' => 'required|string|max:255',
            'email' => 'required|string|email|max:255|unique:users',
            'password' => 'required|string|min:8|confirmed',
        ];

        $messages = [
            'required' => 'Укажите обязательное поле «:attribute»',
            'confirmed' => 'Пароли не совпадают',
            'email' => 'Введите корректный email',
            'min' => [
                'string' => 'Поле «:attribute» должно быть не меньше :min символов',
                'file' => 'Файл «:attribute» должен быть не меньше :min Кбайт'
            ],
            'max' => [
                'string' => 'Поле «:attribute» должно быть не больше :max символов',
                'file' => 'Файл «:attribute» должен быть не больше :max Кбайт'
            ],
        ];

        $validator = Validator::make($request->all(), $rules, $messages);

        if ($validator->fails()) {
            return back()->withErrors($validator)->withInput();                    //->route('admin.register')

        } else {
            $params = $request->all();

            User::create([
                'name' => $request->name,
                'email' => $request->email,
                'password' => Hash::make($request->password),
            ]);
            return redirect()
                ->route('admin.login')
                ->with('success', 'Вы успешно зарегистрировались');
        }
    }

    public function login() {
       return view('admin.login');
    }

    // Аутентификация
    public function autenticate(Request $request) {
        //$request->validate(
        $rules = [
            'email' => 'required|string|email',
            'password' => 'required|string',
        ];

        $messages = [
            'required' => 'Укажите обязательное поле «:attribute»',
            'email' => 'Введите корректный email',
            'min' => [
                'string' => 'Поле «:attribute» должно быть не меньше :min символов',
                'file' => 'Файл «:attribute» должен быть не меньше :min Кбайт'
            ],
            'max' => [
                'string' => 'Поле «:attribute» должно быть не больше :max символов',
                'file' => 'Файл «:attribute» должен быть не больше :max Кбайт'
            ],
        ];


        $validator = Validator::make($request->all(), $rules, $messages);

        if ($validator->fails()) {
            return back()->withErrors($validator)->withInput();

        } else {

            $credentials = $request->only('email', 'password');

            if (Auth::attempt($credentials, $request->has('remember'))) {

                if (is_null(Auth::user()->email_verified_at)) {
                    Auth::logout();
                    return back()->withErrors('Адрес почты не подтвержден')->withInput();
                }

                if (!Auth::user()->admin) {
                    Auth::logout();
                    return //redirect()->route('admin.login')
                        back()->withErrors('Вы не являетесь админом!')->withInput();;

                }

                return redirect()
                    ->route('admin.index')
                    ->with('success', 'Вы вошли в личный кабинет.');
            }
        }

        return redirect()
            ->route('admin.login')
            ->withErrors('Неверный логин или пароль!')->withInput();

    }

    public function logout() {
        Auth::logout();
        return redirect()->route('index')
            ->with('success', 'Вы вышли из личного кабинета');
    }

    public function index() {
        $all_user = User::query()->count();
        $all_employer = User::where('is_worker', '0')->count();
        $all_worker = User::where('is_worker', '1')->count();
        $all_admin = User::where('admin', '1')->count();
        return view('admin.index', compact('all_employer', 'all_user', 'all_worker', 'all_admin'));
    }

    public function index_admin(Request $request) {
        if ($request->ajax()) {
            $user = User::find($request->id);
            $request->offsetUnset('id');
            $user->update($request->all());
        }

        $users = User::where('admin', '1')->paginate(15);

        if ($request->ajax()) {
            return view('admin.users.index_ajax', compact('users'));
        } else {
            return view('admin.users.index', compact('users'));
        }
    }

}