diff --git a/app/Http/Controllers/Admin/GuruController.php b/app/Http/Controllers/Admin/GuruController.php index fc2f1da..cf48abd 100644 --- a/app/Http/Controllers/Admin/GuruController.php +++ b/app/Http/Controllers/Admin/GuruController.php @@ -1,45 +1,68 @@ json(Guru::with('user')->get()); + $guru = Guru::with('user')->get(); + return view('admin.guru.index', compact('guru')); + } + + public function create() + { + $users = User::all(); // misalnya guru punya relasi ke user + return view('admin.guru.create', compact('users')); } public function store(Request $request) + { + $request->validate([ + 'nama' => 'required|string|max:255', + 'bidang' => 'required|string|max:255', + 'alamat' => 'nullable|string', + 'no_hp' => 'nullable|string', +]); + + + Guru::create($request->all()); + return redirect()->route('guru.index')->with('success', 'Guru berhasil ditambahkan'); + } + + public function show($id) + { + $guru = Guru::with('user')->findOrFail($id); + return view('admin.guru.show', compact('guru')); + } + + public function edit($id) + { + $guru = Guru::findOrFail($id); + $users = User::all(); + return view('admin.guru.edit', compact('guru', 'users')); + } + + public function update(Request $request, $id) { $request->validate([ 'user_id' => 'required|exists:users,id', 'bidang' => 'required|string|max:255', ]); - $guru = Guru::create($request->all()); - return response()->json($guru, 201); - } - - public function show($id) - { - $guru = Guru::with('user')->findOrFail($id); - return response()->json($guru); - } - - public function update(Request $request, $id) - { $guru = Guru::findOrFail($id); $guru->update($request->all()); - return response()->json($guru); + + return redirect()->route('guru.index')->with('success', 'Data guru berhasil diperbarui'); } public function destroy($id) { Guru::destroy($id); - return response()->json(['message' => 'Guru deleted']); + return redirect()->route('guru.index')->with('success', 'Guru berhasil dihapus'); } -} \ No newline at end of file +} diff --git a/app/Http/Controllers/Admin/SiswaController.php b/app/Http/Controllers/Admin/SiswaController.php index 2fedb67..a1e155e 100644 --- a/app/Http/Controllers/Admin/SiswaController.php +++ b/app/Http/Controllers/Admin/SiswaController.php @@ -3,61 +3,81 @@ namespace App\Http\Controllers\Admin; use App\Http\Controllers\Controller; -use Illuminate\Http\Request; use App\Models\Siswa; +use App\Models\Kelas; +use App\Models\WaliMurid; +use Illuminate\Http\Request; +use Illuminate\Support\Facades\Storage; class SiswaController extends Controller { public function index() { - return response()->json(Siswa::with(['kelas', 'wali'])->get()); + $siswa = Siswa::with(['kelas','wali'])->paginate(10); + return view('admin.siswa.index', compact('siswa')); } - public function store(SiswaRequest $request) + public function create() { - $siswa = Siswa::create($request->validated()); - - return response()->json([ - 'message' => 'Siswa berhasil ditambahkan', - 'data' => $siswa - ], 201); + $kelas = Kelas::all(); + $wali = WaliMurid::all(); + return view('admin.siswa.create', compact('kelas','wali')); } - public function show($id) + public function store(Request $request) { - $siswa = Siswa::with(['kelas', 'wali'])->findOrFail($id); - - return response()->json($siswa); - } - - public function update(Request $request, $id) -{ - $siswa = Siswa::findOrFail($id); - - $validatedData = $request->validate([ - 'nama' => 'required|string|max:255', - 'nis' => 'required|string|max:50|unique:siswas,nis,' . $id . ',id', - 'tanggal_lahir' => 'required|date', - 'kelas_id' => 'required|exists:kelas,id', - 'wali_id' => 'required|exists:wali_murids,id', // <- pastikan nama tabel wali sesuai - 'foto' => 'nullable|string', - ]); - - $siswa->update($validatedData); - - return response()->json([ - 'message' => 'Siswa berhasil diupdate', - 'data' => $siswa - ], 200); -} - - public function destroy($id) - { - $siswa = Siswa::findOrFail($id); - $siswa->delete(); - - return response()->json([ - 'message' => 'Siswa berhasil dihapus' + $validated = $request->validate([ + 'nama' => 'required|string|max:100', + 'nis' => 'required|string|max:50|unique:siswa,nis', + 'tanggal_lahir' => 'required|date', + 'kelas_id' => 'required|exists:kelas,id', + 'wali_id' => 'required|exists:wali_murid,id', + 'foto' => 'nullable|image|max:2048' ]); + + if ($request->hasFile('foto')) { + $validated['foto'] = $request->file('foto')->store('siswa','public'); + } + + Siswa::create($validated); + return redirect()->route('siswa.index')->with('success','Siswa berhasil ditambahkan'); } -} \ No newline at end of file + + public function edit(Siswa $siswa) + { + $kelas = Kelas::all(); + $wali = WaliMurid::all(); + return view('admin.siswa.edit', compact('siswa','kelas','wali')); + } + + public function update(Request $request, Siswa $siswa) + { + $validated = $request->validate([ + 'nama' => 'required|string|max:100', + 'nis' => 'required|string|max:50|unique:siswa,nis,'.$siswa->id, + 'tanggal_lahir' => 'required|date', + 'kelas_id' => 'required|exists:kelas,id', + 'wali_id' => 'required|exists:wali_murid,id', + 'foto' => 'nullable|image|max:2048' + ]); + + if ($request->hasFile('foto')) { + if ($siswa->foto && Storage::disk('public')->exists($siswa->foto)) { + Storage::disk('public')->delete($siswa->foto); + } + $validated['foto'] = $request->file('foto')->store('siswa','public'); + } + + $siswa->update($validated); + return redirect()->route('siswa.index')->with('success','Siswa berhasil diupdate'); + } + + public function destroy(Siswa $siswa) + { + if ($siswa->foto && Storage::disk('public')->exists($siswa->foto)) { + Storage::disk('public')->delete($siswa->foto); + } + $siswa->delete(); + return redirect()->route('siswa.index')->with('success','Siswa berhasil dihapus'); + } +} diff --git a/app/Http/Controllers/Admin/WaliMuridController.php b/app/Http/Controllers/Admin/WaliMuridController.php index e870ac8..85a46bd 100644 --- a/app/Http/Controllers/Admin/WaliMuridController.php +++ b/app/Http/Controllers/Admin/WaliMuridController.php @@ -3,44 +3,64 @@ namespace App\Http\Controllers\Admin; use App\Http\Controllers\Controller; -use Illuminate\Http\Request; use App\Models\WaliMurid; +use App\Models\User; +use Illuminate\Http\Request; class WaliMuridController extends Controller { public function index() { - return response()->json(WaliMurid::with('user')->get()); + // ambil semua wali murid + user terkait + $wali = WaliMurid::with('user')->get(); + return view('admin.wali.index', compact('wali')); + } + + public function create() + { + // ambil data user untuk dropdown (jika sudah punya akun) + $users = User::where('role', 'wali')->get(); + return view('admin.wali.create', compact('users')); } public function store(Request $request) { $request->validate([ - 'user_id' => 'required|exists:users,id', - 'alamat' => 'nullable|string', - 'pekerjaan' => 'nullable|string', + 'nama' => 'required|string|max:255', + 'alamat' => 'nullable|string', + 'lokasi_lat' => 'nullable|numeric', + 'lokasi_lng' => 'nullable|numeric', ]); - $wali = WaliMurid::create($request->all()); - return response()->json($wali, 201); + WaliMurid::create($request->all()); + + return redirect()->route('wali.index')->with('success', 'Wali Murid berhasil ditambahkan'); } - public function show($id) + public function edit(WaliMurid $wali) { - $wali = WaliMurid::with('user')->findOrFail($id); - return response()->json($wali); + $users = User::where('role', 'wali')->get(); + return view('admin.wali.edit', compact('wali', 'users')); } - public function update(Request $request, $id) + public function update(Request $request, WaliMurid $wali) { - $wali = WaliMurid::findOrFail($id); + $request->validate([ + 'nama' => 'required|string|max:255', + 'alamat' => 'nullable|string', + 'lokasi_lat' => 'nullable|numeric', + 'lokasi_lng' => 'nullable|numeric', + ]); + $wali->update($request->all()); - return response()->json($wali); + + return redirect()->route('wali.index')->with('success', 'Wali Murid berhasil diperbarui'); } - public function destroy($id) + public function destroy(WaliMurid $wali) { - WaliMurid::destroy($id); - return response()->json(['message' => 'Wali Murid deleted']); + $wali->delete(); + + return redirect()->route('wali.index')->with('success', 'Wali Murid berhasil dihapus'); } -} \ No newline at end of file +} diff --git a/app/Http/Controllers/AuthController.php b/app/Http/Controllers/AuthController.php index 88c89bb..2f65b08 100644 --- a/app/Http/Controllers/AuthController.php +++ b/app/Http/Controllers/AuthController.php @@ -32,4 +32,11 @@ public function login(Request $request) // kalau email atau password salah return back()->with('error', 'Username atau password salah!'); } +public function logout(Request $request) +{ + Auth::logout(); + $request->session()->invalidate(); + $request->session()->regenerateToken(); + return redirect('/login'); +} } \ No newline at end of file diff --git a/resources/views/admin/guru/create.blade.php b/resources/views/admin/guru/create.blade.php new file mode 100644 index 0000000..268705b --- /dev/null +++ b/resources/views/admin/guru/create.blade.php @@ -0,0 +1,45 @@ +@extends('layouts.app') + +@section('content') +
+

➕ Tambah Guru

+ +
+ @csrf +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + + Batal + +
+
+
+@endsection diff --git a/resources/views/admin/guru/edit.blade.php b/resources/views/admin/guru/edit.blade.php new file mode 100644 index 0000000..57b8e42 --- /dev/null +++ b/resources/views/admin/guru/edit.blade.php @@ -0,0 +1,51 @@ +@extends('layouts.app') + +@section('content') +
+

✏️ Edit Guru

+ +
+ @csrf + @method('PUT') + +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + + Batal + +
+
+
+@endsection diff --git a/resources/views/admin/guru/index.blade.php b/resources/views/admin/guru/index.blade.php new file mode 100644 index 0000000..7544cb3 --- /dev/null +++ b/resources/views/admin/guru/index.blade.php @@ -0,0 +1,55 @@ +@extends('layouts.app') + +@section('content') +
+
+

👨‍🏫 Data Guru

+ + + Tambah Guru + +
+ + + + + + + + + + + + + + @forelse ($guru as $i => $item) + + + + + + + + + @empty + + + + @endforelse + +
#NamaBidangTeleponAlamatAksi
{{ $i+1 }}{{ $item->nama ?? '-' }}{{ $item->bidang ?? '-' }}{{ $item->telepon ?? '-' }}{{ $item->alamat ?? '-' }} + + Edit + +
+ @csrf + @method('DELETE') + +
+
Belum ada data guru
+
+@endsection diff --git a/resources/views/admin/siswa/create.blade.php b/resources/views/admin/siswa/create.blade.php new file mode 100644 index 0000000..8f7f7a0 --- /dev/null +++ b/resources/views/admin/siswa/create.blade.php @@ -0,0 +1,56 @@ +@extends('layouts.app') + +@section('content') +
+

➕ Tambah Peserta Didik

+ +
+ @csrf + +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ Batal + +
+
+
+@endsection diff --git a/resources/views/admin/siswa/edit.blade.php b/resources/views/admin/siswa/edit.blade.php new file mode 100644 index 0000000..52e00f1 --- /dev/null +++ b/resources/views/admin/siswa/edit.blade.php @@ -0,0 +1,68 @@ +@extends('layouts.app') + +@section('content') +
+

✏️ Edit Peserta Didik

+ +
+ @csrf + @method('PUT') + +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + @if($siswa->foto) +
+ +
+ @endif + +

Kosongkan jika tidak ingin mengubah foto

+
+ +
+ Batal + +
+
+
+@endsection diff --git a/resources/views/admin/siswa/index.blade.php b/resources/views/admin/siswa/index.blade.php new file mode 100644 index 0000000..1faa8a7 --- /dev/null +++ b/resources/views/admin/siswa/index.blade.php @@ -0,0 +1,64 @@ +@extends('layouts.app') + +@section('content') +
+
+

📚 Data Peserta Didik

+ + + Tambah Siswa + +
+ + + + + + + + + + + + + + + @forelse ($siswa as $i => $item) + + + + + + + + + + @empty + + + + @endforelse + +
#NamaNISKelasWali MuridFotoAksi
{{ $i+1 }}{{ $item->nama }}{{ $item->nis }}{{ $item->kelas->nama ?? '-' }}{{ $item->wali->nama ?? '-' }} + @if($item->foto) + + @else + - + @endif + + + Edit + +
+ @csrf + @method('DELETE') + +
+
Belum ada data siswa
+
+@endsection diff --git a/resources/views/admin/wali/create.blade.php b/resources/views/admin/wali/create.blade.php new file mode 100644 index 0000000..7b8830d --- /dev/null +++ b/resources/views/admin/wali/create.blade.php @@ -0,0 +1,33 @@ +@extends('layouts.app') + +@section('content') +
+

Tambah Wali Murid

+ +
+ @csrf +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ + + Batal +
+
+@endsection diff --git a/resources/views/admin/wali/edit.blade.php b/resources/views/admin/wali/edit.blade.php new file mode 100644 index 0000000..96953b9 --- /dev/null +++ b/resources/views/admin/wali/edit.blade.php @@ -0,0 +1,33 @@ +@extends('layouts.app') + +@section('content') +
+

Edit Wali Murid

+ +
+ @csrf @method('PUT') +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ + + Batal +
+
+@endsection diff --git a/resources/views/admin/wali/index.blade.php b/resources/views/admin/wali/index.blade.php new file mode 100644 index 0000000..03d2900 --- /dev/null +++ b/resources/views/admin/wali/index.blade.php @@ -0,0 +1,55 @@ +@extends('layouts.app') + +@section('content') +
+
+

👪 Data Wali Murid

+ + + Tambah Wali Murid + +
+ + + + + + + + + + + + + @forelse ($wali as $i => $item) + + + + + + + + @empty + + + + @endforelse + +
#NamaAlamatLokasi (Lat, Lng)Aksi
{{ $i+1 }}{{ $item->nama ?? '-' }}{{ $item->alamat ?? '-' }} + {{ $item->lokasi_lat ?? '-' }}, {{ $item->lokasi_lng ?? '-' }} + + + Edit + +
+ @csrf + @method('DELETE') + +
+
Belum ada data wali murid
+
+@endsection diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php index 273371e..9edc95c 100644 --- a/resources/views/layouts/app.blade.php +++ b/resources/views/layouts/app.blade.php @@ -20,9 +20,9 @@

Data Master

diff --git a/routes/api.php b/routes/api.php index a7e4278..614bc78 100644 --- a/routes/api.php +++ b/routes/api.php @@ -20,7 +20,26 @@ // pilih salah satu (saya sarankan pakai apiResource biar singkat) Route::apiResource('kelas', KelasController::class); - Route::apiResource('guru', GuruController::class); - Route::apiResource('wali', WaliMuridController::class); - Route::apiResource('siswa', SiswaController::class); + Route::apiResource('guru', GuruController::class)->names([ + 'index' => 'api.guru.index', + 'show' => 'api.guru.show', + 'store' => 'api.guru.store', + 'update' => 'api.guru.update', + 'destroy' => 'api.guru.destroy', + ]); + Route::apiResource('wali', WaliMuridController::class)->names([ + 'index' => 'api.wali.index', + 'show' => 'api.wali.show', + 'store' => 'api.wali.store', + 'update' => 'api.wali.update', + 'destroy' => 'api.wali.destroy', + ]); + Route::apiResource('siswa', SiswaController::class)->names([ + 'index' => 'api.siswa.index', + 'show' => 'api.siswa.show', + 'store' => 'api.siswa.store', + 'update' => 'api.siswa.update', + 'destroy' => 'api.siswa.destroy', + ]); + }); \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index 01e7493..a605b56 100644 --- a/routes/web.php +++ b/routes/web.php @@ -3,6 +3,9 @@ use Illuminate\Support\Facades\Route; use App\Http\Controllers\AuthController; use App\Http\Controllers\DashboardController; +use App\Http\Controllers\Admin\GuruController; +use App\Http\Controllers\Admin\WaliMuridController; +use App\Http\Controllers\Admin\SiswaController; // Login routes Route::get('/login', [AuthController::class, 'showLogin'])->name('login'); @@ -17,4 +20,10 @@ // Hanya bisa diakses setelah login Route::middleware('auth')->group(function () { Route::get('/dashboard', [DashboardController::class, 'index'])->name('dashboard'); -}); + +Route::prefix('admin')->group(function () { + Route::resource('guru', GuruController::class); + Route::resource('wali', WaliMuridController::class); + Route::resource('siswa', SiswaController::class); + }); +}); \ No newline at end of file