Your IP : 216.73.216.79


Current Path : /var/www/html/reddsis/app/Http/Controllers/Backend/
Upload File :
Current File : /var/www/html/reddsis/app/Http/Controllers/Backend/BackendUserController.php

<?php

namespace App\Http\Controllers\Backend;

use App\Http\Controllers\Controller;
use App\Http\Requests\Backend\UserRequest;
use App\Models\Backend\BackendUser;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Storage;
use Spatie\Permission\Models\Role;
// use Illuminate\Auth\Events\Registered;

class BackendUserController extends Controller
{
    /**
     * Display a listing of the resource.
     */
    public function index(Request $request)
    {
        $search = $request->get('search');

        $backendUsers = BackendUser::with('roles')
            ->leftJoin('model_has_roles', function ($join) {
                $join->on('backend_users.id', '=', 'model_has_roles.model_id')
                    ->where('model_has_roles.model_type', '=', BackendUser::class);
            })
            ->leftJoin('roles', 'model_has_roles.role_id', '=', 'roles.id')
            ->select('backend_users.*')
            ->selectRaw('MAX(CASE WHEN roles.name = ? THEN 1 ELSE 0 END) as is_super_admin', ['super-admin'])
            ->when($search, function ($q) use ($search) {
                $q->where(function ($sub) use ($search) {
                    $sub->where('backend_users.username', 'like', "%{$search}%")
                        ->orWhere('backend_users.email', 'like', "%{$search}%")
                        ->orWhere('backend_users.first_name', 'like', "%{$search}%")
                        ->orWhere('backend_users.last_name', 'like', "%{$search}%");
                });
            })
            ->groupBy('backend_users.id')
            ->orderByDesc('is_super_admin')
            ->orderBy('backend_users.created_at', 'desc')
            ->paginate(10)->onEachSide(1)->withQueryString();

        return view(
            'backend.module.backendUser.index',
            [
                'backendUsers' => $backendUsers,
                'search' => $search,
            ]
        );
    }

    /**
     * Show the form for creating a new resource.
     */
    public function create()
    {
        $roles = Role::query()->where('guard_name', 'admin')->orderBy('name')->get();

        return view(
            'backend.module.backendUser.create',
            [
                'roles' => $roles,
            ]
        );
    }

    /**
     * Store a newly created resource in storage.
     */
    public function store(UserRequest $request)
    {
        // Validation is automatically handled by UserRequest

        $user = BackendUser::create([
            'username' => $request->username,
            'email' => $request->email,
            'password' => Hash::make($request->password),
            'first_name' => $request->first_name,
            'last_name' => $request->last_name,
            'is_active' => $request->is_active ?? 1,
        ]);

        if ($request->hasFile('profile_picture')) {
            $path = $request->file('profile_picture')->store('profile_pictures/backend', 'public');
            $user->update(['profile_picture' => $path]);
        }

        $user->syncRoles($request->input('roles', []));

        // OPTIONAL: send verification email
        if ($request->send_verification_email) {
            $user->sendEmailVerificationNotification();
        }

        flash()->success('Backend User created successfully!');

        return redirect()->route('backend-user.index');
    }

    /**
     * Display the specified resource.
     */
    public function show($id)
    {
        $backendUsers = BackendUser::findOrFail($id);

        return view(
            'backend.module.backendUser.show',
            [
                'backendUsers' => $backendUsers
            ]
        );
    }

    /**
     * Show the form for editing the specified resource.
     */
    public function edit($id)
    {
        $backendUsers = BackendUser::findOrFail($id);
        $roles = Role::query()->where('guard_name', 'admin')->orderBy('name')->get();

        return view(
            'backend.module.backendUser.edit',
            [
                'backendUsers' => $backendUsers,
                'roles' => $roles,
            ]
        );
    }

    /**
     * Update the specified resource in storage.
     */
    public function update(UserRequest $request, $id)
    {
        $backendUsers = BackendUser::findOrFail($id);

        $data = [
            'username' => $request->username,
            'email' => $request->email,
            'first_name' => $request->first_name,
            'last_name' => $request->last_name,
            'is_active' => $request->is_active ?? $backendUsers->is_active,
        ];

        if ($request->filled('password')) {
            $data['password'] = Hash::make($request->password);
        }

        if ($request->hasFile('profile_picture')) {
            if ($backendUsers->profile_picture) {
                Storage::disk('public')->delete($backendUsers->profile_picture);
            }
            $data['profile_picture'] = $request->file('profile_picture')->store('profile_pictures/backend', 'public');
        }

        $backendUsers->update($data);
        $backendUsers->syncRoles($request->input('roles', []));

        flash()->success('Backend User updated successfully!');

        return redirect()->route('backend-user.index');
    }

    /**
     * Remove the specified resource from storage.
     */
    public function destroy($id)
    {
        $backendUsers = BackendUser::findOrFail($id);
        $backendUsers->delete();

        flash()->success('Backend User deleted successfully.');

        return redirect()->route('backend-user.index');
    }

    /**
     * Show profile edit form for the currently authenticated admin user
     */
    public function editProfile()
    {
        $user = auth()->guard('admin')->user();
        return view('backend.profile.edit', [
            'user' => $user,
        ]);
    }

    /**
     * Update the profile of the currently authenticated admin user
     */
    public function updateProfile(Request $request)
    {
        $user = auth()->guard('admin')->user();

        $request->validate([
            'username' => 'required|string|max:255|unique:backend_users,username,' . $user->id,
            'email' => 'required|email|unique:backend_users,email,' . $user->id,
            'first_name' => 'required|string',
            'last_name' => 'required|string',
            'password' => 'nullable|min:6',
            'profile_picture' => 'nullable|image|max:2048',
        ]);

        $data = [
            'username' => $request->username,
            'email' => $request->email,
            'first_name' => $request->first_name,
            'last_name' => $request->last_name,
        ];

        if ($request->filled('password')) {
            $data['password'] = Hash::make($request->password);
        }

        if ($request->hasFile('profile_picture')) {
            if ($user->profile_picture) {
                Storage::disk('public')->delete($user->profile_picture);
            }
            $data['profile_picture'] = $request->file('profile_picture')->store('profile_pictures/backend', 'public');
        }

        $user->update($data);

        flash()->success('Profile updated successfully!');

        return redirect()->route('admin.home');
    }
}