| Current Path : /var/www/html/reddsis/app/Http/Controllers/Backend/ |
| 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');
}
}