MIF_E31230680/app/Http/Controllers/AccountController.php

89 lines
2.6 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\Pengaturan;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
class AccountController extends Controller
{
/**
* Halaman My Profile
*/
public function profile()
{
$user = Auth::user();
return view('account.profile', compact('user'));
}
/**
* Update Data Profil (Nama, Username, Alamat, & Password)
*/
public function updateProfile(Request $request)
{
$user = Auth::user();
$request->validate([
'nama_lengkap' => 'required|string|max:255',
'username' => 'required|string|alpha_dash|unique:users,username,' . $user->id,
'alamat' => 'nullable|string',
'password_baru' => 'nullable|min:8|confirmed',
], [
'username.unique' => 'Username sudah digunakan.',
'password_baru.confirmed' => 'Konfirmasi password baru tidak cocok.'
]);
// Update data dasar
$user->nama_lengkap = $request->nama_lengkap;
$user->username = $request->username;
$user->alamat = $request->alamat;
// Update password jika diisi
if ($request->filled('password_baru')) {
$user->password = Hash::make($request->password_baru);
}
$user->save();
return back()->with('success', 'Profil Anda berhasil diperbarui!');
}
/**
* Halaman Account Settings (PIN Pakar)
*/
public function settings()
{
$user = Auth::user();
$pinPakar = Pengaturan::where('nama_pengaturan', 'pin_pakar')->first();
return view('account.settings', compact('user', 'pinPakar'));
}
/**
* Update PIN Pakar (Dibatasi hanya untuk Admin)
*/
public function updatePin(Request $request)
{
// Proteksi tambahan: hanya role admin yang boleh ubah PIN
if (Auth::user()->role !== 'admin') {
return back()->with('error', 'Hanya Admin yang dapat mengubah PIN Perbandingan.');
}
$request->validate([
'pin_baru' => 'required|numeric|digits:6',
], [
'pin_baru.digits' => 'PIN harus berupa 6 digit angka.'
]);
// PERBAIKAN: Gunakan updateOrCreate agar otomatis membuat data jika belum ada
Pengaturan::updateOrCreate(
['nama_pengaturan' => 'pin_pakar'], // Kriteria pencarian
['nilai_pengaturan' => $request->pin_baru] // Data yang diisi/diupdate
);
return back()->with('success', 'PIN Keamanan Pakar berhasil diperbarui!');
}
}