diff --git a/app/Http/Controllers/Guru/DashboardController.php b/app/Http/Controllers/Guru/DashboardController.php index 84a76f9..1307187 100644 --- a/app/Http/Controllers/Guru/DashboardController.php +++ b/app/Http/Controllers/Guru/DashboardController.php @@ -4,6 +4,9 @@ use App\Http\Controllers\Controller; use App\Models\Mengajar; +use App\Models\Guru; +use App\Models\Kelas; +use App\Models\Siswa; use Illuminate\Support\Facades\Auth; class DashboardController extends Controller @@ -12,25 +15,32 @@ public function index() { $guru = Auth::guard('guru')->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(); + // Cek table mengajars ada data atau enggak + try { + // 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) + $kelasIds = Mengajar::where('nip', $guru->nip) + ->pluck('id_kelas') + ->unique(); + + $totalSiswa = Siswa::whereIn('id_kelas', $kelasIds)->count(); + + } catch (\Exception $e) { + // Kalau error (table kosong atau relasi belum ada), set default 0 + $totalKelas = 0; + $totalMapel = 0; + $totalSiswa = 0; + } return view('guru.dashboard', compact('totalKelas', 'totalMapel', 'totalSiswa')); } -} +} \ No newline at end of file diff --git a/app/Http/Controllers/Guru/GuruController.php b/app/Http/Controllers/Guru/GuruController.php index 658ba7d..13c2d11 100644 --- a/app/Http/Controllers/Guru/GuruController.php +++ b/app/Http/Controllers/Guru/GuruController.php @@ -26,4 +26,4 @@ public function index(Request $request) return view('guru.guru.index', compact('gurus')); } -} \ No newline at end of file +} diff --git a/app/Http/Controllers/Guru/LoginController.php b/app/Http/Controllers/Guru/LoginController.php index 858eb70..70babd2 100644 --- a/app/Http/Controllers/Guru/LoginController.php +++ b/app/Http/Controllers/Guru/LoginController.php @@ -1,7 +1,4 @@ validate([ 'nip' => 'required', @@ -36,6 +35,7 @@ public function loginGuru(Request $request) ])->withInput($request->except('password')); } + // Logout public function logout(Request $request) { Auth::guard('guru')->logout(); diff --git a/app/Http/Controllers/Guru/SiswaController.php b/app/Http/Controllers/Guru/SiswaController.php index f340636..c99439a 100644 --- a/app/Http/Controllers/Guru/SiswaController.php +++ b/app/Http/Controllers/Guru/SiswaController.php @@ -35,4 +35,4 @@ public function index(Request $request) return view('guru.siswa.index', compact('siswas', 'kelass')); } -} \ No newline at end of file +} diff --git a/app/Models/Guru.php b/app/Models/Guru.php index e6ffd1c..046252b 100644 --- a/app/Models/Guru.php +++ b/app/Models/Guru.php @@ -29,4 +29,4 @@ public function mengajars() { return $this->hasMany(Mengajar::class, 'nip', 'nip'); } -} \ No newline at end of file +} diff --git a/app/Models/Kelas.php b/app/Models/Kelas.php index 1d56693..b310993 100644 --- a/app/Models/Kelas.php +++ b/app/Models/Kelas.php @@ -20,9 +20,15 @@ class Kelas extends Model 'tingkat', ]; + // Relasi ke Siswa public function siswa() { return $this->hasMany(Siswa::class, 'id_kelas', 'id_kelas'); } + // Relasi ke Mengajar + public function mengajars() + { + return $this->hasMany(Mengajar::class, 'id_kelas', 'id_kelas'); + } } \ No newline at end of file diff --git a/resources/views/auth/login-guru.blade.php b/resources/views/auth/login-guru.blade.php index 23fa545..76589e8 100644 --- a/resources/views/auth/login-guru.blade.php +++ b/resources/views/auth/login-guru.blade.php @@ -1,3 +1,4 @@ + @extends('layouts.auth') @section('title', 'Login Guru') @@ -11,20 +12,37 @@ ← Kembali ke Landing Page + {{-- Alert Error --}} + @if($errors->any()) +
+ {{ $errors->first() }} +
+ @endif +
@csrf +
- + + @error('nip') +
{{ $message }}
+ @enderror
+
- +
+ @error('password') +
{{ $message }}
+ @enderror
{{-- Remember Me --}} @@ -48,4 +66,4 @@ this.textContent = type === 'password' ? '👁️' : '🙈'; }); -@endsection +@endsection \ No newline at end of file diff --git a/resources/views/guru/dashboard.blade.php b/resources/views/guru/dashboard.blade.php index 8ff72fe..d6f3c8e 100644 --- a/resources/views/guru/dashboard.blade.php +++ b/resources/views/guru/dashboard.blade.php @@ -3,27 +3,71 @@ @section('title', 'Dashboard Guru') @section('content') -
-

Dashboard Guru

-
-
-
-
-
Total Guru
-

12

-
-
+ + +

DASHBOARD GURU

+ +
+

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

+

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

+
+ +
+
+
+
{{ $totalKelas }}
+
Total Kelas Diampu
+
-
-
-
-
Total Siswa
-

230

-
-
+
+
+
{{ $totalMapel }}
+
Total Mata Pelajaran
+
+
+ +
+
+
{{ $totalSiswa }}
+
Total Siswa Diajar
-@endsection + +@endsection \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index 4ea5c6c..ebc1b56 100644 --- a/routes/web.php +++ b/routes/web.php @@ -4,21 +4,21 @@ use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; +// ADMIN CONTROLLERS use App\Http\Controllers\Admin\LoginController; use App\Http\Controllers\Admin\AdminController; -use App\Http\Controllers\Admin\GuruController; -use App\Http\Controllers\Admin\KelasController; -use App\Http\Controllers\Admin\SiswaController; -use App\Http\Controllers\Admin\MapelController; +use App\Http\Controllers\Admin\GuruController as AdminGuruController; +use App\Http\Controllers\Admin\KelasController as AdminKelasController; +use App\Http\Controllers\Admin\SiswaController as AdminSiswaController; +use App\Http\Controllers\Admin\MapelController as AdminMapelController; -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; +// GURU CONTROLLERS +use App\Http\Controllers\Guru\LoginController as GuruLoginController; +use App\Http\Controllers\Guru\DashboardController as GuruDashboardController; +use App\Http\Controllers\Guru\GuruController as GuruGuruController; +use App\Http\Controllers\Guru\KelasController as GuruKelasController; +use App\Http\Controllers\Guru\SiswaController as GuruSiswaController; +use App\Http\Controllers\Guru\ProfilController as GuruProfilController; // ==================== // LANDING PAGE @@ -32,20 +32,14 @@ // LOGIN PAGES (VIEW ONLY) // ======================================================= -// Selector login (opsional) -Route::get('/login', function () { - return view('auth.login-selector'); -})->name('login.selector'); - // LOGIN ADMIN Route::get('/admin/login', function () { return view('auth.login-admin'); })->name('admin.login'); // LOGIN GURU -Route::get('/guru/login', function () { - return view('auth.login-guru'); -})->name('guru.login'); +Route::get('/guru/login', [GuruLoginController::class, 'showLoginForm']) + ->name('guru.login'); // LOGIN SISWA Route::get('/siswa/login', function () { @@ -62,16 +56,8 @@ ->name('admin.login.submit'); // GURU LOGIN PROCESS -Route::post('/guru/login', function (Request $request) { - $credentials = $request->only('nip', 'password'); - - if (Auth::guard('guru')->attempt($credentials)) { - return redirect()->route('guru.dashboard'); - } - - return back()->withErrors(['nip' => 'NIP atau password salah']); -})->name('guru.login.submit'); - +Route::post('/guru/login', [GuruLoginController::class, 'login']) + ->name('guru.login.submit'); // SISWA LOGIN PROCESS Route::post('/siswa/login', function (Request $request) { @@ -101,14 +87,10 @@ })->name('profil'); // CRUD AREA - Route::resource('guru', GuruController::class); - Route::resource('siswa', SiswaController::class); - Route::resource('kelas', KelasController::class); - Route::resource('mapel', MapelController::class); - Route::resource('challenge', ChallengeController::class); - - Route::get('leaderboard', [LeaderboardController::class, 'index']) - ->name('leaderboard.index'); + Route::resource('guru', AdminGuruController::class); + Route::resource('siswa', AdminSiswaController::class); + Route::resource('kelas', AdminKelasController::class); + Route::resource('mapel', AdminMapelController::class); // LOGOUT ADMIN Route::post('/logout', [LoginController::class, 'logout']) @@ -117,12 +99,11 @@ // ======================================================= -// GURU AREA +// GURU AREA (HARUS LOGIN GURU) // ======================================================= Route::middleware(['auth:guru'])->prefix('guru')->name('guru.')->group(function () { - Route::get('/dashboard', [DashboardController::class, 'index']) - ->name('dashboard'); + Route::get('/dashboard', [GuruDashboardController::class, 'index'])->name('dashboard'); // Daftar Guru (Read Only) Route::get('/daftar-guru', [GuruGuruController::class, 'index'])->name('guru.index'); @@ -141,6 +122,7 @@ Route::post('/logout', [GuruLoginController::class, 'logout'])->name('logout'); }); + // ======================================================= // SISWA AREA // ======================================================= @@ -149,4 +131,3 @@ return view('siswa.dashboard'); })->name('siswa.dashboard'); }); -