MIF_31230115/manajemen_mp/app/Http/Controllers/ProfileController.php

111 lines
3.6 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Storage;
class ProfileController extends Controller
{
/**
* Menampilkan form profil anggota yang sedang login.
*/
public function edit()
{
// Mengambil data anggota yang berelasi dengan User yang sedang login
$anggota = Auth::user()->anggota;
if (!$anggota) {
return redirect()->back()->with('error', 'Data profil tidak ditemukan.');
}
return view('profil.edit', compact('anggota'));
}
/**
* Menyimpan perubahan data yang diperbaiki anggota.
*/
public function update(Request $request)
{
$anggota = Auth::user()->anggota;
// 1. Validasi input, tambahkan validasi untuk foto
$request->validate([
'nama_lengkap' => 'required|string|max:255',
'no_hp' => 'required|numeric',
'tempat_lahir' => 'required|string',
'tgl_lahir' => 'required|date',
'jenis_kelamin' => 'required|in:L,P',
'alamat' => 'required|string',
'foto_profil' => 'nullable|image|mimes:jpeg,png,jpg|max:2048', // Maksimal 2MB
]);
// 2. Ambil data teks
$input = $request->only([
'nama_lengkap',
'no_hp',
'tempat_lahir',
'tgl_lahir',
'jenis_kelamin',
'alamat'
]);
// 3. Logika Upload Foto
if ($request->hasFile('foto_profil')) {
// Jika anggota sudah punya foto sebelumnya, hapus file lamanya dari storage
if ($anggota->foto_profil && Storage::disk('public')->exists($anggota->foto_profil)) {
Storage::disk('public')->delete($anggota->foto_profil);
}
// Simpan foto baru ke folder 'profil_images' di dalam storage/app/public
$path = $request->file('foto_profil')->store('profil_images', 'public');
// Masukkan path foto baru ke dalam array input untuk disimpan ke database
$input['foto_profil'] = $path;
}
// 4. Update data ke database
$anggota->update($input);
// Update nama di tabel users agar sinkron
Auth::user()->update([
'name' => $request->nama_lengkap
]);
return redirect()->route('profile.edit')->with('success', 'Profil Anda berhasil diperbarui!');
}
/**
* Menyimpan perubahan password (FUNGSI BARU).
*/
public function updatePassword(Request $request)
{
// 1. Validasi input
// 'confirmed' akan otomatis mencocokkan input 'password' dengan 'password_confirmation'
$request->validate([
'current_password' => 'required',
'password' => 'required|min:8|confirmed',
], [
'password.confirmed' => 'Konfirmasi password baru tidak cocok!',
'password.min' => 'Password minimal harus 8 karakter!'
]);
$user = Auth::user();
// 2. Cek apakah password lama yang dimasukkan benar
if (!Hash::check($request->current_password, $user->password)) {
// Jika salah, kembalikan ke halaman profil dengan pesan error
return back()->withErrors(['current_password' => 'Password saat ini salah.']);
}
// 3. Jika benar, update dengan password baru yang di-hash (enkripsi)
$user->update([
'password' => Hash::make($request->password)
]);
return redirect()->route('profile.edit')->with('success', 'Password berhasil diperbarui!');
}
}