From a71d652e8d19f7e25c64867377de9d07e56ef264 Mon Sep 17 00:00:00 2001 From: RetasyaSalsabila Date: Thu, 12 Feb 2026 14:11:25 +0700 Subject: [PATCH] login guru (undone) --- .../Controllers/Guru/DashboardController.php | 36 +++ app/Http/Controllers/Guru/GuruController.php | 29 ++ app/Http/Controllers/Guru/KelasController.php | 29 ++ app/Http/Controllers/Guru/LoginController.php | 48 +++ .../Controllers/Guru/ProfilController.php | 42 +++ app/Http/Controllers/Guru/SiswaController.php | 38 +++ app/Http/Middleware/Authenticate.php | 27 +- app/Models/Guru.php | 16 +- config/auth.php | 6 +- resources/views/auth/landing-page.blade.php | 1 + resources/views/auth/login-guru.blade.php | 2 +- resources/views/guru/dashboard.blade.php | 29 ++ resources/views/guru/guru/index.blade.php | 125 ++++++++ resources/views/guru/kelas/index.blade.php | 126 ++++++++ resources/views/guru/layouts/app.blade.php | 294 ++++++++++++++++++ resources/views/guru/profil/index.blade.php | 82 +++++ resources/views/guru/siswa/index.blade.php | 142 +++++++++ routes/web.php | 39 ++- 18 files changed, 1079 insertions(+), 32 deletions(-) create mode 100644 app/Http/Controllers/Guru/DashboardController.php create mode 100644 app/Http/Controllers/Guru/GuruController.php create mode 100644 app/Http/Controllers/Guru/KelasController.php create mode 100644 app/Http/Controllers/Guru/LoginController.php create mode 100644 app/Http/Controllers/Guru/ProfilController.php create mode 100644 app/Http/Controllers/Guru/SiswaController.php create mode 100644 resources/views/guru/dashboard.blade.php create mode 100644 resources/views/guru/guru/index.blade.php create mode 100644 resources/views/guru/kelas/index.blade.php create mode 100644 resources/views/guru/layouts/app.blade.php create mode 100644 resources/views/guru/profil/index.blade.php create mode 100644 resources/views/guru/siswa/index.blade.php diff --git a/app/Http/Controllers/Guru/DashboardController.php b/app/Http/Controllers/Guru/DashboardController.php new file mode 100644 index 0000000..84a76f9 --- /dev/null +++ b/app/Http/Controllers/Guru/DashboardController.php @@ -0,0 +1,36 @@ +user(); + + // Hitung total kelas yang diajar + $totalKelas = Mengajar::where('nip', $guru->nip) + ->distinct('id_kelas') + ->count('id_kelas'); + + // Hitung total mapel yang diajar + $totalMapel = Mengajar::where('nip', $guru->nip) + ->distinct('id_mapel') + ->count('id_mapel'); + + // Hitung total siswa yang diajar (lewat kelas) + $totalSiswa = Mengajar::where('nip', $guru->nip) + ->with('kelas.siswa') + ->get() + ->pluck('kelas.siswa') + ->flatten() + ->unique('nisn') + ->count(); + + return view('guru.dashboard', compact('totalKelas', 'totalMapel', 'totalSiswa')); + } +} diff --git a/app/Http/Controllers/Guru/GuruController.php b/app/Http/Controllers/Guru/GuruController.php new file mode 100644 index 0000000..658ba7d --- /dev/null +++ b/app/Http/Controllers/Guru/GuruController.php @@ -0,0 +1,29 @@ +has('search')) { + $search = $request->search; + $query->where('nama', 'like', "%$search%") + ->orWhere('nip', 'like', "%$search%"); + } + + // SHOW PER PAGE + $perPage = $request->get('perPage', 10); + + $gurus = $query->paginate($perPage)->appends($request->all()); + + return view('guru.guru.index', compact('gurus')); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/Guru/KelasController.php b/app/Http/Controllers/Guru/KelasController.php new file mode 100644 index 0000000..a68308f --- /dev/null +++ b/app/Http/Controllers/Guru/KelasController.php @@ -0,0 +1,29 @@ +has('search')) { + $search = $request->search; + $query->where('nama_kelas', 'like', "%$search%") + ->orWhere('id_kelas', 'like', "%$search%"); + } + + // SHOW PER PAGE + $perPage = $request->get('perPage', 10); + + $kelass = $query->paginate($perPage)->appends($request->all()); + + return view('guru.kelas.index', compact('kelass')); + } +} diff --git a/app/Http/Controllers/Guru/LoginController.php b/app/Http/Controllers/Guru/LoginController.php new file mode 100644 index 0000000..858eb70 --- /dev/null +++ b/app/Http/Controllers/Guru/LoginController.php @@ -0,0 +1,48 @@ +validate([ + 'nip' => 'required', + 'password' => 'required', + ]); + + $credentials = $request->only('nip', 'password'); + + if (Auth::guard('guru')->attempt($credentials)) { + $request->session()->regenerate(); + + return redirect()->intended(route('guru.dashboard')); + } + + return back()->withErrors([ + 'nip' => 'NIP atau password salah' + ])->withInput($request->except('password')); + } + + public function logout(Request $request) + { + Auth::guard('guru')->logout(); + + $request->session()->invalidate(); + $request->session()->regenerateToken(); + + return redirect()->route('guru.login'); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/Guru/ProfilController.php b/app/Http/Controllers/Guru/ProfilController.php new file mode 100644 index 0000000..b9ce187 --- /dev/null +++ b/app/Http/Controllers/Guru/ProfilController.php @@ -0,0 +1,42 @@ +user(); + return view('guru.profil.show', compact('guru')); + } + + public function update(Request $request) + { + $guru = Auth::guard('guru')->user(); + + $validated = $request->validate([ + 'nama' => 'required|string|max:100', + 'password' => 'nullable|string|min:6|confirmed', + ], [ + 'nama.required' => 'Nama wajib diisi', + 'password.min' => 'Password minimal 6 karakter', + 'password.confirmed' => 'Konfirmasi password tidak cocok', + ]); + + $guru->nama = $validated['nama']; + + if ($request->filled('password')) { + $guru->password = Hash::make($validated['password']); + } + + $guru->save(); + + return redirect()->route('guru.profil.show') + ->with('success', 'Profil berhasil diupdate!'); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/Guru/SiswaController.php b/app/Http/Controllers/Guru/SiswaController.php new file mode 100644 index 0000000..f340636 --- /dev/null +++ b/app/Http/Controllers/Guru/SiswaController.php @@ -0,0 +1,38 @@ +has('search')) { + $search = $request->search; + $query->where('nama', 'like', "%$search%") + ->orWhere('nisn', 'like', "%$search%"); + } + + // FILTER BY KELAS + if ($request->has('filter_kelas') && $request->filter_kelas != '') { + $query->where('id_kelas', $request->filter_kelas); + } + + // SHOW PER PAGE + $perPage = $request->get('perPage', 10); + + $siswas = $query->paginate($perPage)->appends($request->all()); + + // Ambil semua kelas untuk dropdown filter + $kelass = Kelas::orderBy('tingkat')->orderBy('nama_kelas')->get(); + + return view('guru.siswa.index', compact('siswas', 'kelass')); + } +} \ No newline at end of file diff --git a/app/Http/Middleware/Authenticate.php b/app/Http/Middleware/Authenticate.php index 2d7d726..3d13e1b 100644 --- a/app/Http/Middleware/Authenticate.php +++ b/app/Http/Middleware/Authenticate.php @@ -9,18 +9,21 @@ class Authenticate extends Middleware /** * Tentukan ke mana redirect jika user belum login. */ - protected function redirectTo($request): ?string - { - if (! $request->expectsJson()) { - // Cek guard admin dulu - if ($request->is('admin/*')) { - return route('admin.login'); - } - - // Default kalau bukan admin (misalnya guru/siswa) - return route('login'); + protected function redirectTo($request): ?string{ + if (! $request->expectsJson()) { + // Admin + if ($request->is('admin/*')) { + return route('admin.login'); } - return null; + // Guru + if ($request->is('guru/*')) { + return route('guru.login'); + } + + // Default + return route('login'); } -} + + return null; +}} diff --git a/app/Models/Guru.php b/app/Models/Guru.php index 1a94554..e6ffd1c 100644 --- a/app/Models/Guru.php +++ b/app/Models/Guru.php @@ -2,16 +2,16 @@ namespace App\Models; -use Illuminate\Database\Eloquent\Model; +use Illuminate\Foundation\Auth\User as Authenticatable; +use Illuminate\Database\Eloquent\Factories\HasFactory; -class Guru extends Model +class Guru extends Authenticatable { + use HasFactory; + protected $table = 'gurus'; - protected $primaryKey = 'nip'; - public $incrementing = false; - protected $keyType = 'string'; protected $fillable = [ @@ -23,4 +23,10 @@ class Guru extends Model protected $hidden = [ 'password', ]; + + // Relasi ke Mengajar + public function mengajars() + { + return $this->hasMany(Mengajar::class, 'nip', 'nip'); + } } \ No newline at end of file diff --git a/config/auth.php b/config/auth.php index 40c5a3f..12d1a8b 100644 --- a/config/auth.php +++ b/config/auth.php @@ -46,11 +46,11 @@ ], 'guru' => [ 'driver' => 'session', - 'provider' => 'guru', + 'provider' => 'gurus', ], 'siswa' => [ 'driver' => 'session', - 'provider' => 'siswa', + 'provider' => 'siswas', ], ], @@ -81,7 +81,7 @@ 'driver' => 'eloquent', 'model' => App\Models\Admin::class, ], - 'guru' => [ + 'gurus' => [ 'driver' => 'eloquent', 'model' => App\Models\Guru::class, ], diff --git a/resources/views/auth/landing-page.blade.php b/resources/views/auth/landing-page.blade.php index 8c1e9b5..1f7b688 100644 --- a/resources/views/auth/landing-page.blade.php +++ b/resources/views/auth/landing-page.blade.php @@ -7,5 +7,6 @@

Selamat Datang di Website Kami

Ini halaman landing sederhana. Silakan pilih login sesuai role kamu.

Login Admin + Login Guru @endsection diff --git a/resources/views/auth/login-guru.blade.php b/resources/views/auth/login-guru.blade.php index f00e041..23fa545 100644 --- a/resources/views/auth/login-guru.blade.php +++ b/resources/views/auth/login-guru.blade.php @@ -11,7 +11,7 @@ ← Kembali ke Landing Page -
+ @csrf
diff --git a/resources/views/guru/dashboard.blade.php b/resources/views/guru/dashboard.blade.php new file mode 100644 index 0000000..8ff72fe --- /dev/null +++ b/resources/views/guru/dashboard.blade.php @@ -0,0 +1,29 @@ +@extends('guru.layouts.app') + +@section('title', 'Dashboard Guru') + +@section('content') +
+

Dashboard Guru

+ +
+
+
+
+
Total Guru
+

12

+
+
+
+ +
+
+
+
Total Siswa
+

230

+
+
+
+
+
+@endsection diff --git a/resources/views/guru/guru/index.blade.php b/resources/views/guru/guru/index.blade.php new file mode 100644 index 0000000..444d416 --- /dev/null +++ b/resources/views/guru/guru/index.blade.php @@ -0,0 +1,125 @@ +@extends('guru.layouts.app') + +@section('title', 'Daftar Guru') + +@section('content') + + + +

DAFTAR GURU

+ +
+ +
+ +
+ 📖 Mode Hanya Lihat (Read Only) +
+ + + + + +
+ +
+ Tampilkan + + + + data + + +
+ + + + + + + + + + + + @forelse($gurus as $index => $guru) + + + + + + + @empty + + + + @endforelse + +
NoNIPNama Guru
{{ $gurus->firstItem() + $index }}{{ $guru->nip }}{{ $guru->nama }}
Belum ada data guru
+ +
+ {{ $gurus->links() }} +
+ +
+ +@endsection + diff --git a/resources/views/guru/kelas/index.blade.php b/resources/views/guru/kelas/index.blade.php new file mode 100644 index 0000000..c4a6fa4 --- /dev/null +++ b/resources/views/guru/kelas/index.blade.php @@ -0,0 +1,126 @@ +@extends('guru.layouts.app') + +@section('title', 'Daftar Kelas') + +@section('content') + + + +

DAFTAR KELAS

+ +
+ +
+ +
+ 📖 Mode Hanya Lihat (Read Only) +
+ +
+ +
+ +
+ +
+ Tampilkan + + + + data + + +
+ + + + + + + + + + + + + @forelse($kelass as $index => $kelas) + + + + + + + + @empty + + + + @endforelse + +
NoID KelasNama KelasTingkat
{{ $kelass->firstItem() + $index }}{{ $kelas->id_kelas }}{{ $kelas->nama_kelas }}{{ $kelas->tingkat }}
Belum ada data kelas
+ +
+ {{ $kelass->links() }} +
+ +
+ +@endsection diff --git a/resources/views/guru/layouts/app.blade.php b/resources/views/guru/layouts/app.blade.php new file mode 100644 index 0000000..163660e --- /dev/null +++ b/resources/views/guru/layouts/app.blade.php @@ -0,0 +1,294 @@ + + + + + + + + @yield('title', 'Panel Guru') + + + + + + + + + +
+ + + + + +
+ + +
+
+ 👋 Hai, {{ Auth::guard('guru')->user()->nama ?? 'Guru' }} +
+ +
+ Notification + Profile +
+
+ + +
+ @yield('content') +
+ +
+
+ + + + + + + + +@extends('guru.layouts.app') + +@section('title', 'Dashboard Guru') + +@section('content') + + + +

DASHBOARD GURU

+ +
+

Selamat Datang, {{ Auth::guard('guru')->user()->nama }}! 👨‍🏫

+

NIP: {{ Auth::guard('guru')->user()->nip }}

+
+ +
+
+
+
{{ $totalKelas }}
+
Total Kelas Diampu
+
+
+ +
+
+
{{ $totalMapel }}
+
Total Mata Pelajaran
+
+
+ +
+
+
{{ $totalSiswa }}
+
Total Siswa Diajar
+
+
+
+ +@endsection \ No newline at end of file diff --git a/resources/views/guru/profil/index.blade.php b/resources/views/guru/profil/index.blade.php new file mode 100644 index 0000000..e9b987d --- /dev/null +++ b/resources/views/guru/profil/index.blade.php @@ -0,0 +1,82 @@ +@extends('guru.layouts.app') + +@section('title', 'Profil Saya') + +@section('content') + + + +

PROFIL SAYA

+ +
+ + {{-- Alert Success --}} + @if(session('success')) + + @endif + +
+ @csrf + @method('PUT') + +
+ + + NIP tidak dapat diubah +
+ +
+ + + @error('nama') + {{ $message }} + @enderror +
+ +
+ + + @error('password') + {{ $message }} + @enderror +
+ +
+ + + Isi hanya jika ingin mengubah password +
+ +
+ +
+ +
+ +
+ +@endsection \ No newline at end of file diff --git a/resources/views/guru/siswa/index.blade.php b/resources/views/guru/siswa/index.blade.php new file mode 100644 index 0000000..fab3066 --- /dev/null +++ b/resources/views/guru/siswa/index.blade.php @@ -0,0 +1,142 @@ +@extends('guru.layouts.app') + +@section('title', 'Daftar Siswa') + +@section('content') + + + +

DAFTAR SISWA

+ +
+ +
+ +
+ 📖 Mode Hanya Lihat (Read Only) +
+ +
+ +
+ +
+ +
+ Tampilkan + + + + data + + Filter Kelas + + + + +
+ + + + + + + + + + + + + + + @forelse($siswas as $index => $siswa) + + + + + + + + + + @empty + + + + @endforelse + +
NoNISNNamaTempat LahirTanggal LahirKelas
{{ $siswas->firstItem() + $index }}{{ $siswa->nisn }}{{ $siswa->nama }}{{ $siswa->tempat_lahir }}{{ \Carbon\Carbon::parse($siswa->tanggal_lahir)->format('d M Y') }}{{ $siswa->kelas->tingkat }} - {{ $siswa->kelas->nama_kelas }}
Belum ada data siswa
+ +
+ {{ $siswas->links() }} +
+ +
+ +@endsection \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index bb5d751..4ea5c6c 100644 --- a/routes/web.php +++ b/routes/web.php @@ -11,12 +11,14 @@ use App\Http\Controllers\Admin\SiswaController; use App\Http\Controllers\Admin\MapelController; -// use App\Http\Controllers\GuruController; -// use App\Http\Controllers\SiswaController; -// use App\Http\Controllers\KelasController; -// use App\Http\Controllers\MapelController; -use App\Http\Controllers\ChallengeController; -use App\Http\Controllers\LeaderboardController; +use App\Http\Controllers\Guru\GuruLoginController; +use App\Http\Controllers\Guru\DashboardController; +use App\Http\Controllers\Guru\GuruGuruController; +use App\Http\Controllers\Guru\GuruSiswaController; +use App\Http\Controllers\Guru\GuruKelasController; +use App\Http\Controllers\Guru\GuruMapelController; +use App\Http\Controllers\Guru\GuruLeaderboardController; +use App\Http\Controllers\Guru\GuruProfilController; // ==================== // LANDING PAGE @@ -117,12 +119,27 @@ // ======================================================= // GURU AREA // ======================================================= -Route::middleware(['auth:guru'])->group(function () { - Route::get('/guru/dashboard', function () { - return view('guru.dashboard'); - })->name('guru.dashboard'); -}); +Route::middleware(['auth:guru'])->prefix('guru')->name('guru.')->group(function () { + Route::get('/dashboard', [DashboardController::class, 'index']) + ->name('dashboard'); + + // Daftar Guru (Read Only) + Route::get('/daftar-guru', [GuruGuruController::class, 'index'])->name('guru.index'); + + // Daftar Kelas (Read Only) + Route::get('/daftar-kelas', [GuruKelasController::class, 'index'])->name('kelas.index'); + + // Daftar Siswa (Read Only) + Route::get('/daftar-siswa', [GuruSiswaController::class, 'index'])->name('siswa.index'); + + // Profil (Edit) + Route::get('/profil', [GuruProfilController::class, 'show'])->name('profil.show'); + Route::put('/profil', [GuruProfilController::class, 'update'])->name('profil.update'); + + // LOGOUT GURU + Route::post('/logout', [GuruLoginController::class, 'logout'])->name('logout'); +}); // ======================================================= // SISWA AREA