siakad-itm/app/Http/Controllers/Admin/Settings/ProfileController.php
Yoga Pangestu 70d37741ef
Some checks failed
tests / ci (pull_request) Has been cancelled
Refactor admin settings structure and implement profile and security management
- Moved profile and security settings from the general settings route to a dedicated admin settings route.
- Created new components and pages for managing user profile and security settings.
- Updated user menu to link to the new admin settings pages.
- Removed old settings pages and routes that are no longer in use.
- Added tests for profile and security settings functionality.
2026-08-25 17:57:47 +07:00

112 lines
3.2 KiB
PHP

<?php
namespace App\Http\Controllers\Admin\Settings;
use App\Http\Controllers\Controller;
use App\Http\Requests\Admin\Settings\ProfileDeleteRequest;
use App\Http\Requests\Admin\Settings\ProfileUpdateRequest;
use App\Models\User;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Inertia\Inertia;
use Inertia\Response;
class ProfileController extends Controller
{
/**
* Show the user's profile settings page.
*/
public function edit(Request $request): Response
{
$user = $request->user();
[$role, $roleData] = match (true) {
$user->hasRole('mahasiswa') => $this->studentRoleData($user),
$user->hasRole('dosen') => $this->lecturerRoleData($user),
default => $this->administratorRoleData($user),
};
return Inertia::render('admin/settings/profile', [
'mustVerifyEmail' => $user instanceof MustVerifyEmail,
'status' => $request->session()->get('status'),
'profile' => $user->profile,
'role' => $role,
'roleData' => $roleData,
]);
}
/**
* Update the user's profile information.
*/
public function update(ProfileUpdateRequest $request): RedirectResponse
{
$user = $request->user();
$user->fill($request->safe()->only(['username', 'email']));
if ($user->isDirty('email')) {
$user->email_verified_at = null;
}
$user->save();
$user->profile()->updateOrCreate([], $request->safe()->only([
'full_name', 'phone_number', 'address', 'gender', 'birth_date', 'birth_place',
]));
Inertia::flash('toast', ['type' => 'success', 'message' => 'Profil berhasil diperbarui.']);
return to_route('admin.settings.profile.edit');
}
/**
* Delete the user's profile.
*/
public function destroy(ProfileDeleteRequest $request): RedirectResponse
{
$user = $request->user();
Auth::logout();
$user->delete();
$request->session()->invalidate();
$request->session()->regenerateToken();
return redirect('/');
}
private function studentRoleData(User $user): array
{
$user->load(['profile', 'student.department', 'student.academicAdvisor.user.profile']);
return ['mahasiswa', $user->student ? [
'student_number' => $user->student->student_number,
'department' => $user->student->department?->name,
'enrollment_year' => $user->student->enrollment_year,
'academic_advisor' => $user->student->academicAdvisor?->user?->profile?->full_name,
] : null];
}
private function lecturerRoleData(User $user): array
{
$user->load(['profile', 'lecturer.department']);
return ['dosen', $user->lecturer ? [
'lecturer_number' => $user->lecturer->lecturer_number,
'department' => $user->lecturer->department?->name,
] : null];
}
private function administratorRoleData(User $user): array
{
$user->load(['profile', 'roles']);
return ['admin', [
'roles' => $user->roles->pluck('name')->all(),
]];
}
}