Files
pbao9 17b02631e4 Refactor views to use new layout structure and update routes for administrator pages
- Changed view extends from "admin.main" to "administrator.layout.master" across multiple files.
- Updated route names in admin.php and administrator.php to reflect new structure for user, order, invoice, and other management functionalities.
- Adjusted view includes to point to the new directory structure for blocks and components.
- Ensured all permission checks remain intact while refactoring the views.
2026-02-02 10:31:11 +07:00

237 lines
7.1 KiB
PHP

<?php
namespace App\Http\Controllers\admin;
use App\Http\Controllers\Controller;
use App\Models\User;
use Carbon\Carbon;
use Exception;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Spatie\Permission\Models\Role;
class UserController extends Controller
{
public function index()
{
$title = 'Administrators';
$users = User::with('roles')->paginate(15);
return view('administrator.pages.user.index', compact('title', 'users'));
}
public function store(Request $request)
{
$request->validate(
[
'username' => 'required',
'administrator_roles' => 'required',
'firstname' => 'required',
'email' => 'required',
'password' => 'required',
'password_confirm' => 'required',
],
[
'username' => [
'required' => 'Please enter Username'
],
'administrator_roles' => [
'required' => 'Please select roles'
],
'firstname' => [
'required' => 'Please enter your firstname'
],
'email' => [
'required' => 'Please enter your email'
],
'password' => [
'required' => 'Please enter Password'
],
'password_confirm' => [
'required' => 'Please enter Confirm Password'
]
]);
$CheckUsername = User::where('username', $request->username)->first();
if ($CheckUsername) {
return back()->withErrors('Username already exists');
}
$CheckEmail = User::where('email', $request->email)->first();
if ($CheckEmail) {
return back()->withErrors('Email already exists');
}
if ($request->password !== $request->password_confirm) {
return back()->withErrors('Incorrect Confirm Password');
}
$data = [
'firstname' => $request->firstname,
'lastname' => $request->lastname,
'username' => $request->username,
'email' => $request->email,
'password' => Hash::make($request->password),
'email_verified_at' => Carbon::now(),
];
// dd($data);
try {
DB::beginTransaction();
$user = User::create($data);
$user->assignRole($request->administrator_roles);
DB::commit();
} catch (Exception $exception) {
DB::rollBack();
return back()->withErrors($exception->getMessage());
}
return redirect()->route('administrator.pages.user.index')->with('success', 'New account added successfully');
}
public function create()
{
$roles = Role::select('name')->get();
$title = "Add new Administrator";
return view('administrator.pages.user.add', compact('roles', 'title'));
}
public function edit(Request $request)
{
$request->validate(
[
'id' => 'required|numeric|not__in:0'
],
[
'id' => [
'required' => 'Please choose Administrator'
]
]
);
$user = User::with('roles')->find($request->id);
if (!$user) {
return back()->withErrors("Invalidate Request");
}
$roles = Role::select('name')->get();
$title = 'Edit admin information';
return view('administrator.pages.user.edit', compact('user', 'title', 'roles'));
}
public function update(Request $request)
{
$validator = Validator::make($request->all(),
[
'username' => 'required',
'administrator_roles' => 'required',
'firstname' => 'required',
'email' => 'required',
'id' => 'required|numeric|not__in:0'
],
[
'username' => [
'required' => 'Please enter Username'
],
'administrator_roles' => [
'required' => 'Please select roles'
],
'firstname' => [
'required' => 'Please enter your firstname'
],
'email' => [
'required' => 'Please enter your email'
],
'id' => [
'required' => 'Invalidate request'
],
]
);
if ($validator->fails()) {
return back()->withErrors($validator);
}
$user = User::with('roles')->find($request->id);
if (!$user) {
return back()->withErrors('Invalidate request');
}
$data = $request->except(['_token', '_method', 'password', 'password_confirm_2', 'password_confirm', 'id']);
if (!empty($request->password_confirm_2)) {
$validator_2 = Validator::make($request->all(),
[
'password' => 'required',
'password_confirm' => 'required',
],
[
'password.required' => 'Please enter your password',
'password_confirm.required' => 'Please enter password confirm 2'
]
);
if ($validator_2->fails()) {
return back()->withErrors($validator_2);
}
if (!Hash::check($request->password_confirm_2, $user->password)) {
return back()->withErrors("Incorrect password");
}
if (!empty($request->password_confirm) && $request->password_confirm !== $request->password) {
return back()->withErrors("Incorrect Confirm Password");
}
$data['password'] = Hash::make($request->password_confirm);
}
try {
DB::beginTransaction();
$user->update($data);
$user->syncRoles($request->administrator_roles);
DB::commit();
} catch (Exception $error) {
DB::rollBack();
return back()->withErrors($error->getMessage());
}
return back()->with('success', 'Update new information for administrator account success');
}
public function destroy(Request $request)
{
$request->validate(
[
'id' => 'required'
],
[
'id' => [
'required' => 'Please choose Administrator'
]
]
);
$user = User::with('roles')->find($request->id);
if (!$user) {
return back()->withErrors("Invalidate Request");
}
if ((int)$request->id === 1) {
return back()->withErrors("Invalidate Request");
}
$user->removeRole($user->roles->first()->name);
$user->delete();
return back()->with('success', 'Delete success');
}
}