refactor: Refactor user management logic, fix route URL generation in Blade templates, and enhance user action button UI.
This commit is contained in:
parent
6f94cb2a91
commit
f63628e48e
|
|
@ -7,10 +7,6 @@
|
|||
use App\Models\MasterInduk;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use App\Models\User;
|
||||
use App\Models\MasterInduk;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
|
||||
class UserController extends Controller
|
||||
{
|
||||
|
|
@ -38,63 +34,6 @@ public function create()
|
|||
return view('admin.pengguna.create', ['pageTitle' => 'Tambah Pengguna Baru']);
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'nama_lengkap' => 'required|string|max:255',
|
||||
'email' => 'required|email|unique:users,email',
|
||||
'role' => 'required|in:siswa,guru,penjaga perpus',
|
||||
'no_hp' => 'nullable|string|max:20',
|
||||
'password' => 'required|min:6|confirmed',
|
||||
'nomor_induk' => [
|
||||
'required',
|
||||
function ($attribute, $value, $fail) use ($request) {
|
||||
$label = $request->role == 'siswa' ? 'NISN' : 'NIP/NIK';
|
||||
|
||||
// Cek Nisn/Nip sudah dipakai di tabel users
|
||||
$sudahDipakai = User::where('nisn', $value)->orWhere('nip', $value)->exists();
|
||||
if ($sudahDipakai) {
|
||||
$fail("{$label} ini sudah digunakan oleh akun lain.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (in_array($request->role, ['siswa', 'guru'])) {
|
||||
$terdaftar = MasterInduk::where('nomor_induk', $value)
|
||||
->where('role', $request->role)
|
||||
->exists();
|
||||
if (!$terdaftar) {
|
||||
$fail("{$label} tidak terdaftar di data sekolah. Hubungi admin.");
|
||||
}
|
||||
}
|
||||
},
|
||||
],
|
||||
], [
|
||||
'role.in' => 'Pilih role yang valid.',
|
||||
'email.unique' => 'Email sudah terdaftar.',
|
||||
'password.confirmed' => 'Konfirmasi password tidak cocok.'
|
||||
]);
|
||||
|
||||
$user = new User();
|
||||
$user->name = $request->nama_lengkap;
|
||||
$user->email = $request->email;
|
||||
$user->role = $request->role;
|
||||
$user->password = Hash::make($request->password);
|
||||
$user->no_hp = $request->no_hp;
|
||||
|
||||
// Validasi NISN dan NIP berdasarkan Role
|
||||
if ($request->role == 'siswa') {
|
||||
$user->nisn = $request->nomor_induk;
|
||||
$user->kelas = $request->kelas;
|
||||
$user->golongan = $request->golongan;
|
||||
} else {
|
||||
$user->nip = $request->nomor_induk;
|
||||
}
|
||||
|
||||
$user->save();
|
||||
|
||||
return redirect()->route('admin.pengguna.index')->with('success', 'Pengguna berhasil ditambahkan.');
|
||||
}
|
||||
|
||||
public function edit($id)
|
||||
{
|
||||
$pengguna = User::findOrFail($id);
|
||||
|
|
@ -104,77 +43,6 @@ public function edit($id)
|
|||
]);
|
||||
}
|
||||
|
||||
public function update(Request $request, $id)
|
||||
{
|
||||
$request->validate([
|
||||
'nama_lengkap' => 'required|string|max:255',
|
||||
'email' => 'required|email|unique:users,email,' . $id,
|
||||
'role' => 'required|in:siswa,guru,penjaga perpus',
|
||||
'no_hp' => 'nullable|string|max:20',
|
||||
'password' => 'nullable|min:6|confirmed',
|
||||
'nomor_induk' => [
|
||||
'required',
|
||||
function ($attribute, $value, $fail) use ($request, $id) {
|
||||
$label = $request->role == 'siswa' ? 'NISN' : 'NIP/NIK';
|
||||
|
||||
// cek nisn/nip sudah dipakai di tabel users (kecuali oleh dirinya sendiri)
|
||||
$sudahDipakai = User::where(function ($query) use ($value) {
|
||||
$query->where('nisn', $value)->orWhere('nip', $value);
|
||||
})->where('id', '!=', $id)->exists();
|
||||
|
||||
if ($sudahDipakai) {
|
||||
$fail("{$label} ini sudah digunakan oleh akun lain.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (in_array($request->role, ['siswa', 'guru'])) {
|
||||
$terdaftar = MasterInduk::where('nomor_induk', $value)
|
||||
->where('role', $request->role)
|
||||
->exists();
|
||||
if (!$terdaftar) {
|
||||
$fail("{$label} tidak terdaftar di data sekolah. Hubungi admin.");
|
||||
}
|
||||
}
|
||||
},
|
||||
],
|
||||
]);
|
||||
|
||||
$user = User::findOrFail($id);
|
||||
$user->name = $request->nama_lengkap;
|
||||
$user->email = $request->email;
|
||||
$user->role = $request->role;
|
||||
$user->no_hp = $request->no_hp;
|
||||
|
||||
// Jika password diisi, maka update. Jika kosong, biarkan password lama.
|
||||
if ($request->filled('password')) {
|
||||
$user->password = \Illuminate\Support\Facades\Hash::make($request->password);
|
||||
}
|
||||
|
||||
$user->nisn = null;
|
||||
$user->nip = null;
|
||||
$user->kelas = null;
|
||||
$user->golongan = null;
|
||||
|
||||
// Masukkan kembali sesuai role
|
||||
if ($request->role == 'siswa') {
|
||||
$user->nisn = $request->nomor_induk;
|
||||
$user->kelas = $request->kelas;
|
||||
$user->golongan = $request->golongan;
|
||||
} else {
|
||||
$user->nip = $request->nomor_induk;
|
||||
}
|
||||
|
||||
$user->save();
|
||||
|
||||
return redirect()->route('admin.pengguna.index')->with('success', 'Data pengguna berhasil diperbarui.');
|
||||
}
|
||||
|
||||
public function destroy($id)
|
||||
{
|
||||
User::findOrFail($id)->delete();
|
||||
return back()->with('success', 'Pengguna berhasil dihapus.');
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
$validated = $request->validate([
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@
|
|||
use App\Models\Loan;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
||||
class RiwayatController extends Controller
|
||||
{
|
||||
|
|
|
|||
|
|
@ -218,8 +218,7 @@ function(settings, data, dataIndex) {
|
|||
});
|
||||
|
||||
$.ajax({
|
||||
url: '{{ route('
|
||||
admin.denda.sanksi ') }}',
|
||||
url: "{{ route('admin.denda.sanksi') }}",
|
||||
method: 'POST',
|
||||
data: {
|
||||
_token: '{{ csrf_token() }}',
|
||||
|
|
@ -266,8 +265,7 @@ function(settings, data, dataIndex) {
|
|||
});
|
||||
|
||||
$.ajax({
|
||||
url: '{{ route('
|
||||
admin.denda.sanksi ') }}',
|
||||
url: "{{ route('admin.denda.sanksi ') }}",
|
||||
method: 'POST',
|
||||
data: {
|
||||
_token: '{{ csrf_token() }}',
|
||||
|
|
|
|||
|
|
@ -382,8 +382,7 @@ function hitungTotalDenda(modal) {
|
|||
|
||||
function finishTransaction(returnsData, userId, waLink) {
|
||||
$.ajax({
|
||||
url: '{{ route('
|
||||
admin.peminjaman.kembali ') }}',
|
||||
url: "{{ route('admin.peminjaman.kembali ') }}",
|
||||
method: 'POST',
|
||||
data: {
|
||||
_token: '{{ csrf_token() }}',
|
||||
|
|
|
|||
|
|
@ -71,23 +71,26 @@
|
|||
@endif
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<a href="{{ route('admin.pengguna.edit', $user->id) }}"
|
||||
class="btn btn-sm btn-warning">
|
||||
<i class="bi bi-pencil"></i> Edit
|
||||
</a>
|
||||
<div class="d-flex justify-content-center gap-1">
|
||||
<a href="{{ route('admin.pengguna.edit', $user->id) }}"
|
||||
class="btn btn-sm btn-warning" title="Edit Pengguna">
|
||||
<i class="bi bi-pencil"></i>
|
||||
</a>
|
||||
|
||||
<button type="button" class="btn btn-sm btn-secondary btn-reset-password"
|
||||
data-nama="{{ $user->name }}" title="Reset Password (OTP)">
|
||||
<i class="bi bi-key-fill"></i>
|
||||
</button>
|
||||
<button type="button" class="btn btn-sm btn-secondary btn-reset-password"
|
||||
data-nama="{{ $user->name }}" title="Reset Password (OTP)">
|
||||
<i class="bi bi-key-fill"></i>
|
||||
</button>
|
||||
|
||||
<form action="{{ route('admin.pengguna.destroy', $user->id) }}" method="POST"
|
||||
class="d-inline form-delete-user" data-nama="{{ $user->name }}">
|
||||
@csrf
|
||||
@method('DELETE')
|
||||
<button type="button" class="btn btn-sm btn-danger btn-hapus"><i
|
||||
class="bi bi-trash"></i></button>
|
||||
</form>
|
||||
<form action="{{ route('admin.pengguna.destroy', $user->id) }}" method="POST"
|
||||
class="form-delete-user" data-nama="{{ $user->name }}">
|
||||
@csrf
|
||||
@method('DELETE')
|
||||
<button type="button" class="btn btn-sm btn-danger btn-hapus" title="Hapus Pengguna">
|
||||
<i class="bi bi-trash"></i>
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@empty
|
||||
|
|
@ -149,8 +152,7 @@ class="bi bi-trash"></i></button>
|
|||
</td>
|
||||
<td class="text-center">
|
||||
@php
|
||||
$isRegistered = \App\Models\User::where('nisn', $item->nomor_induk)->orWhere('nip',
|
||||
$item->nomor_induk)->exists();
|
||||
$isRegistered = \App\Models\User::where('nomor_induk', $item->nomor_induk)->exists();
|
||||
@endphp
|
||||
@if ($isRegistered)
|
||||
<span class="badge bg-success text-white"><i
|
||||
|
|
@ -161,14 +163,16 @@ class="bi bi-hourglass-split me-1"></i>Belum Daftar</span>
|
|||
@endif
|
||||
</td>
|
||||
<td class="text-center">
|
||||
<form action="{{ route('admin.master-induk.destroy', $item->id) }}" method="POST"
|
||||
class="d-inline form-delete-whitelist" data-induk="{{ $item->nomor_induk }}">
|
||||
@csrf
|
||||
@method('DELETE')
|
||||
<button type="button" class="btn btn-sm btn-outline-danger btn-hapus-whitelist">
|
||||
<i class="bi bi-trash"></i> Hapus
|
||||
</button>
|
||||
</form>
|
||||
<div class="d-flex justify-content-center">
|
||||
<form action="{{ route('admin.master-induk.destroy', $item->id) }}" method="POST"
|
||||
class="form-delete-whitelist" data-induk="{{ $item->nomor_induk }}">
|
||||
@csrf
|
||||
@method('DELETE')
|
||||
<button type="button" class="btn btn-sm btn-outline-danger btn-hapus-whitelist" title="Hapus Data Induk">
|
||||
<i class="bi bi-trash"></i>
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
@empty
|
||||
|
|
|
|||
Loading…
Reference in New Issue